首页 > 解决方案 > BigQuery 中的空间连接

问题描述

我有三张桌子,一张是多边形图层。一个有开始日期和 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

并根据 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

到目前为止,我有一个选择第一个可用点的查询。接下来,我想根据点选择与多边形图层进行空间连接。结果将显示 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 函数时,它没有使用在查询的第一部分中选择的点。我还遇到了一个错误:ST_within 函数中的名称 t3 无法识别。我需要在某处有一个嵌套的选择语句吗?

标签: google-bigqueryspatial-query

解决方案


目前尚不清楚输入模式是什么,因此这不是一个完整的查询,但由于您有一个选择第一个工作点的查询,只需将其用作子查询:

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))

推荐阅读