铯JS-两点之间的距离

CesiumJS - Distance Between Two Points

本文关键字:两点 之间 距离 JS-      更新时间:2023-09-26

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

我有一堆KML格式的占位符,如下所示:

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

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

这里发生了一些事情。Cesium.Cartesian3类容纳米,因此除以1000得到公里是正确的,但这并不是全部。笛卡尔3是三维地球仪上的位置,如果你在地球仪相对两侧的两个位置之间计算一个简单的Cartesian.distance,你就会得到笛卡尔线性距离,比如一条线的长度,它穿过地球仪的中心,从一个位置到达另一个位置,而不是绕地球仪的表面到达另一侧。

要获得你真正想要的距离——沿着地球表面曲率的直线的距离——请在GIS SE上查看Cesium JS line Length的答案。