1

Google 提供的 Elevation API 使用两个参数来请求沿路径的高度:pathsamples。路径是起点latlng终点的和,samples是沿要返回高程数据的路径的样本点。因此,路径被划分为沿路径的一组有序等距点,这些点作为 的数组发送回客户端latlngelevation针对每个点。这对于可视化高程剖面等很有用。

我已经看到了 Google Elevation API 的其他开源替代方案,但是,它们都没有提供samples参数的简单方法,因此如果想要实现相同的目标,您只需以某种方式将自己的路径“分解”成多个等距点并将此数组作为 URL 的一部分发送到后端。

在将路径(通常是 LineString / polyline 类型)分割成等距点时,我应该考虑一个库或算法吗?一般来说,我应该如何解决这个问题?

4

1 回答 1

0

我运行Open Topo DataGPXZ,它们是 Google Elevation API 的开放和付费(分别)替代方案,并且都支持采样路径!

我使用的算法在沿 lat,lon 路径的采样点中有详细说明,在 Open Topo Data 中执行此操作的 Python 代码在 GitHub 上

但总的来说,以下是解决此问题的方法:

  • 计算路径每段的距离(以线性单位,如米)。
  • 将所有这些加起来以获得总路径距离。
  • 对于每个样本s_i
    • d_i样本i沿路径的距离为total_path_distance * i / n_samples
    • 找到包含样本点的线段为d_segment_start <= d_i < d_segment_end
    • 样本的位置s_i是沿着上一步中确定的路段移动距离为的结果d_segment_start - d_i

一些实际的考虑

  • 在处理距离时,您需要使用线性单位(ft、km)而不是角度单位(lats、lons)。
  • 由于地球的圆度和凹凸不平,距离的计算很复杂,因此请使用 3rd-party 库。我对javascript不太熟悉,但是在快速谷歌之后,看起来 geodesy包将是一个很好的起点。
  • 小心 lons 从 +180 到 -180 的日期线,理想情况下这是图书馆可以处理的。
  • 要沿着线段行进一定距离,您可以从起点按两点之间的角度投影方位角并变得非常接近,但第 3 方大地测量库可能有更准确的方法来处理此步骤。
于 2021-10-21T17:13:31.587 回答