先贴一段代码,是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))
这样子更像是用勾股定理算长度。测地线明明是条曲线不知道为什么要平方。挺奇怪的。
举起