learning_cesium/在线编辑-画线.html

209 lines
7.7 KiB
HTML
Raw Permalink Normal View History

2024-03-19 18:06:25 +08:00
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<meta http-equiv="X-UA-Compatible" content="ie=edge" />
<title>点击添加 有闪烁</title>
<link rel="shortcut icon" type="image/x-icon" href="./img/favicon.ico" />
<!-- <script src="Cesium/Cesium.js" ></script>
<link rel="stylesheet" href="Cesium/Widgets/widgets.css"> -->
<script src="./Build/Cesium/Cesium.js"></script>
<style>
@import url(./Build/Cesium/Widgets/widgets.css);
html,
body,
#cesiumdiv {
width: 100%;
height: 100%;
margin: 0;
}
.right {
position: fixed;
background-color: rgba(30, 36, 50, 0.6);
right: 180px;
top: 10px;
z-index: 2;
border: 1px solid rgba(32, 160, 255, 0.6);
border-radius: 3px;
padding: 10px;
color: white;
}
.right span {
display: inline-block;
border: 1px solid rgba(32, 160, 255, 0.6);
border-radius: 3px;
font-size: 14px;
padding: 2px 4px;
cursor: pointer;
}
</style>
<!-- <script src="./js/GifImageProperty.js"></script> -->
<!-- <script src="./js/navigation/viewerCesiumNavigationMixin.min.js"></script> -->
<!-- <script src="./js/navigation/viewerCesiumNavigationMixin.css"></script> -->
<!-- <script src="./node_modules/cesiumnavigation/viewerCesiumNavigationMixin.min.js"></script> -->
</head>
<body>
<div id="cesiumdiv">
<div class="right">
<!--<span class="point">绘制点</span>-->
<span class="line">绘制线</span>
<!--<span class="face">绘制面</span>-->
<span class="clear">清除</span>
</div>
<div id="creditContainer" style="display: none"></div>
</div>
<script>
Cesium.Ion.defaultAccessToken =
"eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJqdGkiOiI5ZjRjNTZkNC01NDYxLTRhMjQtOGEwZC1kZjA3YzQ5YTJlZDkiLCJpZCI6MjYwODQsInNjb3BlcyI6WyJhc3IiLCJnYyJdLCJpYXQiOjE1ODcxOTMwODN9.prGsSKyAW_9Ow5zHYPhbm3LsQL-ApQw5-5PNJkDaHi8";
//创建地球
var viewer = new Cesium.Viewer("cesiumdiv", {
animation: true,
// terrainExaggeration: 50.0, //地形夸张
// terrainProvider: new Cesium.createWorldTerrain({
// //加载全球地形
// requestVertexNormals: true, //有水面效果
// requestWaterMask: true, //光照效果
// }),
scene3DOnly: true,
// creditContainer: "creditContainer",
});
// viewer.extend(Cesium.viewerCesiumNavigationMixin, {});
viewer.cesiumWidget.creditContainer.style.display = "none"; //去cesium logo水印
// viewer.scene.globe.depthTestAgainstTerrain = true;// 打开深度检测,那么在地形以下的对象不可见
var arr = [0];
// viewer.cesiumNavigation.destroy();
// var options = {}; // 用于在使用重置导航重置地图视图时设置默认视图控制。接受的值是Cesium.Cartographic 和 Cesium.Rectangle.
// options.defaultResetView = Cesium.Rectangle.fromDegrees(80, 22, 130, 50);
// options.enableCompass= true; // 用于启用或禁用罗盘。true是启用罗盘false是禁用罗盘。默认值为true。
// options.enableZoomControls= false;// 用于启用或禁用缩放控件。true是启用false是禁用。默认值为true。
// options.enableDistanceLegend= false; // 用于启用或禁用距离图例。true是启用false是禁用。默认值为true。
// options.enableCompassOuterRing= true;// 用于启用或禁用指南针外环。true是启用false是禁用。默认值为true。
// viewer.extend(Cesium.viewerCesiumNavigationMixin, options);
var navigationDiv = document.getElementById("navigationDiv");
var compass = document.getElementsByClassName("compass")[0];
console.log(navigationDiv, compass);
//坐标存储
var positions = [];
var cesiumdiv = document.getElementById("cesiumdiv");
var lineStatus = false;
var handlerlineStatus = false;
var lineBtn = document.getElementsByClassName("line")[0];
// new Cesium.PolylineGraphics({
// clampToGround:true
// })
//绘制线
lineBtn.onclick = function () {
lineStatus = true;
cesiumdiv.style.cursor = "crosshair";
};
var redLine;
//ScreenSpaceEventHandler处理用户输入事件。可以添加自定义函数以便在用户输入时执行。
var handler = new Cesium.ScreenSpaceEventHandler(viewer.scene.canvas);
handler.setInputAction(function (event) {
//event position: a {x: 510, y: 345} 屏幕坐标
if (!lineStatus) {
return;
}
handlerlineStatus = true;
//屏幕坐标转
var ray = viewer.camera.getPickRay(event.position);
var ellipsoid = viewer.scene.globe.ellipsoid;
var cartesian = viewer.scene.globe.pick(ray, viewer.scene);
//将笛卡尔坐标转换为地理坐标
var cartographic = Cesium.Cartographic.fromCartesian(cartesian);
//将弧度转为度的十进制度表示
var log = Cesium.Math.toDegrees(cartographic.longitude);
var lat = Cesium.Math.toDegrees(cartographic.latitude);
// 获取海拔高度
var height1 = viewer.scene.globe.getHeight(cartographic);
var height2 = cartographic.height;
positions.push(cartesian);
//添加实体
// var en = viewer.entities.add({
// id:arr[arr.length-1],
// name:"点击",
// description:"cjgfjb",
// position:cartesian,
// billboard:{
// image: './img/default1.png',
// width:100,
// height:100
// }
// })
console.log(redLine.polyline.positions);
if (positions.length > 1) {
redLine.polyline.positions = positions; //更新线的点
// viewer.entities.add(redLine);
}
arr.push(arr.length);
}, Cesium.ScreenSpaceEventType.LEFT_CLICK);
redLine = viewer.entities.add({
name: arr[arr.length - 1],
polyline: {
show: true,
positions: [], //Cesium.Cartesian3.fromDegreesArray([110, 25, 130, 25]),
width: 5,
material: Cesium.Color.CORNFLOWERBLUE, //获取或设置折线的表面外观
heightReference: Cesium.HeightReference.CLAMP_TO_GROUND,
},
});
var end = [],
endline;
viewer.screenSpaceEventHandler.setInputAction(function onMouseMove(
movement
) {
//event position: a {x: 510, y: 345} 屏幕坐标
if (!handlerlineStatus) {
return;
}
var endpoint = Cesium.Cartesian3.fromDegreesArray([
movement.endPosition.x,
movement.endPosition.y,
]);
},
Cesium.ScreenSpaceEventType.MOUSE_MOVE);
//单击鼠标右键结束画点 线 面
handler.setInputAction(function (movement) {
pointStatus = false;
lineStatus = false;
faceStatus = false;
cesiumdiv.style.cursor = "unset";
}, Cesium.ScreenSpaceEventType.RIGHT_CLICK);
//清除
var clearBtn = document.getElementsByClassName("clear")[0];
clearBtn.onclick = function () {
// for(var i=0;i<arr.length;i++){
// viewer.entities.removeById(arr[i]);//删除
// //viewer.entities.getById("rain").show = false; //隐藏实体
// }
pointStatus = false;
lineStatus = false;
faceStatus = false;
handlerlineStatus = false;
cesiumdiv.style.cursor = "unset";
// 移除所有实体Entity
viewer.entities.removeAll();
};
</script>
</body>
</html>