在 Bigquery 中沿线串生成均匀的空间点地理

问题描述 投票:0回答:1

我有某个位置(样本区域)的杆总数以及该区域中每条道路的道路几何形状(线串)。我可以计算杆之间的平均距离,我想沿着不同的道路(线串)均匀分布这些杆的总数。我看到 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 中。

除了我不确定这是否是最好的方法之外,我还可以使用什么其他方法来实现此目的?

google-bigquery gis geospatial
1个回答
0
投票

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:

https://cloud.google.com/bigquery/docs/reference/standard-sql/geography_functions#st_lineinterpolatepoint

© www.soinside.com 2019 - 2024. All rights reserved.