Linux【OSMCTools 02】OpenStreetMap数据处理工具OSMCTools使用osmconvert命令截取省市级pbf文件(行政区划边界数据+SQL+Shell脚本)
链接:https://pan.baidu.com/s/1qPSQ_JdqVOsXa6yLF3abfg?pwd=1eg1
提取码:1eg1
链接包含数据:
- 全国行政区划数据.sql
- 拼接裁切脚本.sql
- get.sh
osmconvert命令截取省市级pbf文件
- 1.说明
- 2.步骤
- 2.1 基础数据
- 2.2 使用SQL获取命令
- 2.3 脚本
- 3.验证
- 4.其他
1.说明
- OpenStreetMap的下载地址(下载文件china-latest.osm.pbf):Geofabrik Download Server
- OSMCTools的GitHub地址:https://github.com/ramunasd/osmctools
osmconvert是一个用于处理OSM(OpenStreetMap)地图数据的命令行工具。它可以将OSM地图文件从一种格式转换成另一种格式,比如OSM XML文件转换成PBF(Protocolbuffer Binary Format)、CSV(Comma Separated Values)、Shapefile等格式,并且可以对地图数据进行筛选、剪切、合并等操作。osmconvert是开源软件,支持Linux、macOS和Windows平台。
本文主要是将较大的china-latest.osm.pbf(980M-20230522)通过osmconvert裁切为较小的以省或市为单位的数据。
2.步骤
2.1 基础数据
基础的行政区划数据来源自网络,通过QGIS导出,执行全国行政区划数据.sql将数据导入数据库(PostgreSQL数据已安装GIS插件)获取到如下记录:
2.2 使用SQL获取命令
使用如下SQL获取市级行政区划的边界,SQL进行了以下操作:
- 获取做小经纬度和最大经纬度(方形区域)
- 进行0.01的偏移,并保留9位小数(可根据需要的精度进行调整)
- 拼接工具的裁切命令(命令如何使用可参考上篇博文)
SELECT 'osmconvert china-latest.osm.pbf -b=' || min_lon || ',' || min_lat || ',' || max_lon || ',' || max_lat || ' --hash-memory="2048M" --complete-ways --out-pbf -o=' || prov || '-' || city || '.osm.pbf' AS command FROM ( SELECT "省" AS prov, "市" AS city, CAST ( ST_XMin ( ST_Extent ( wkb_geometry ) ) - 0.01 AS NUMERIC ( 13, 9 ) ) AS min_lon, CAST ( ST_YMin ( ST_Extent ( wkb_geometry ) ) - 0.01 AS NUMERIC ( 13, 9 ) ) AS min_lat, CAST ( ST_XMax ( ST_Extent ( wkb_geometry ) ) + 0.01 AS NUMERIC ( 13, 9 ) ) AS max_lon, CAST ( ST_YMax ( ST_Extent ( wkb_geometry ) ) + 0.01 AS NUMERIC ( 13, 9 ) ) AS max_lat FROM "行政区划" GROUP BY "省", "市" ORDER BY "省", "市" ) T
SQL的执行结果如下(仅河南省的数据):
2.3 脚本
shell脚本一定要注意文件的编码格式为UNIX而不是Dos\Windows它们的换行符是不同的:
#!/bin/bash echo "开始裁切...河南省-三门峡市" osmconvert china-latest.osm.pbf -b=110.345025689,33.541992497,112.036125086,35.094135922 --hash-memory="2048M" --complete-ways --out-pbf -o=河南省-三门峡市.osm.pbf echo "开始裁切...河南省-信阳市" osmconvert china-latest.osm.pbf -b=113.694307643,31.374368780,115.948258346,32.672150593 --hash-memory="2048M" --complete-ways --out-pbf -o=河南省-信阳市.osm.pbf
脚本执行结果:
可有看出,裁切后的市级数据变得很小了。
3.验证
将河南的行政区划和南阳市的裁切结果放到工具里查看,结果可用:
由于进行了一定的范围扩大,会多覆盖一些区域,这个可以根据需要进行调整。
4.其他
省级的SQL为:
SELECT 'osmconvert china-latest.osm.pbf -b=' || min_lon || ',' || min_lat || ',' || max_lon || ',' || max_lat || ' --hash-memory="2048M" --complete-ways --out-pbf -o=' || prov || '.osm.pbf' AS command FROM ( SELECT "省" AS prov, CAST ( ST_XMin ( ST_Extent ( wkb_geometry ) ) - 0.01 AS NUMERIC ( 13, 9 ) ) AS min_lon, CAST ( ST_YMin ( ST_Extent ( wkb_geometry ) ) - 0.01 AS NUMERIC ( 13, 9 ) ) AS min_lat, CAST ( ST_XMax ( ST_Extent ( wkb_geometry ) ) + 0.01 AS NUMERIC ( 13, 9 ) ) AS max_lon, CAST ( ST_YMax ( ST_Extent ( wkb_geometry ) ) + 0.01 AS NUMERIC ( 13, 9 ) ) AS max_lat FROM "行政区划" GROUP BY "省" ORDER BY "省" ) T
文章版权声明:除非注明,否则均为主机测评原创文章,转载或复制请以超链接形式并注明出处。