微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

如何解决如何获取包含在另一个多边形中的多边形,包括那些接触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

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。