如何将R中读取的shp格式sf对象导出为OSM PBF格式文件
SHP转OSM PBF格式实现方案
问题原因
你原有代码存在两处核心错误,导致无法正常导出:
st_write的dsn和layer参数配置颠倒,OSM驱动下dsn直接指定为目标.pbf文件路径即可,无需额外设置layer参数- OSM PBF格式有固定的标签体系,未将shp属性映射为OSM标准标签的情况下,GDAL驱动会报错无法识别字段
前置依赖验证
首先确认你的运行环境支持OSM写入驱动,运行以下代码验证:
library(sf) "OSM" %in% st_drivers()$name
返回TRUE即说明环境支持OSM PBF写入。
R内直接导出实现步骤
步骤1:属性字段映射(必填)
将你的shp属性字段映射为OSM标准标签,以行政边界为例的参考代码如下,可根据你的实际字段调整:
# 读取原始shp adminstrativeboundary2018 <- st_read("adminstrative_boun.shp") # 映射OSM标签 adminstrativeboundary2018 <- adminstrativeboundary2018 |> dplyr::mutate( boundary = "administrative", # 按需替换为你对应的行政级别数值,例如省级为4、市级为6 admin_level = "4", # 将你shp里的名称字段映射为OSM的name标签 name = 原shp中的名称字段名 ) |> # 仅保留OSM需要的标签字段和几何列,删除多余字段 dplyr::select(name, boundary, admin_level, geometry)
步骤2:执行导出
调整st_write参数即可完成导出:
st_write( obj = adminstrativeboundary2018, dsn = "adminstrativeboundary2018.pbf", driver = "OSM", delete_dsn = TRUE )
备选方案
如果GDAL的OSM写入驱动出现兼容性问题,可以先从R导出为GeoJSON格式,再通过命令行工具转换为PBF:
- R内导出GeoJSON:
st_write(adminstrativeboundary2018, "admin_boundary.geojson", delete_dsn = TRUE)
- 运行命令行转换:
osmconvert admin_boundary.geojson --out-pbf -o=adminstrativeboundary2018.pbf
内容的提问来源于stack exchange,提问作者Xaviermoros
相关产品推荐
相关产品推荐

