我的目标是计算两个铯实体之间的距离,以公里为单位。作为一种奖励,我最终希望能够测量它们的距离(以像素为单位)。
我有一堆KML格式的placemarks,如下所示:
<Placemark>
<name>Place</name>
<Point><coordinates>48.655,-31.175</coordinates></Point>
<styleUrl>#style</styleUrl>
<ExtendedData>
...
</ExtendedData>
</Placemark>我像这样把它们导入铯中:
viewer.dataSources.add(Cesium.KmlDataSource.load('./data.kml', options)).then(function(dataSource) {
var entities = dataSource.entities._entities._array;我试图为我所关心的实体创建新的Cartesian3对象,但是我从实体对象获得的x、y和z值有几十万个。在实体对象中找不到来自我的KML的纬度和经度。
如果我确实创建了Cartesian3对象并计算出这样的距离:
var distance = Cesium.Cartesian3.distance(firstPoint, secondPoint);它返回了数百万的数字。我用这种方法评估了多个点之间的距离,当我将这些值与返回实际值(以公里为单位)的在线计算器的结果进行比较时,距离的差异并不是线性的(铯返回的一些距离是实际距离的900倍,有些是实际距离的700倍)。
我希望这足以得到帮助。我不知道从哪里开始修这个。任何帮助都将不胜感激。谢谢。
发布于 2016-05-09 19:44:31
这里发生了几件事。Cesium.Cartesian3类拥有米,所以除以1000得到公里是正确的,但这还不是全部的故事。Cartesian3s是三维地球上的位置,如果你计算两个人之间的一个简单的Cartesian.distance,就会得到笛卡儿的直线距离,就像穿过地球中间的一条线的长度,从一个到另一个,而不是绕着地球表面走到另一边。
要得到你真正想要的距离--沿着地球表面曲率的一条线的距离--看看Cesium JS Line Length在GIS上的答案。
https://stackoverflow.com/questions/37122298
复制相似问题