BigQuery 中的空间连接
Spatial join in BigQuery
我有三个 table,其中一个是多边形图层。一个有开始日期和 ID 的人:
Begin_Date ID
2015-12-14 00:00:00.0000000 1
2015-12-10 19:00:00.0000000 2
2015-12-09 19:00:00.0000000 3
2015-12-07 00:00:00.0000000 4
2015-12-06 00:00:00.0000000 5
和 table 以及基于 ID 的这些记录的关联位置:
DateAndTime ID
2015-12-14 00:00:00.0000000 1
2015-12-15 19:00:00.0000000 1
2015-12-16 19:00:00.0000000 1
2015-12-12 00:00:00.0000000 2
2015-12-13 00:00:00.0000000 2
到目前为止,我有一个查询 select 是第一个可用点。接下来,我想根据点 selection 与多边形图层进行空间连接。结果将显示 ID、第一个点及其所在的多边形。
想要的结果:
ID point Area
35 POINT(-109.607635 40.876372) TEST
我卡在哪里:
SELECT
t2.ID,
ARRAY_AGG(ST_GeogPoint(Longitude, Latitude) ORDER BY t3.DateAndTime ASC LIMIT 1)[ORDINAL(1)] AS point,
ST_GeogFromText(WKT) geo
FROM `Table1` as t1, `Table2` t2
INNER JOIN
`Table3` AS t3
ON t2.ID = t3.ID AND t3.DateAndTime >= t2.BeginDate
AND ST_Within(ST_GeogPoint(t3.Longitude, t3.Latitude), ST_GeogFromText(t1.WKT))
GROUP BY t2.ID;
有几件事我不确定我做对了,当我使用 ST_Within 函数时,它没有使用查询第一部分中的 selected 点。我还遇到了一个错误:ST_within 函数中无法识别的名称 t3。我需要在某处嵌套 select 语句吗?
尚不清楚输入模式是什么,因此这不是一个完整的查询,但由于您有一个选择第一个点的查询,因此只需将其用作子查询即可:
SELECT
ST_GeogFromText(WKT) geo,
...
FROM `Table1` as t1
JOIN (
SELECT ST_GeogPoint(t3.Longitude, t3.Latitude) AS StartPoint,
...
<rest of the query that selects the first point>
) AS t4
ON ST_Within(t4.StartPoint, ST_GeogFromText(t1.WKT))
我有三个 table,其中一个是多边形图层。一个有开始日期和 ID 的人:
Begin_Date ID
2015-12-14 00:00:00.0000000 1
2015-12-10 19:00:00.0000000 2
2015-12-09 19:00:00.0000000 3
2015-12-07 00:00:00.0000000 4
2015-12-06 00:00:00.0000000 5
和 table 以及基于 ID 的这些记录的关联位置:
DateAndTime ID
2015-12-14 00:00:00.0000000 1
2015-12-15 19:00:00.0000000 1
2015-12-16 19:00:00.0000000 1
2015-12-12 00:00:00.0000000 2
2015-12-13 00:00:00.0000000 2
到目前为止,我有一个查询 select 是第一个可用点。接下来,我想根据点 selection 与多边形图层进行空间连接。结果将显示 ID、第一个点及其所在的多边形。
想要的结果:
ID point Area
35 POINT(-109.607635 40.876372) TEST
我卡在哪里:
SELECT
t2.ID,
ARRAY_AGG(ST_GeogPoint(Longitude, Latitude) ORDER BY t3.DateAndTime ASC LIMIT 1)[ORDINAL(1)] AS point,
ST_GeogFromText(WKT) geo
FROM `Table1` as t1, `Table2` t2
INNER JOIN
`Table3` AS t3
ON t2.ID = t3.ID AND t3.DateAndTime >= t2.BeginDate
AND ST_Within(ST_GeogPoint(t3.Longitude, t3.Latitude), ST_GeogFromText(t1.WKT))
GROUP BY t2.ID;
有几件事我不确定我做对了,当我使用 ST_Within 函数时,它没有使用查询第一部分中的 selected 点。我还遇到了一个错误:ST_within 函数中无法识别的名称 t3。我需要在某处嵌套 select 语句吗?
尚不清楚输入模式是什么,因此这不是一个完整的查询,但由于您有一个选择第一个点的查询,因此只需将其用作子查询即可:
SELECT
ST_GeogFromText(WKT) geo,
...
FROM `Table1` as t1
JOIN (
SELECT ST_GeogPoint(t3.Longitude, t3.Latitude) AS StartPoint,
...
<rest of the query that selects the first point>
) AS t4
ON ST_Within(t4.StartPoint, ST_GeogFromText(t1.WKT))