前言
缺少前置学习使用资料,请自行查阅:[https://blog.csdn.net/weixin_44402694/article/details/123110136](https://blog.csdn.net/weixin_44402694/article/details/123110136)
以下示例使用到的公共静态资料,不建议下载,建议官网自行下载超图Build资源,示例所涉及图片会在示例使用到时提供出来。如有需要可下载:[https://download.csdn.net/download/weixin_44402694/82180350](https://download.csdn.net/download/weixin_44402694/82180350)。
绘制点位:通过Cesium.entities.add添加实体的方式绘制。
使用
-
效果
-
完整代码
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<meta http-equiv="X-UA-Compatible" content="IE=edge" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>绘制点位 - 根据已知坐标撒点</title>
<link href="./public/Build/Cesium/Widgets/widgets.css" rel="stylesheet" />
<script
type="text/javascript"
src="./public/Build/Cesium/Cesium.js"
></script>
<style>
* {
margin: 0;
padding: 0;
}
html,
body,
#cesium-container {
width: 100%;
height: 100%;
}
.panel {
position: fixed;
left: 10px;
top: 10px;
z-index: 1;
background-color: #fff;
}
.panel .btn {
cursor: pointer;
}
.tooltip {
position: fixed;
left: -1000px;
top: -1000px;
background: rgba(0, 0, 0, 0.4);
padding: 4px;
border-radius: 4px;
display: none;
z-index: 1;
color: #fff;
}
</style>
</head>
<body>
<div id="cesium-container" />
<div class="panel">
<p class="btn">点击地图撒点</p>
<p class="btn">点击关闭撒点</p>
<p class="btn">清除点位</p>
</div>
<div class="tooltip">点击绘制一个点位</div>
<script>
let viewer, onOff, point
const tooltip = document.querySelector('.tooltip')
window.onload = function () {
viewer = new Cesium.Viewer('cesium-container', {
navigation: false,
})
initEventHandler()
initDrawPointEventHandler()
}
// 点击按钮触发对应事件
function initDrawPointEventHandler() {
const btns = document.querySelectorAll('.panel .btn')
btns[0].addEventListener('click', () => {
onOff = true
tooltip.style.display = 'block'
// 创建提示框
highlightBtnHandler(0) // 控制当前点击的按钮高亮
})
btns[1].addEventListener('click', () => {
onOff = false
tooltip.style.display = 'none'
// 移除提示框
highlightBtnHandler(1) // 控制当前点击的按钮高亮
})
btns[2].addEventListener('click', () => {
onOff = false
tooltip.style.display = 'none'
highlightBtnHandler(2) // 控制当前点击的按钮高亮
clearPointHandler()
})
}
// 初始化事件
function initEventHandler() {
const handler = new Cesium.ScreenSpaceEventHandler(viewer.scene.canvas) // event事件处理程序
// 绑定各类事件
handler.setInputAction(
// 鼠标点击事件
(e) => {
if (onOff) {
// 开启绘制撒点
clearPointHandler()
drawPointHandler(e.position)
}
},
Cesium.ScreenSpaceEventType.LEFT_CLICK
)
handler.setInputAction(
// 鼠标移动事件
(e) => {
if (onOff) {
// 鼠标显示手型
viewer.enableCursorStyle = false
viewer._element.style.cursor = ''
document.documentElement.style.cursor = 'pointer'
tooltip.style.left = e.endPosition.x + 20 + 'px'
tooltip.style.top = e.endPosition.y - 10 + 'px'
} else {
// 鼠标关闭手型,隐藏提示框
viewer.enableCursorStyle = true
document.documentElement.style.cursor = ''
tooltip.style.left = '-1000px' // 隐藏在视口之外
tooltip.style.top = '-1000px'
}
},
Cesium.ScreenSpaceEventType.MOUSE_MOVE
) // 需要shift和左键组合触发
}
// 控制当前点击的按钮高亮
function highlightBtnHandler(currentActiveIndex) {
const btns = document.querySelectorAll('.panel .btn')
Array.from(btns).forEach((btn, index) => {
btn.style.color = currentActiveIndex === index ? 'red' : '#000'
})
}
// 绘制点位
function drawPointHandler(position) {
const resultPos = viewer.scene.pickPosition(position)
point = viewer.entities.add({
id: 'test',
name: 'test',
position: resultPos,
point: {
pixelSize: 5,
color: new Cesium.Color(0, 1, 1),
},
})
}
// 清除已存在点位
function clearPointHandler() {
// viewer.entities.removeAll() // 清除场景中所有的entity实体
// viewer.entities.remove(point) // 传入指定的实体删除
viewer.entities.remove(viewer.entities.getById('test')) // 根据id获取到对应的实体再触发删除
}
</script>
</body>
</html>