pub struct OSMReader<T: Reader, _N: KVStore<u64, VectorPoint<MValue>> = KV<u64, VectorPoint<MValue>>, N: KVStore<u64, IntermediateNode> = KV<u64, IntermediateNode>, _W: KVStore<u64, WayNodes> = KV<u64, WayNodes>, W: KVStore<u64, IntermediateWay> = KV<u64, IntermediateWay>, R: KVStore<u64, IntermediateRelation> = KV<u64, IntermediateRelation>> { /* private fields */ }Expand description
§OSM Reader
§Description
Parses OSM PBF files
Implements the FeatureReader trait
§Usage
For Simplicity, you can use the OSMFileReader or OSMLocalReader wrappers.
The methods you have access to:
OSMReader::new: Create a new OSMReaderOSMReader::cleanup: Cleans up the reader’s temp dataOSMReader::get_header: Get the OSM HeaderOSMReader::parse_blocks: Parse all blocks to prepare for readsOSMReader::next_block: Get the next block (if you want to iteratively use blocks yourself)OSMReader::par_parse_node_blocks: If you are only interested in nodes, parse all of them quicker using threadsOSMReader::parse_node_blocks: If you are only interested in nodes, parse all of them quickerOSMReader::iter: Create a new OSMReader Iterator
§Local Reader
All data is stored locally in memory and will be cleaned up on drop
use gistools::{parsers::{FileReader, FeatureReader}, readers::OSMLocalReader};
use std::path::PathBuf;
let mut path = PathBuf::from(env!("CARGO_MANIFEST_DIR"));
path.push("tests/readers/osm/fixtures/test.pbf");
let path_str = path.to_str().unwrap();
let reader = FileReader::from(path_str);
let mut osm = OSMLocalReader::new(reader, None);
osm.parse_blocks();
let features: Vec<_> = osm.iter().collect();
assert_eq!(features.len(), 8);Implementations§
Source§impl<T: Reader, _N: KVStore<u64, VectorPoint<MValue>>, N: KVStore<u64, IntermediateNode>, _W: KVStore<u64, WayNodes>, W: KVStore<u64, IntermediateWay>, R: KVStore<u64, IntermediateRelation>> OSMReader<T, _N, N, _W, W, R>
impl<T: Reader, _N: KVStore<u64, VectorPoint<MValue>>, N: KVStore<u64, IntermediateNode>, _W: KVStore<u64, WayNodes>, W: KVStore<u64, IntermediateWay>, R: KVStore<u64, IntermediateRelation>> OSMReader<T, _N, N, _W, W, R>
Sourcepub fn new(reader: T, options: Option<OSMReaderOptions>) -> Self
pub fn new(reader: T, options: Option<OSMReaderOptions>) -> Self
Creates a new OSM Reader
Sourcepub fn cleanup(&mut self)
pub fn cleanup(&mut self)
Cleanup the data which will cleanup any temporary files if they exist
Sourcepub fn get_header(&mut self) -> OSMHeader
pub fn get_header(&mut self) -> OSMHeader
returns - The header of the OSM file
Sourcepub fn parse_blocks(&mut self)
pub fn parse_blocks(&mut self)
Parse all blocks, storing all nodes, ways, and relations into local stores for future consumption
Sourcepub fn next_block(data: Vec<u8>) -> PrimitiveBlock
pub fn next_block(data: Vec<u8>) -> PrimitiveBlock
Read the input blob and parse the block of data
Sourcepub fn par_parse_node_blocks(
&mut self,
pool_size: usize,
thread_id: usize,
cb: &mut dyn FnMut(VectorFeature<OSMMetadata, Properties, MValue>),
)
pub fn par_parse_node_blocks( &mut self, pool_size: usize, thread_id: usize, cb: &mut dyn FnMut(VectorFeature<OSMMetadata, Properties, MValue>), )
Parse only nodes using threads. Assumed this reader has already been cloned and passed to a thread.
Sourcepub fn parse_node_blocks(
&mut self,
cb: &mut dyn FnMut(VectorFeature<OSMMetadata, Properties, MValue>),
)
pub fn parse_node_blocks( &mut self, cb: &mut dyn FnMut(VectorFeature<OSMMetadata, Properties, MValue>), )
If you are only interested in the nodes, run this function instead as it doesn’t need Prep data in memory
Trait Implementations§
Source§impl<T: Clone + Reader, _N: Clone + KVStore<u64, VectorPoint<MValue>>, N: Clone + KVStore<u64, IntermediateNode>, _W: Clone + KVStore<u64, WayNodes>, W: Clone + KVStore<u64, IntermediateWay>, R: Clone + KVStore<u64, IntermediateRelation>> Clone for OSMReader<T, _N, N, _W, W, R>
impl<T: Clone + Reader, _N: Clone + KVStore<u64, VectorPoint<MValue>>, N: Clone + KVStore<u64, IntermediateNode>, _W: Clone + KVStore<u64, WayNodes>, W: Clone + KVStore<u64, IntermediateWay>, R: Clone + KVStore<u64, IntermediateRelation>> Clone for OSMReader<T, _N, N, _W, W, R>
Source§impl<T: Debug + Reader, _N: Debug + KVStore<u64, VectorPoint<MValue>>, N: Debug + KVStore<u64, IntermediateNode>, _W: Debug + KVStore<u64, WayNodes>, W: Debug + KVStore<u64, IntermediateWay>, R: Debug + KVStore<u64, IntermediateRelation>> Debug for OSMReader<T, _N, N, _W, W, R>
impl<T: Debug + Reader, _N: Debug + KVStore<u64, VectorPoint<MValue>>, N: Debug + KVStore<u64, IntermediateNode>, _W: Debug + KVStore<u64, WayNodes>, W: Debug + KVStore<u64, IntermediateWay>, R: Debug + KVStore<u64, IntermediateRelation>> Debug for OSMReader<T, _N, N, _W, W, R>
Source§impl<T: Reader, _N: KVStore<u64, VectorPoint<MValue>>, N: KVStore<u64, IntermediateNode>, _W: KVStore<u64, WayNodes>, W: KVStore<u64, IntermediateWay>, R: KVStore<u64, IntermediateRelation>> FeatureReader<OSMMetadata, Map<String, ValueType>, Map<String, ValueType>> for OSMReader<T, _N, N, _W, W, R>
impl<T: Reader, _N: KVStore<u64, VectorPoint<MValue>>, N: KVStore<u64, IntermediateNode>, _W: KVStore<u64, WayNodes>, W: KVStore<u64, IntermediateWay>, R: KVStore<u64, IntermediateRelation>> FeatureReader<OSMMetadata, Map<String, ValueType>, Map<String, ValueType>> for OSMReader<T, _N, N, _W, W, R>
Source§type FeatureIterator<'a> = OsmReaderIter<'a, T, _N, N, _W, W, R>
where
T: 'a,
_N: 'a,
N: 'a,
_W: 'a,
W: 'a,
R: 'a
type FeatureIterator<'a> = OsmReaderIter<'a, T, _N, N, _W, W, R> where T: 'a, _N: 'a, N: 'a, _W: 'a, W: 'a, R: 'a
The Feature Reader should implement an iterator of some kind
Source§fn iter(&self) -> Self::FeatureIterator<'_>
fn iter(&self) -> Self::FeatureIterator<'_>
All readers have an iter function that returns a Iterator struct
Auto Trait Implementations§
impl<T, _N, N, _W, W, R> Freeze for OSMReader<T, _N, N, _W, W, R>
impl<T, _N, N, _W, W, R> RefUnwindSafe for OSMReader<T, _N, N, _W, W, R>where
T: RefUnwindSafe,
_N: RefUnwindSafe,
N: RefUnwindSafe,
_W: RefUnwindSafe,
W: RefUnwindSafe,
R: RefUnwindSafe,
impl<T, _N, N, _W, W, R> Send for OSMReader<T, _N, N, _W, W, R>
impl<T, _N, N, _W, W, R> Sync for OSMReader<T, _N, N, _W, W, R>
impl<T, _N, N, _W, W, R> Unpin for OSMReader<T, _N, N, _W, W, R>
impl<T, _N, N, _W, W, R> UnwindSafe for OSMReader<T, _N, N, _W, W, R>
Blanket Implementations§
§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Mutably borrows from an owned value. Read more
§impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
§unsafe fn clone_to_uninit(&self, dest: *mut u8)
unsafe fn clone_to_uninit(&self, dest: *mut u8)
🔬This is a nightly-only experimental API. (
clone_to_uninit)Source§impl<T> IntoEither for T
impl<T> IntoEither for T
Source§fn into_either(self, into_left: bool) -> Either<Self, Self>
fn into_either(self, into_left: bool) -> Either<Self, Self>
Converts
self into a Left variant of Either<Self, Self>
if into_left is true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read moreSource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
Converts
self into a Left variant of Either<Self, Self>
if into_left(&self) returns true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read more