Crates.io | osmnodecache |
lib.rs | osmnodecache |
version | 0.8.4 |
source | src |
created_at | 2021-11-24 23:22:54.044508 |
updated_at | 2023-10-03 15:47:56.444675 |
description | Flat file OSM node cache to store (latitude,longitude) pairs as indexed entries |
homepage | |
repository | https://github.com/nyurik/osm-node-cache |
max_upload_size | |
id | 487345 |
size | 41,122 |
Flat file node cache stores lat,lon coordinate pairs as u64
values with their index being the position in the file. In
other words - 0th u64 value is stored as the first 8 bytes, etc.
The library allows multithreaded access to the cache, and can dynamically grow the cache file.
// This example uses osmpbf crate
use std::path::PathBuf;
use rayon::iter::{ParallelBridge, ParallelIterator};
use osmnodecache::{DenseFileCache, CacheStore as _};
use osmpbf::{BlobReader, BlobDecode};
fn main() {
let reader = BlobReader::from_path("planet.osm.pbf").unwrap();
let file_cache = DenseFileCache::new(PathBuf::from("node.cache")).unwrap();
reader.par_bridge().for_each_with(
file_cache,
|fc, blob| {
let mut cache = fc.get_accessor();
if let BlobDecode::OsmData(block) = blob.unwrap().decode().unwrap() {
for node in block.groups().flat_map(|g| g.dense_nodes()) {
cache.set_lat_lon(node.id as usize, node.lat(), node.lon());
}
};
});
}
make
. Install it with cargo install just
.just
.just test
.git push
, it will run a few validations, including cargo fmt
, cargo clippy
, and cargo test
. Use git push --no-verify
to skip these checks.Licensed under either of
Unless you explicitly state otherwise, any contribution intentionally submitted for inclusion in the work by you, as defined in the Apache-2.0 license, shall be dual licensed as above, without any additional terms or conditions.