【问题标题】:CesiumJS - Distance Between Two PointsCesiumJS - 两点之间的距离
【发布时间】:2016-05-09 17:52:35
【问题描述】:

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

我有一堆 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);

它返回数以百万计的数字。我以这种方式评估了多个点之间的距离,当我将返回的值与返回以公里为单位的实际值的在线计算器的结果进行比较时,距离的差异不是线性的(Cesium 返回的一些距离是 900实际距离的倍数,有些是实际距离的 700 倍)。

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

【问题讨论】:

    标签: javascript distance kml cesium


    【解决方案1】:

    这里发生了一些事情。 Cesium.Cartesian3 类包含米,因此除以 1000 得到公里是正确的,但这还不是全部。 Cartesian3s 是 3D 地球上的位置,如果您在地球相对两侧的两个位置之间计算一个简单的Cartesian.distance,您将得到笛卡尔线性距离,就像穿过中间的直线的长度一样地球从一个到另一个,而不是绕地球表面到达另一端。

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

    【讨论】:

      猜你喜欢
      • 2019-01-23
      • 2012-07-17
      • 1970-01-01
      • 2019-09-16
      • 2010-10-30
      • 1970-01-01
      • 2017-07-06
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多