如何获取包含在另一个多边形中的多边形,包括那些接触BigQuery Standard SQL中的边界的多边形?

问题描述

我正在尝试获取BigQuery中指定市场区域内的块组。我尝试使用st_containsst_covers,但我仍然只得到完全包含的那些(而不是边界的那些:

SELECT a.blockgroup_geom as the_geom,a.geo_id,c.total_pop 

FROM `bigquery-public-data.geo_census_blockgroups.us_blockgroups_national` a

join `bigquery-public-data.census_bureau_acs.blockgroup_2018_5yr` c
 
on a.geo_id = c.geo_id

join `bigquery-public-data.geo_us_boundaries.designated_market_area` b
on st_covers(b.dma_geom,a.blockgroup_geom)
where b.dma_name = 'Milwaukee,WI'

enter image description here

获取dma多边形内的所有块组,我需要做什么?

解决方法

看起来这两个数据集未完全对齐,因此两个多边形之间的任何细微差异,或由于平面到球形转换而导致的错误,都会阻止多边形的完美嵌套。

这篇文章进行了更深入的讨论,并提出了解决方法:https://mentin.medium.com/creating-spatial-hierarchy-2ba5488eac0a

在这里,我将尝试ST_Intersects条件并检查相交区域,以查看块组的较大部分是否属于DMA:

SELECT a.blockgroup_geom as the_geom,a.geo_id,c.total_pop,(st_area(st_intersection(b.dma_geom,a.blockgroup_geom))
       > 0.75 * st_area(a.blockgroup_geom)) as mostly

FROM `bigquery-public-data.geo_census_blockgroups.us_blockgroups_national` a
join `bigquery-public-data.census_bureau_acs.blockgroup_2018_5yr` c
on a.geo_id = c.geo_id
join `bigquery-public-data.geo_us_boundaries.designated_market_area` b
on st_intersects(b.dma_geom,a.blockgroup_geom)
where b.dma_name = 'Milwaukee,WI'

这个结果有意义吗?我已经将大多数= true的绿色多边形上色,而大多数= false的蓝色多边形上了色: enter image description here