在 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)
原因是涉及的多边形中的第一个顶点与您使用的点相同
您还可以从下面的可视化中看到这一点
我正在尝试使用#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)
原因是涉及的多边形中的第一个顶点与您使用的点相同
您还可以从下面的可视化中看到这一点