BigQuery 中的纬度和经度,如何找到国家、大陆、城市和郊区?

问题描述 投票:0回答:1

我在 BigQuery 中有一张表,其中包含世界各地的特定纬度/经度位置。我希望能够加入一张桌子并获得该地理点的大陆、国家、城市和郊区。

我该怎么做?

sql google-bigquery location geospatial latitude-longitude
1个回答
0
投票

你需要一些包含国家数据的表格,将国家、城市等描述为多边形。请注意,根据您的需要,这可能会很复杂 - 不同的司法管辖区可能对国家边界有不同的看法。

一旦你有了这些——你可以使用

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
© www.soinside.com 2019 - 2024. All rights reserved.