在 BigQuery 中查询多边形

Query for Polygon in BigQuery

我正在尝试使用#standardSQL 查询以下多边形内的记录:

POLYGON(( -139.833984375 16.97274101999902, -138.33984375 15.029685756555674, -67.060546875 48.516604348867475,  -68.37890625 49.89463439573421, -139.833984375  16.97274101999902))

这是我的查询:

SELECT *

FROM `ais-data-analysis.adsb.target_updates` a

WHERE (timestamp BETWEEN '2019-09-16 13:00:00' AND '2019-09-16 14:30:59')  AND ST_DWithin( ST_GeogFromText( 'POLYGON(( -139.833984375 16.97274101999902, -138.33984375 15.029685756555674, -67.060546875 48.516604348867475,  -68.37890625 49.89463439573421, -139.833984375  16.97274101999902))'),
      ST_GeogPoint(-139.833984375 ,
        16.97274101999902),
      10)
ORDER BY timestamp ASC;

我的查询运行但返回的数据不考虑多边形参数,而是 returns 以上给定时间的所有记录。我自己也不确定如何在 BigQuery 中处理多边形。

您需要再次测试一个变量,而不是一个常量:

SELECT ST_DWithin( 
  ST_GeogFromText( 
    'POLYGON(( -139.833984375 16.97274101999902, -138.33984375 15.029685756555674, -67.060546875 48.516604348867475,  -68.37890625 49.89463439573421, -139.833984375  16.97274101999902))')
  , ST_GeogPoint(-139.833984375 , 16.97274101999902)
  , 10)

该语句的值为 true - 因此所有内容都将返回。

而是让 ST_GeogPoint(-139.833984375 , 16.97274101999902) 成为查询的 table 中的一列。

下面的表达式总是正确的,这就是为什么!

ST_DWithin(
  ST_GeogFromText('POLYGON(( -139.833984375 16.97274101999902, -138.33984375 15.029685756555674, -67.060546875 48.516604348867475,  -68.37890625 49.89463439573421, -139.833984375  16.97274101999902))'), 
  ST_GeogPoint(-139.833984375, 16.97274101999902), 
  10)    

原因是涉及的多边形中的第一个顶点与您使用的点相同

您还可以从下面的可视化中看到这一点