#cache #flat-file #osm #latitude-longitude #node #multi-threading #pair

osmnodecache

平面文件OSM节点缓存,将(纬度,经度)对作为索引条目存储

12个版本 (7个破坏性更新)

0.8.4 2023年10月3日
0.8.0 2023年3月23日
0.7.0 2022年2月10日
0.6.0 2021年12月17日
0.2.0 2021年11月28日

#92 in 地理空间

Download history 1/week @ 2024-03-08 1/week @ 2024-03-15 56/week @ 2024-03-29 18/week @ 2024-04-05

每月58次下载
osm2rdf中使用

MIT/Apache

27KB
600

osm-node-cache

GitHub crates.io version docs.rs docs crates.io version CI build

平面文件节点缓存将纬度、经度坐标对作为u64值存储,其索引为文件中的位置。换句话说 - 第0个u64值存储为前8个字节,等等。

该库允许多线程访问缓存,并且可以动态增长缓存文件。

// 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());
        }
      };
    });
}

开发

  • 此项目可以使用just(make的现代化替代品)更轻松地开发。使用cargo install just安装它。
  • 要获取可用命令的列表,请运行just
  • 要运行测试,请使用just test
  • git push时,它将运行一些验证,包括cargo fmtcargo clippycargo test。使用git push --no-verify跳过这些检查。

许可协议

根据以下之一授权:

贡献

除非您明确声明,否则您根据Apache-2.0许可证定义的,有意提交以包含在作品中的任何贡献,均应双授权,不附加任何额外条款或条件。

依赖项

~1.9–8.5MB
~60K SLoC