如何正确扩展OSM几何要素?自定义增量修改及冲突处理咨询
OSM私有自定义数据维护方案解答
场景通用性
你提到的需求属于非常通用的行业场景,业内通常称为OSM私有派生数据集维护,大量做本地出行服务、园区地图、城市专项治理的团队都有类似需求——需要基于OSM做业务自定义扩展,但自定义内容不符合官方OSM的入库规范、不需要回传,同时还要保持和官方OSM更新的同步,全量分叉修改OSM的方案早就被业内淘汰了。
增量(delta)方案可行性
完全可以通过定义针对原始OSM的增量包规避冲突,这也是目前业内的主流实现方案:
- 所有原始OSM数据保持原样,所有新增要素、对原有要素的修改都单独存储在增量层中,不要直接改动原始OSM的存储文件/数据库表
- 增量层的要素统一加自定义标签前缀,比如
custom:business=*,修改原有OSM要素的增量记录需要绑定对应原始要素的OSM ID和版本号 - 同步官方OSM更新时,只需要把增量层重新叠加到新下载的官方OSM数据集上即可,不需要重新处理全量自定义内容
工具链与合并操作说明
现有成熟的OSM生态工具已经可以覆盖全流程需求,不需要自己从零开发:
- 底层数据处理可以用
osmium-tool完成:用osmium diff生成增量包,osmium merge完成官方数据和增量包的无冲突合并,osmium check-refs检查合并后的要素关联是否正常 - 数据库存储场景可以用
osm2pgsql的flex输出模式,支持配置导入规则,导入官方OSM数据的同时自动叠加自定义增量层的内容到目标库 - 冲突处理规则:新增的私有要素(比如你提到的自定义人行道)只要用独立的自定义标签前缀,不会和官方数据产生冲突;修改官方原有要素的内容,同步时先比对官方要素的版本号,版本号无变动直接应用自定义修改,版本号有变动的标记为待人工核验即可,不需要全量重改
GUI编辑器支持情况
主流OSM编辑器都原生支持分层编辑的需求:
- 桌面端JOSM编辑器支持同时加载官方OSM层和私有增量层,编辑操作只在增量层执行,导出时可以单独导出增量更改集,不需要提交到官方OSM服务器
- 网页端iD编辑器可以通过自定义配置添加私有数据层,编辑后只同步到私有存储,不会把自定义内容上传到官方OSM
内容的提问来源于stack exchange,提问作者Chobeat
相关产品推荐
相关产品推荐

