Osmosis 解析

本文详细解读了Osmosis工具的主要功能,包括XML处理、区域过滤、变化集衍生与合并等任务。同时,文章探讨了如何通过任务分类实现任务编排,重点介绍了Pipeline设计模式,以及核心组件如TaskManager、Pipeline和Store的作用。此外,还分析了源码结构和任务间的连接方式。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Osmosis 工具代码解读

功能

先将 Osmosis 的主要功能列出如下,大体包括了 Osm 文件服务常用的功能。

XML Tasks

Area Filtering Tasks

Changeset Derivation and Merging 提供 osc 和 osm 的分离合并

Pipeline Control 控制Pipeline 的结构,不操作数据

Set Manipulation Tasks

Data Manipulation Tasks

例子

下面通过两个例子演示 Osmosis 工具的基本使用方法。

osmosis \
  --read-xml input.osm \
  --tf accept-ways highway=* \ 
  --tf reject-ways highway=motorway,motorway_link \
  --tf reject-relations \
  --used-node \
  --write-xml output.osm
  • 只保留有 highway 标签的所有 way
  • 保留下的 way 中,剔除掉 highway 标签值为 motorway, motorway_link 的way
  • 删除所有 Relation
  • 只保留被用到的 nodes
  • 写出
osmosis 
--rx /Users/cs
### Java OpenStreetMap 解析库 对于处理和解析 OpenStreetMap 数据,在 Java 生态系统中有多个可用的库可以满足需求。 #### osmosis osmosis 是一个功能强大的命令行应用程序以及一组可重用的 Java 类,旨在转换和操作 OSM 数据[^1]。它支持读取、写入、过滤和其他多种操作来处理 OSM 文件。虽然主要用于批处理任务,但是其内部类也可以被集成到其他项目中作为解析器使用。 #### JOSM (Java OpenStreetMap Editor) JOSM 提供了一套完整的 API 来访问地图数据结构并执行各种编辑操作。尽管主要是为了开发桌面版的地图编辑器而设计,不过其中许多组件可以直接应用于服务器端应用当中完成数据加载与保存等功能。 #### libOsmosis libOsmosis 是从 osmosis 中提取出来的核心库,允许开发者更方便地利用 OSM 数据流进行自定义的应用程序构建工作。这个库简化了很多复杂流程,并提供了更好的灵活性给使用者去实现特定业务逻辑。 ```java // 使用 libOsmosis 进行简单的节点读取示例 import org.openstreetmap.osmosis.core.Osmosis; import org.openstreetmap.osmosis.core.container.v0_6.EntityContainer; import org.openstreetmap.osmosis.core.domain.v0_6.Node; public class SimpleNodeReader { public static void main(String[] args) throws Exception { // 创建一个新的管道配置实例 PipelineConfiguration pipelineConfig = new DefaultPipelineConfiguration(); // 添加输入源(例如 PBF 或 XML) FileInputSource fileInputSource = new FileInputSource(new File("input-file.pbf")); // 设置实体处理器以接收每个节点事件 EntityProcessor entityProcessor = new EntityProcessor() { @Override public void process(EntityContainer container) { if (container.getEntity() instanceof Node node) { System.out.println("Found node with id=" + node.getId()); } } @Override public CompleteCallback complete() {return null;} @Override public FlushCallback flush() {return null;} }; // 构建并运行整个流水线 Osmosis.run(pipelineConfig, Arrays.asList(fileInputSource), Collections.singletonList(entityProcessor)); } } ``` 除了上述提到的选择之外还有像 `imposm-parser` 和 `openstreetmap-flit` 等开源项目也能够很好地胜任这项任务[^3]。这些工具各有特点,可以根据具体应用场景和个人偏好做出合适的选择。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值