提问人:3XT 提问时间:11/17/2023 更新时间:11/17/2023 访问量:13
在 Bigquery 中沿线串生成均匀间隔的点地理位置
Generate evenly space point geography along a linestring in Bigquery
问:
我有某个位置(样本区域)的电线杆总数以及该区域中每条道路的道路几何形状(线串)。我可以计算杆之间的平均距离,我想将这些杆总数均匀分布在不同的道路上(线串)。我看到 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 中。
我还可以使用其他方法来实现这一目标,此外我不确定这是否是最好的方法?
答:
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
请将回复标记为已接受的答案,以帮助其他用户找到它
评论