在 Bigquery 中沿线串生成均匀间隔的点地理位置

Generate evenly space point geography along a linestring in Bigquery

提问人:3XT 提问时间:11/17/2023 更新时间:11/17/2023 访问量:13

问:

我有某个位置(样本区域)的电线杆总数以及该区域中每条道路的道路几何形状(线串)。我可以计算杆之间的平均距离,我想将这些杆总数均匀分布在不同的道路上(线串)。我看到 ST_LINE_INTERPOLATE_POINT() 可以帮助我实现这一目标,但我在 BigQuery 中没有这个函数。

我的road_table的剪裁附在这里。

我的方法是以固定的间隔沿路生成插值点,该插值由从数组计算的 raio 值确定,如下所示:

SELECT road_geometry, ST_LINE_INTERPOLATE_POINT(road_geometry, ratio) AS  interpolated_points
FROM road_table, UNNEST(GENERATE_ARRAY (0,1, 1/(road_length/avg_dist_pole) AS ratio

希望为每条记录输出 POINT Geography 数组。

但ST_LINE_INTERPOLATE_POINT不在 BQ 中。

我还可以使用其他方法来实现这一目标,此外我不确定这是否是最好的方法?

Google-BigQuery GIS 地理空间

评论


答:

0赞 Michael Entin 11/27/2023 #1

BigQuery 没有,但它有返回行子段的ST_LINESUBSTRING。如果您将子段从 0 取到给定分数,则该子段的终点将是您需要的点。ST_LINE_INTERPOLATE_POINT

您可以定义 likeST_LINE_INTERPOLATE_POINT

CREATE TEMP FUNCTION ST_LINE_INTERPOLATE_POINT(line GEOGRAPHY, fraction FLOAT64) 
RETURNS GEOGRAPHY
AS (
  ST_EndPoint(ST_LineSubString(line, 0, fraction))
);

并称它为例如

SELECT ST_LINE_INTERPOLATE_POINT(
  ST_GeogFromText('LINESTRING(1 1, 10 10)'), 
  0.9
);

评论

0赞 3XT 12/1/2023
谢谢迈克尔,这太棒了,解决了问题。
0赞 Michael Entin 12/1/2023
请将回复标记为已接受的答案,以帮助其他用户找到它