Google Elevation API 'explode' 如何将折线分成等距点?
How does the Google Elevation API 'explode' a polyline into equidistant points?
Google 提供的高程 API 使用两个参数来请求沿路径的高度:path
和 samples
。路径是起点和终点的 lat
和 lng
,samples
是沿路径的样本点,return 高程数据。因此路径被划分为沿路径的一组有序的等距点,这些点作为每个点的 lat
、lng
和 elevation
的数组发送回客户端。这对于可视化海拔剖面等很有用。
我已经看到 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_i
为total_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 方大地测量库可能有稍微更准确的方法处理这一步。
Google 提供的高程 API 使用两个参数来请求沿路径的高度:path
和 samples
。路径是起点和终点的 lat
和 lng
,samples
是沿路径的样本点,return 高程数据。因此路径被划分为沿路径的一组有序的等距点,这些点作为每个点的 lat
、lng
和 elevation
的数组发送回客户端。这对于可视化海拔剖面等很有用。
我已经看到 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_i
为total_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 方大地测量库可能有稍微更准确的方法处理这一步。