如何在BigQuery中判断坐标点是否属于指定国家及函数问题排查
BigQuery 判断坐标是否属于国家范围的问题解决方法
你的核心问题是用单个点来代表秘鲁的地理范围,这完全不符合实际——秘鲁是一个多边形区域,不是单个坐标点。所以你用ST_COVERS、ST_WITHIN这类空间函数判断两个独立点的关系,自然得不到正确结果。
正确的解决步骤:
获取国家的完整边界多边形
不要用单点表示国家,必须使用覆盖整个国家范围的多边形地理对象。BigQuery有公开的地理数据集可以直接用,比如bigquery-public-data.geo_boundaries.world_boundaries,里面包含了各国的边界多边形数据。使用
ST_WITHIN函数判断点与多边形的包含关系
将城市坐标转为GEOGPOINT,再和国家的多边形边界做空间判断,就能准确得出城市是否属于该国家。
示例代码:
-- 先获取秘鲁的边界多边形 WITH country_boundary AS ( SELECT name, country_geography FROM `bigquery-public-data.geo_boundaries.world_boundaries` WHERE name = 'Peru' ), -- 定义城市A的坐标 city_point AS ( SELECT ST_GEOGPOINT(-79.036889, -8.123089) AS city_geography ) -- 判断城市是否在秘鲁境内 SELECT ST_WITHIN(c.city_geography, cb.country_geography) AS is_in_peru FROM city_point c, country_boundary cb
如果是你自己维护国家坐标表,务必确保表中存储的是国家的多边形地理对象,而不是单点坐标,这样空间函数才能正常工作。
内容的提问来源于stack exchange,提问作者Gidi9
相关产品推荐
相关产品推荐

