我有某个位置(样本区域)的杆总数以及该区域中每条道路的道路几何形状(线串)。我可以计算杆之间的平均距离,我想沿着不同的道路(线串)均匀分布这些杆的总数。我看到 ST_LINE_INTERPOLATE_POINT() 可以帮助我实现这一目标,但我在 BigQuery 中没有这个函数。
我的 road_table 的片段附在这里。
我的方法是沿着道路定期生成插值点,该间隔由从数组计算出的比率值确定,如下所示:
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 中。
除了我不确定这是否是最好的方法之外,我还可以使用什么其他方法来实现此目的?
BigQuery 没有
ST_LINE_INTERPOLATE_POINT
,但有 ST_LINESUBSTRING,它返回行子段。如果你从 0 到给定的分数取一个子段,这个子段的终点就是你需要的点。
您可以像
一样定义
ST_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
);
更新: BigQuery 现在获得 ST_LINEINTERPOLATEPOINT: