CesiumJS - 两点之间的距离

时间:2016-05-09 17:52:36

标签: javascript distance kml cesium

我的目标是计算两个铯实体之间的距离,以千米为单位。作为奖励,我最终希望能够以像素为单位测量它们的距离。

我有一堆KML格式的地标,如下所示:

<Placemark>
  <name>Place</name>
  <Point><coordinates>48.655,-31.175</coordinates></Point>
  <styleUrl>#style</styleUrl>
  <ExtendedData>
     ...
  </ExtendedData>
</Placemark>

我将它们导入Cesium,如下所示:

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倍。

我希望这足以获得帮助。我不知道从哪里开始解决这个问题。任何帮助,将不胜感激。谢谢。

1 个答案:

答案 0 :(得分:7)

这里发生了一些事情。 Cesium.Cartesian3类保持米,所以除以1000得到km是正确的,但这不是完整的故事。 Cartesian3s是3D地球仪上的位置,如果您在该地球的两侧计算其中两个之间的简单Cartesian.distance,您将获得笛卡尔线性距离,如切割线的长度穿过地球中部,从一个到另一个,而不是绕着地球表面到达远方。

要获得实际所需的距离 - 跟随地球表面曲率的直线距离 - 请查看GIS SE上Cesium JS Line Length的答案。