经纬志
首页 / Cesium / 使用示例

量测距离

在地表上逐点单击,连成折线并算出总长度,每一段的中点标着自己的公里数。 右键或按钮清空重新量。

CesiumJS 1.121 · 更新 2026-10-27
源码与运行效果
运行效果

距离为什么用 EllipsoidGeodesic

Cartesian3.distance 算的是三维空间里的直线长度,也就是穿过地壳的弦长。 北京到上海弦长约 1067 公里,沿地表的大圆距离约 1068 公里,短距离差别可以忽略, 但量几百公里的管线、上千公里的航线时,误差会累积到百米级。

EllipsoidGeodesic 直接给出椭球面上的距离,同时还能按比例 取出中间点,示例正是用它来放分段标签的。

重绘的思路

每次加点都把之前创建的临时实体全部移除,再按当前点表重建一次。 点的数量在个位数到几十个,重建开销可以忽略,代码也不用维护增量的状态。

数据量大时(比如上百个拐点的管线),应该改成只追加新增线段, 否则每点一次都要销毁重建全部几何,肉眼能看到卡顿。

可调参数

位置改什么效果
polyline.width2 改成 1线更细,适合精细的工程图
clampToGround改 false线按拾取高度画,不贴地形
interpolateUsingFraction(0.5)改成 0.5 之外的值标签沿线段移动位置
showBackground改 false去掉标签底色,深色球面上更难读
右键回调改成撤销上一点把 points.pop() 后重绘

量出来偏短。没有地形时拾取的是椭球面,高程为零; 山谷里的实际地面比椭球面低、高原上更高,沿地形的真实里程会更长。 对精度有要求时,用 globe.pick 取真实地表点, 并按采样点做分段累加,而不是只连两个端点。

扩展方向

同一套采集逻辑换成面就是面积量测:把点表交给 PolygonHierarchy,面积用 Cesium.PolygonGeometry 计算,或者投影到局部平面后用鞋带公式估算。换成矩形就是框选范围, 换成立方体就是空域量测。