Overpass-turbo:如何为指定ID的drinking_water节点获取所在城市名称
需求实现:通过OSM节点ID获取对应城市名称
当前使用的查询代码
你当前用于请求drinking_water类型节点的OverpassQL代码如下:
node(id:1560728638, 1560728638, 1835271176, 1844271135 ); out body;
需求说明
希望在获取指定节点数据的同时,同步获取每个节点所属的城市名称,输出格式示例如下:
| osm_id | city |
|---|---|
| 1560728638 | city A |
| 1560728638 | city A |
| 1835271176 | city B |
| 1844271135 | city C |
结论:可以实现
要达成这个需求,需要在OverpassQL中通过反向区域查询,找到包含目标节点的城市边界(通常标记为place=city或place=town的区域要素),并将节点ID与城市名称关联输出。
修改后的查询代码
[out:csv("id", "name"; false)]; node(id:1560728638,1560728638,1835271176,1844271135); foreach->.n( is_in["place"~"city|town"]; out body; );
代码说明
[out:csv("id", "name"; false)]:指定输出为CSV格式,直接对应你需要的osm_id和city列,可直接转换为表格形式node(id:...);:指定要查询的目标节点ID列表foreach->.n:遍历每个节点,为单个节点执行后续的区域查询is_in["place"~"city|town"]:查找包含当前节点的城市/城镇区域,提取其名称字段
如果需要更精准的城市匹配,可以调整过滤条件,比如仅筛选place=city,或者添加admin_level=8这类行政层级的限制,适配不同地区的OSM数据标注规则。
内容的提问来源于stack exchange,提问作者velocam
相关产品推荐
相关产品推荐

