Sql 从Line-Bigquery中提取n个坐标
我想从大查询中的地理对象(一条线)中提取n个坐标(纬度、经度) 有没有办法指定我要获取多少个Sql 从Line-Bigquery中提取n个坐标,sql,google-bigquery,Sql,Google Bigquery,我想从大查询中的地理对象(一条线)中提取n个坐标(纬度、经度) 有没有办法指定我要获取多少个st_geogpoint?(可以大于或小于使用st_makeline创建行时使用的st_geogpoint) 例如: LINESTRING(-115.2893119 36.218517, -115.2892195 36.2184946, -115.2879825 36.2184996, -115.2871506 36.2185021, -115.2870766 36.2185255) 我希望能够从该
st_geogpoint
?(可以大于或小于使用st_makeline
创建行时使用的st_geogpoint
)
例如:
LINESTRING(-115.2893119 36.218517, -115.2892195 36.2184946, -115.2879825 36.2184996, -115.2871506 36.2185021, -115.2870766 36.2185255)
我希望能够从该行中提取n(其中n>=2)st_geogpoint
。
可能吗
如果n=2,则预期输出
[POINT(-115.2893119 36.218517), POINT(-115.2870766 36.2185255)]
如果n=10,则预期输出
[POINT(-115.2893119 36.218517),
POINT_2,
POINT_3,
POINT_4,
POINT_5,
POINT_6,
POINT_7,
POINT_8,
POINT_9,
POINT(-115.2870766 36.2185255) ]
我不能给出第一个和最后一个之间的点的例子,因为我希望它们是根据下面的n值从行中提取出来的,这是BigQuery标准SQL
#standardSQL
SELECT
SAFE.ST_GEOGFROMTEXT(CONCAT('POINT(', point, ')')) geo_object
FROM `project.dataset.table`,
UNNEST(REGEXP_EXTRACT_ALL(ST_ASTEXT(geo_object), r'[^,\(\)]+')) point WITH OFFSET pos
WHERE pos BETWEEN 1 AND 3
您可以使用问题中的样本数据测试、播放上述内容,如下例所示
#standardSQL
WITH `project.dataset.table` AS (
SELECT ST_GEOGFROMTEXT('LINESTRING(-115.2893119 36.218517, -115.2892195 36.2184946, -115.2879825 36.2184996, -115.2871506 36.2185021, -115.2870766 36.2185255)') geo_object
)
SELECT
SAFE.ST_GEOGFROMTEXT(CONCAT('POINT(', point, ')')) geo_object
FROM `project.dataset.table`,
UNNEST(REGEXP_EXTRACT_ALL(ST_ASTEXT(geo_object), r'[^,\(\)]+')) point WITH OFFSET pos
WHERE pos BETWEEN 1 AND 3
结果
Row geo_object
1 POINT(-115.2893119 36.218517)
2 POINT(-115.2892195 36.2184946)
3 POINT(-115.2879825 36.2184996)
显然,通过调整下线中的1和3,您可以控制要输出的点数
WHERE pos BETWEEN 1 AND 3
如果希望输出与数组位于同一行中,请参见下文
#standardSQL
WITH `project.dataset.table` AS (
SELECT ST_GEOGFROMTEXT('LINESTRING(-115.2893119 36.218517, -115.2892195 36.2184946, -115.2879825 36.2184996, -115.2871506 36.2185021, -115.2870766 36.2185255)') geo_object
)
SELECT
ARRAY(
SELECT SAFE.ST_GEOGFROMTEXT(CONCAT('POINT(', point, ')'))
FROM UNNEST(REGEXP_EXTRACT_ALL(ST_ASTEXT(geo_object), r'[^,\(\)]+')) point WITH OFFSET pos
WHERE pos BETWEEN 1 AND 3
AND NOT point IS NULL
) geo_objects
FROM `project.dataset.table`
这个产生数组
Row geo_objects
1 POINT(-115.2893119 36.218517)
POINT(-115.2892195 36.2184946)
POINT(-115.2879825 36.2184996)
下面是BigQuery标准SQL
#standardSQL
SELECT
SAFE.ST_GEOGFROMTEXT(CONCAT('POINT(', point, ')')) geo_object
FROM `project.dataset.table`,
UNNEST(REGEXP_EXTRACT_ALL(ST_ASTEXT(geo_object), r'[^,\(\)]+')) point WITH OFFSET pos
WHERE pos BETWEEN 1 AND 3
您可以使用问题中的样本数据测试、播放上述内容,如下例所示
#standardSQL
WITH `project.dataset.table` AS (
SELECT ST_GEOGFROMTEXT('LINESTRING(-115.2893119 36.218517, -115.2892195 36.2184946, -115.2879825 36.2184996, -115.2871506 36.2185021, -115.2870766 36.2185255)') geo_object
)
SELECT
SAFE.ST_GEOGFROMTEXT(CONCAT('POINT(', point, ')')) geo_object
FROM `project.dataset.table`,
UNNEST(REGEXP_EXTRACT_ALL(ST_ASTEXT(geo_object), r'[^,\(\)]+')) point WITH OFFSET pos
WHERE pos BETWEEN 1 AND 3
结果
Row geo_object
1 POINT(-115.2893119 36.218517)
2 POINT(-115.2892195 36.2184946)
3 POINT(-115.2879825 36.2184996)
显然,通过调整下线中的1和3,您可以控制要输出的点数
WHERE pos BETWEEN 1 AND 3
如果希望输出与数组位于同一行中,请参见下文
#standardSQL
WITH `project.dataset.table` AS (
SELECT ST_GEOGFROMTEXT('LINESTRING(-115.2893119 36.218517, -115.2892195 36.2184946, -115.2879825 36.2184996, -115.2871506 36.2185021, -115.2870766 36.2185255)') geo_object
)
SELECT
ARRAY(
SELECT SAFE.ST_GEOGFROMTEXT(CONCAT('POINT(', point, ')'))
FROM UNNEST(REGEXP_EXTRACT_ALL(ST_ASTEXT(geo_object), r'[^,\(\)]+')) point WITH OFFSET pos
WHERE pos BETWEEN 1 AND 3
AND NOT point IS NULL
) geo_objects
FROM `project.dataset.table`
这个产生数组
Row geo_objects
1 POINT(-115.2893119 36.218517)
POINT(-115.2892195 36.2184946)
POINT(-115.2879825 36.2184996)
假设输入是您的文档中已经显示的文本行,您能否澄清您的用例或至少显示您的预期输出question@MikhailBerlyant我已经添加了预期的输出。Thanksit现在很清楚了:o)假设输入是您的文档中已经显示的文本行,您能否澄清您的用例或至少显示您的预期输出question@MikhailBerlyant我已经添加了预期的输出。谢谢,现在一切都清楚了:o)