如何通过PSMA Location ID(ref:psma:loc_pid)获取郊区名与邮政编码
通过PSMA Location ID查询OSM获取郊区名称和邮编
单个ID查询方法
使用Overpass API(OSM专用查询接口)是最直接的解决方案,以下是具体逻辑和示例:
基础查询语句(Overpass QL)
[out:json][timeout:25]; // 定位带有目标PSMA Location ID的OSM元素 nwr["ref:psma:loc_pid"="YOUR_LOC_PID"]; // 递归获取元素关联的周边行政区域信息 out body; >; out skel qt;
精准提取目标标签
如果只想获取郊区名称和邮政编码,可以优化查询,直接过滤所需内容:
[out:json][timeout:25]; nwr["ref:psma:loc_pid"="YOUR_LOC_PID"]->.target; // 获取所属郊区(place=suburb类型的区域) area["place"="suburb"](around.target:100); out tags; // 获取所属邮政编码区域 area["addr:postcode"](around.target:100); out tags;
替换YOUR_LOC_PID为实际的PSMA Location ID即可,可通过Overpass公共端点执行查询,或用可视化工具测试语句逻辑。
批量查询方法
Overpass支持一次性匹配多个PSMA Location ID,适配批量处理场景:
批量查询示例
[out:json][timeout:60]; // 匹配多个ID(用竖线分隔) nwr["ref:psma:loc_pid"~"^(LOC_PID_1|LOC_PID_2|LOC_PID_3)$"]->.targets; // 遍历每个目标元素,提取对应区域信息 foreach.targets->.elem( area["place"="suburb"](around.elem:100); out tags; area["addr:postcode"](around.elem:100); out tags; );
批量查询注意事项
- 调整
timeout参数(比如设为60),避免因查询量过大超时。 - 一次匹配的ID数量建议不超过50个,防止触发接口限流,可分批次提交查询。
- 部分ID可能在OSM中无对应数据,需做好空值处理。
关键标签说明
- 郊区名称:对应OSM中
place=suburb类型元素的name标签。 - 邮政编码:通常对应
addr:postcode或postal_code标签,不同区域的标签命名可能有差异。
内容的提问来源于stack exchange,提问作者Wesley Jeftha
相关产品推荐
相关产品推荐

