OpenStreetMap技术问题:从选定国家导出城市坐标及行政边界列表
从OpenStreetMap导出指定国家的城市列表与行政边界
方法一:用Overpass Turbo网页工具(适合非技术用户)
这是最直观的在线工具,无需本地安装软件,直接完成查询与导出。
导出带坐标的城市列表
- 打开Overpass Turbo界面,顶部搜索框输入目标国家名称(比如“中国”),定位到目标区域。
- 在代码编辑框输入查询语句,以下是中国地区的示例(可根据目标国家调整参数):
[out:json][timeout:25]; // 匹配目标国家的国家级行政区域(admin_level=2代表国家级) area["name:zh"="中国"][admin_level=2]; // 筛选标记为“城市”的节点,包含坐标与名称信息 node["place"="city"](area); // 输出核心字段 out body; >; out skel qt;
- 点击顶部「运行」按钮,查询完成后点击「导出」,选择CSV(适配表格工具)或GeoJSON(适配GIS软件)格式保存即可。
导出各级行政边界
行政边界在OSM中以relation对象存储,不同层级对应不同的admin_level标签(不同国家层级定义有差异,比如中国区县对应admin_level=8,欧洲部分国家区县对应admin_level=6,需提前确认目标国家的标签规范)。
中国区县边界的查询示例:
[out:json][timeout:25]; area["name:zh"="中国"][admin_level=2]; // 筛选指定层级的行政边界关系 relation["admin_level"="8"]["boundary"="administrative"](area); // 输出边界信息与名称 out body; >; out skel qt;
运行后导出为GeoJSON或其他支持边界的格式即可。
方法二:预提取OSM文件+osmium-tool命令行工具(适合批量处理)
如果需要处理大规模数据,建议用本地命令行工具,步骤如下:
- 获取目标国家的OSM预提取文件(PBF格式,体积小、处理效率高)。
- 安装osmium-tool工具。
- 导出城市列表为CSV:
# 过滤出所有标记为city的节点 osmium tags-filter country.osm.pbf n/place=city -o cities.osm.pbf # 导出包含坐标、名称的CSV文件 osmium export cities.osm.pbf --output-format csv --columns id,lat,lon,name,place -o cities.csv
- 导出行政边界为GeoJSON:
# 过滤出指定层级的行政边界关系(以admin_level=8为例) osmium tags-filter country.osm.pbf r/boundary=administrative,r/admin_level=8 -o admin_boundaries.osm.pbf # 导出为GeoJSON格式 osmium export admin_boundaries.osm.pbf --output-format geojson -o admin_boundaries.geojson
注意事项
- 不同国家的
admin_level标签定义差异较大,比如美国的州对应admin_level=2,县对应admin_level=5,建议先查阅目标国家的OSM社区文档确认层级。 place标签除了city,还有town、village等取值,可根据需求调整过滤条件。- Overpass Turbo的超时时间可根据数据量调整,比如把
timeout:25改为timeout:60避免查询中断。
内容的提问来源于stack exchange,提问作者robokonk
相关产品推荐
相关产品推荐

