Google bigquery 如何在BigQuery中从Openstreet地图数据集中提取所有国家的几何图形

Google bigquery 如何在BigQuery中从Openstreet地图数据集中提取所有国家的几何图形,google-bigquery,gis,openstreetmap,Google Bigquery,Gis,Openstreetmap,我使用这个查询来提取使用OSM的所有国家的几何图形,它工作正常,但我确信,它正在创建一个副本,因为我使用国旗作为参考,一些地方有国旗,但它们不是真正的国家 SELECT feature_type, osm_id, osm_timestamp, geometry,ar.key,ar.value, FROM `bigquery-public-data.geo_openstreetmap.planet_features`,UNNEST(all_tags) ar where ('boundar

我使用这个查询来提取使用OSM的所有国家的几何图形,它工作正常,但我确信,它正在创建一个副本,因为我使用国旗作为参考,一些地方有国旗,但它们不是真正的国家

SELECT feature_type, osm_id, osm_timestamp, geometry,ar.key,ar.value,
  FROM `bigquery-public-data.geo_openstreetmap.planet_features`,UNNEST(all_tags) ar
   where ('boundary', 'administrative') IN (SELECT (key, value) FROM UNNEST(all_tags))
   and(feature_type="polygon" or feature_type= "multipolygon")
   AND ('flag') IN (SELECT (key) FROM UNNEST(all_tags)) and ar.key="name" order by st_area(geometry) desc
抱歉,忘了说,有些标签丢失了,例如,如果您选择admin_level=2,则根据 管理员级别=2描述国家/地区

SELECT 
  feature_type, osm_id, osm_timestamp, geometry,
  (SELECT value FROM UNNEST(all_tags) WHERE key = 'flag') as flag,
  (SELECT value FROM UNNEST(all_tags) WHERE key = 'name') as name,
  st_area(geometry) as area
FROM `bigquery-public-data.geo_openstreetmap.planet_features`
WHERE 
  feature_type in ("polygon", "multipolygon")
  AND EXISTS (SELECT 1 FROM UNNEST(all_tags) WHERE key = 'boundary' AND value = 'administrative')
  AND EXISTS (SELECT 1 FROM UNNEST(all_tags) WHERE key = 'flag') 
  AND EXISTS (SELECT 1 FROM UNNEST(all_tags) WHERE key = 'admin_level' AND value = '2') 
ORDER BY area desc
因此,我整理了您的查询并添加了admin_level=2过滤器,以便它只包含国家/地区

SELECT 
  feature_type, osm_id, osm_timestamp, geometry,
  (SELECT value FROM UNNEST(all_tags) WHERE key = 'flag') as flag,
  (SELECT value FROM UNNEST(all_tags) WHERE key = 'name') as name,
  st_area(geometry) as area
FROM `bigquery-public-data.geo_openstreetmap.planet_features`
WHERE 
  feature_type in ("polygon", "multipolygon")
  AND EXISTS (SELECT 1 FROM UNNEST(all_tags) WHERE key = 'boundary' AND value = 'administrative')
  AND EXISTS (SELECT 1 FROM UNNEST(all_tags) WHERE key = 'flag') 
  AND EXISTS (SELECT 1 FROM UNNEST(all_tags) WHERE key = 'admin_level' AND value = '2') 
ORDER BY area desc
对于美国,我发现这个链接解释了美国的一切。。

你可以在这里看到美国的openstreetmap记录 在左侧,有所有的功能

此外,您可以通过以下方式在BigQuery中找到USA记录:

SELECT *
FROM `bigquery-public-data.geo_openstreetmap.planet_features`
where osm_id = '148838'
即使openstreetmap记录中有管理级别,但它在BigQuery记录中并不存在。我不知道为什么,它可能只是一个旧版本


因此,您可以使用上面的查询优化您的过滤器,以包括美国。

我们可以通过合并两个表来创建所有国家及其几何结构的列表:

选择features.feature\u type,features.osm\u id 大堆 从UNNESTfeatures.all_标记| | relations.all_标记中选择DISTINCT AS STRUCT* 在哪里输入'int_name','name' 按1限1订购 特征 ,圆形区域几何图形/1e6,1区域 从…起 `bigquery公共数据。geo_openstreetmap。planet_features`AS features, `bigquery公共数据。geo_openstreetmap。planet_relations`AS relations 其中,SELECT键中的“boundary”和“administrative”,值来自UNNESTfeatures.all_标记 和'admin_level',选择键中的'2',UNNESTrelations.all_标记中的值 特征类型='multipolygon' AND relations.id=SAFE\u CASTfeatures.osm\u id为INT64 按区域排序

事实上,这是我的问题,bigquery数据集中有一个bug,我知道美国是因为它有一个很大的区域,但是其他国家如何,我如何确保所有的国家都被计算出来?这一定是关于bigquery的。我不知道它多久更新一次,但最后一次更新日期是3月28日。您可能希望在BigQuery问题跟踪程序中创建问题。你可以在这里问:这里已经报告了一个问题,请检查我留下的答案-它通过连接修复了这个问题