#openstreetmap #osm #random-access #memory-mapped #data-access #flatdata #serialization

osmflat

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

1 个不稳定版本

0.1.0 2020年10月18日

#728 in 编码

每月38次下载
osmflatc 中使用

MIT/Apache

5MB
2K SLoC

osmflat

berlin-features

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

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

编译器

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

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

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

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

使用数据

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

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

[dependencies]
osmflat = "0.1.0"

现在,您可以像打开其他 flatdata 存档一样打开 osmflat 存档并读取其数据

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 在 ~ 170 代码行中渲染的,基于最新的柏林 OSM 数据。

许可协议

文件src/proto/fileformat.protosrc/proto/osmformat.proto是从OSM-binary项目复制而来的,并且遵循LGPLv3许可证。

贡献

除非您明确说明,否则您根据Apache-2.0许可证定义,有意提交供包含在此文档中的任何贡献,应如上双授权,不附加任何额外条款或条件。

依赖项