先贴一段代码,是dvgis里的distance.js源码,dvgis是cesium的二次封装,可以参考参考:

 1import{Cesium}'@dc-modules/namespace' 2import{Transform}from'@dc-modules/transform' 3 
 4exportdefault functiondistance(positions){ 5letdistance=0 6       if(positions&&Array.isArray(positions)){ 7         for(leti=0;i<positions.length-1;i++) {
 8letc1=Transform.transformWGS84ToCartographic(positions[i]) 9letc2=Transform.transformWGS84ToCartographic(positions[i+1])
10letgeodesic=newCesium.EllipsoidGeodesic()11           geodesic.setEndPoints(c1, c2)
12lets= geodesic.surfaceDistance
13s=Math.sqrt(Math.pow(s,2)+Math.pow(c2.height-c1.height,2))
14distance+= s
15         }
16       }
17 
18       returndistance.toFixed(3)
19     }

看这个文件名字,应该是计算两点间距离的,其中用到了EllipsoidGeodesic,也就是测地线。

测地线就是地球上两点间沿着椭球走的那条最短路径。

 让我感到奇怪的是第13行代码

s = Math.sqrt(Math.pow(s, 2) + Math.pow(c2.height - c1.height, 2))

这样子更像是用勾股定理算长度。测地线明明是条曲线不知道为什么要平方。挺奇怪的。

 

举起