使用Overpass-Turbo查询OSM城市地址门牌号结果不全,如何解决?
解决Overpass-Turbo查询OSM门牌号不全的问题
可能的原因及对应解决方案
1. 输出语句限制了数据返回
原查询中的out skel qt;仅返回元素的骨架结构(不含完整标签或关联子元素),导致部分数据未被展示。
改进方式:将输出语句替换为递归获取完整元素数据的写法,确保关联的子节点、关系成员都被返回:
[out:json][timeout:600]; area(3600040767)->.searchArea; ( node["addr:housenumber"](area.searchArea); way["addr:housenumber"](area.searchArea); relation["addr:housenumber"](area.searchArea); ); // 输出主元素的完整信息 out body; // 递归获取所有关联的子元素(如道路的节点、关系的成员) >; // 输出子元素的完整信息 out body qt;
2. 查询区域范围不准确
确认area(3600040767)是否完全覆盖你目标的城市区域——若区域范围偏小,自然会漏掉部分地址。
验证方法:找一个你确定存在的门牌号节点,用以下查询确认它所属的area:
[out:json]; // 替换为已知门牌号的经纬度坐标 node(12.3456,78.9012); is_in; out;
将返回的area ID替换到你的主查询中,确保区域匹配。
3. 地址标签的存储方式不同
部分门牌号可能和其他地址标签(如addr:street)组合存储在同一元素上,若仍有遗漏,可以尝试扩展查询,包含所有带地址组件的元素:
[out:json][timeout:600]; area(3600040767)->.searchArea; ( // 抓取所有包含任意addr前缀标签的元素 node["addr:"](area.searchArea); way["addr:"](area.searchArea); relation["addr:"](area.searchArea); ); out body; >; out body qt;
4. 超时时间不足
虽然原查询设了300秒,但如果目标城市数据量极大,可能需要更长的超时时间,避免查询提前终止。建议调整为[timeout:600];(10分钟)。
内容的提问来源于stack exchange,提问作者Luca
相关产品推荐
相关产品推荐

