Google Elevation API 'explode' 如何将折线分成等距点?

How does the Google Elevation API 'explode' a polyline into equidistant points?

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

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

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

I 运行 Open Topo Data and GPXZ,它们是 Google Elevation API 的开放和付费(分别)替代品,并且都支持采样路径!

我使用的算法详见Sampling points along a lat,lon path, and the Python code for doing this in Open Topo Data is on here on GitHub

但总的来说,解决这个问题的方法如下:

  • 计算每段路径的距离(以米等线性单位表示)。
  • 将所有这些相加得到总路径距离。
  • 对于每个样本 s_i
    • 样本i沿路径的距离d_itotal_path_distance * i / n_samples
    • 找到包含样本点的线段为d_segment_start <= d_i < d_segment_end
    • 样本s_i的位置是沿着上一步中识别的线段行进距离d_segment_start - d_i
    • 的结果

一些实际考虑

  • 在处理距离时,您需要使用线性单位(ft、km)而不是 angular 单位(lats、lons)。
  • 由于地球的圆度和块度,距离的计算比较复杂,所以使用第3方库。我对 javascript 不太熟悉,但在快速 google 之后,看起来 geodesy 包将是一个很好的起点。
  • 小心从 +180 到 -180 的日期线周围的 lons,理想情况下这是图书馆可以处理的事情。
  • 要沿着一段行驶一定距离,您可以从起点投影方位角两点之间的角度并非常接近,但是第 3 方大地测量库可能有稍微更准确的方法处理这一步。