我在 BigQuery 中有一张表,其中包含世界各地的特定纬度/经度位置。我希望能够加入一张桌子并获得该地理点的大陆、国家、城市和郊区。
我该怎么做?
你需要一些包含国家数据的表格,将国家、城市等描述为多边形。请注意,根据您的需要,这可能会很复杂 - 不同的司法管辖区可能对国家边界有不同的看法。
一旦你有了这些——你可以使用
ST_Intesects
条件加入你的数据,比如 ST_Intersects(reference_geography, ST_GeogPoint(lon, lat))
(注意 lon:lat 坐标顺序,而不是 lat:lot 在其他情况下经常使用)。
您可能会使用的一个此类数据集是 BigQuery 公共数据集中的 Open Street Maps 数据。下面是查询单点的方法:
CREATE TEMP FUNCTION tag_value(tags ARRAY<STRUCT<key STRING, value STRING>>, name STRING)
RETURNS STRING AS (
(SELECT value FROM UNNEST(tags) WHERE key = name)
);
SELECT
tag_value(all_tags, 'admin_level') as admin_level,
tag_value(all_tags, 'name') as name
FROM (
SELECT all_tags
FROM `bigquery-public-data.geo_openstreetmap.planet_features_multipolygons`
WHERE ST_Intersects(geometry, ST_GeogPoint(-122.193476, 47.696147))
AND tag_value(all_tags, 'admin_level') IS NOT NULL
)
ORDER BY admin_level;
结果:
Row admin_level name
1 2 United States
2 4 Washington
3 6 King County
4 8 Kirkland