先上效果图
完整代码 用到的资源文件下载
<!DOCTYPE html>
<html lang="en">
<head>
<title>Hello World!</title>
<script src="../Build/Cesium/Cesium.js"></script>
<script src="js/cesium-measure.js"></script>
<script src="js/jquery.min.js"></script>
<style>
@import url(../Build/Cesium/Widgets/widgets.css);
html,
body,
#cesiumContainer {
width: 100%;
height: 100%;
margin: 0;
padding: 0;
overflow: hidden;
}
.layui-card {
position: absolute;
top: 10px;
left: 5px;
background-color: #ffffff6b;
box-shadow: inset 1px 2px 2px 0 #f2f6fc;
color: white
}
</style>
</head>
<body>
<div id="viewer-container"></div>
<div class="layui-card">
<div class="layui-card-header" style="color:white">量测面板</div>
<div class="layui-card-body">
<div>量测:
<button type="button" class="layui-btn layui-btn-sm">不贴地</button>
<button type="button" class="layui-btn layui-btn-sm">空间距离</button>
<button type="button" class="layui-btn layui-btn-sm">空间面积</button>
<button type="button" class="layui-btn layui-btn-sm">三角量测</button>
<button type="button" class="layui-btn layui-btn-sm">加载模型</button>
</div>
<br>
<div>清除:
<button type="button" class="layui-btn layui-btn-primary layui-btn-sm">清除量测</button>
</div>
</div>
</div>
<script>
let viewer = new Cesium.Viewer("viewer-container", {
infoBox: false,
shouldAnimate: true,
vrButton: false,
geocoder: false,
homeButton: false,
sceneModePicker: false,
baseLayerPicker: true,
navigationHelpButton: false,
animation: false,
timeline: false,
fullscreenButton: false,
});
let measure = new Cesium.Measure(viewer)
let clampToGround = true
var tilesets = viewer.scene.primitives.add(new Cesium.Cesium3DTileset({
url: 'data/tileset.json'
}));
function loadModel() {
viewer.flyTo(viewer.entities.add({
position: Cesium.Cartesian3.fromDegrees(116.32878855240442, 39.95208707482746, 0.0),
model: {
uri: 'data/qiche.gltf'
}
}))
}
tilesets.readyPromise.then(function(tileset) {
viewer.flyTo(tileset)
$('.layui-btn').on('click', function() {
let text = $(this).text()
if (text) {
switch (text) {
case '不贴地':
clampToGround = false;
break;
case '空间距离':
measure.drawLineMeasureGraphics({
clampToGround: clampToGround,
callback: () => {}
});
break;
case '空间面积':
measure.drawAreaMeasureGraphics({
clampToGround: clampToGround,
callback: () => {}
});
break;
case '三角量测':
measure.drawTrianglesMeasureGraphics({
callback: () => {}
});
break;
case '清除量测':
measure._drawLayer.entities.removeAll();
break;
case '加载模型':
loadModel();
break;
}
}
})
})
</script>
</body>
</html>
参考https://github.com/zhangti0708/cesium-measure