Linux【OSMCTools 02】OpenStreetMap数据处理工具OSMCTools使用osmconvert命令截取省市级pbf文件(行政区划边界数据+SQL+Shell脚本)

2024-04-10 1654阅读

温馨提示:这篇文章已超过368天没有更新,请注意相关的内容是否还可用!

链接: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插件)获取到如下记录:

          Linux【OSMCTools 02】OpenStreetMap数据处理工具OSMCTools使用osmconvert命令截取省市级pbf文件(行政区划边界数据+SQL+Shell脚本)

          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的执行结果如下(仅河南省的数据):

            Linux【OSMCTools 02】OpenStreetMap数据处理工具OSMCTools使用osmconvert命令截取省市级pbf文件(行政区划边界数据+SQL+Shell脚本)

            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
            

            脚本执行结果:

            Linux【OSMCTools 02】OpenStreetMap数据处理工具OSMCTools使用osmconvert命令截取省市级pbf文件(行政区划边界数据+SQL+Shell脚本)

            可有看出,裁切后的市级数据变得很小了。

            3.验证

            将河南的行政区划和南阳市的裁切结果放到工具里查看,结果可用:

            Linux【OSMCTools 02】OpenStreetMap数据处理工具OSMCTools使用osmconvert命令截取省市级pbf文件(行政区划边界数据+SQL+Shell脚本)

            由于进行了一定的范围扩大,会多覆盖一些区域,这个可以根据需要进行调整。

            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
            
VPS购买请点击我

免责声明:我们致力于保护作者版权,注重分享,被刊用文章因无法核实真实出处,未能及时与作者取得联系,或有版权异议的,请联系管理员,我们会立即处理! 部分文章是来自自研大数据AI进行生成,内容摘自(百度百科,百度知道,头条百科,中国民法典,刑法,牛津词典,新华词典,汉语词典,国家院校,科普平台)等数据,内容仅供学习参考,不准确地方联系删除处理! 图片声明:本站部分配图来自人工智能系统AI生成,觅知网授权图片,PxHere摄影无版权图库和百度,360,搜狗等多加搜索引擎自动关键词搜索配图,如有侵权的图片,请第一时间联系我们,邮箱:ciyunidc@ciyunshuju.com。本站只作为美观性配图使用,无任何非法侵犯第三方意图,一切解释权归图片著作权方,本站不承担任何责任。如有恶意碰瓷者,必当奉陪到底严惩不贷!

目录[+]