#osm #openstreetmap #osm-pbf #serialization #flatdata

应用程序 osmflatc

将osm.pbf格式的OpenStreetMap(OSM)数据编译为osm.flatdata格式的编译器

1个不稳定版本

0.1.0 2020年10月18日

#1420编码

MIT/Apache

5MB
3K SLoC

osmflat

berlin-features

Flat OpenStreetMap (OSM)数据格式,通过内存映射文件提供高效的随机数据访问。

数据格式在flatdata中描述和实现。该模式描述了基本的OSM数据结构:节点、道路、关系和标记,作为简单的非嵌套数据结构。这些结构之间的关系通过索引表示。

编译器

除了用于处理osmflat存档的库之外,crate osmflatc 还包含一个将OSM pbf格式编译为osmflat数据的编译器。

要编译从pbf到osmflat的OSM数据,请使用

cargo run --release -- input.osm.pbf output.osm.flatdata

输出是一个flatdata,它是一个包含几个文件的目录。模式也是存档的一部分。每次打开存档时都会进行检查。这保证了用于生成存档的编译器符合用于读取它的模式。存档数据未经压缩。

使用数据

您可以使用任何支持flatdata的语言来读取osmflat存档。对于在Rust中读取数据,我们提供了osmflat crate。

首先,将以下内容添加到您的Cargo.toml中

[dependencies]
osmflat = "0.1.0"

现在,您可以将osmflat存档作为任何其他flatdata存档打开并读取其数据

use osmflat::{FileResourceStorage, Osm};

fn main() {
    let storage = FileResourceStorage::new("path/to/archive.osm.flatdata");
    let archive = Osm::open(storage).unwrap();

    for node in archive.nodes().iter() {
        println!("{:?}", node);
    }
}

示例

检查osmflat/examples目录。如果您有想法如何用几行代码处理这些令人惊叹的OSM数据,请随时添加其他示例。 😁

上面的地图是由osmflat/examples/roads2png.rs渲染的,它从基于最新的柏林OSM数据的osmflat存档中提取了约170行代码。

许可证

文件 src/proto/fileformat.protosrc/proto/osmformat.proto 是从 OSM-binary 项目复制的,并且受 LGPLv3 许可证约束。

贡献

除非您明确声明,否则您根据 Apache-2.0 许可证提交的任何有意包含在此文档中的贡献,应按上述方式双重许可,而不附加任何额外的条款或条件。

依赖项

~10–23MB
~268K SLoC