Skip to main content

PMTiles

Struct PMTiles 

Source
pub struct PMTiles<R> {
Show 13 fields pub tile_type: TileType, pub tile_compression: Compression, pub internal_compression: Compression, pub min_zoom: u8, pub max_zoom: u8, pub center_zoom: u8, pub min_longitude: f64, pub min_latitude: f64, pub max_longitude: f64, pub max_latitude: f64, pub center_longitude: f64, pub center_latitude: f64, pub meta_data: Map<String, Value>, /* private fields */
}
Expand description

A structure representing a PMTiles archive.

Fields§

§tile_type: TileType

Type of tiles

§tile_compression: Compression

Compression of tiles

§internal_compression: Compression

Compression of directories and meta data

§min_zoom: u8

Minimum zoom of all tiles this archive

§max_zoom: u8

Maximum zoom of all tiles this archive

§center_zoom: u8

Center zoom

Implementations may use this to set the default zoom

§min_longitude: f64

Minimum longitude of bounds of available tiles

§min_latitude: f64

Minimum latitude of bounds of available tiles

§max_longitude: f64

Maximum longitude of bounds of available tiles

§max_latitude: f64

Maximum latitude of bounds of available tiles

§center_longitude: f64

Center longitude

Implementations may use the center longitude and latitude to set the default location

§center_latitude: f64

Center latitude

Implementations may use the center longitude and latitude to set the default location

§meta_data: Map<String, Value>

JSON meta data of this archive

Implementations§

Source§

impl PMTiles<Cursor<&[u8]>>

Source

pub fn new(tile_type: TileType, tile_compression: Compression) -> Self

Constructs a new, empty PMTiles archive, with no meta data, an internal_compression of GZIP and all numeric fields set to 0.

§Arguments
  • tile_type - Type of tiles in this archive
  • tile_compression - Compression of tiles in this archive
Source§

impl PMTiles<Cursor<&[u8]>>

Source

pub fn new_async(tile_type: TileType, tile_compression: Compression) -> Self

Available on crate feature async only.

Async version of new.

Constructs a new, empty PMTiles archive, that works with asynchronous readers / writers.

§Arguments
  • tile_type - Type of tiles in this archive
  • tile_compression - Compression of tiles in this archive
Source§

impl<R> PMTiles<R>

Source

pub fn tile_ids(&self) -> Vec<&u64>

Get vector of all tile ids in this PMTiles archive.

Source

pub fn add_tile(&mut self, tile_id: u64, data: impl Into<Vec<u8>>) -> Result<()>

Adds a tile to this PMTiles archive.

Note that the data should already be compressed if Self::tile_compression is set to a value other than Compression::None. The data will NOT be compressed automatically.
The util-module includes utilities to compress data.

§Errors

Will return Err if data converts into an empty Vec.

Source

pub fn remove_tile(&mut self, tile_id: u64)

Removes a tile from this archive.

Source

pub fn num_tiles(&self) -> usize

Returns the number of addressed tiles in this archive.

Source§

impl<R: Read + Seek> PMTiles<R>

Source

pub fn get_tile_by_id(&mut self, tile_id: u64) -> Result<Option<Vec<u8>>>

Get data of a tile by its id.

The returned data is the raw data, meaning It is NOT uncompressed automatically, if it was compressed in the first place.
If you need the uncompressed data, take a look at the util-module

Will return Ok with an value of None if no a tile with the specified tile id was found.

§Errors

Will return Err if the tile data was not read into memory yet and there was an error while attempting to read it.

Source

pub fn get_tile(&mut self, x: u64, y: u64, z: u8) -> Result<Option<Vec<u8>>>

Returns the data of the tile with the specified coordinates.

See get_tile_by_id for further details on the return type.

§Errors

See get_tile_by_id for details on possible errors.

Source§

impl<R: AsyncRead + AsyncReadExt + Send + Unpin + AsyncSeekExt> PMTiles<R>

Source

pub async fn get_tile_by_id_async( &mut self, tile_id: u64, ) -> Result<Option<Vec<u8>>>

Available on crate feature async only.

Async version of get_tile_by_id.

Get data of a tile by its id.

The returned data is the raw data, meaning It is NOT uncompressed automatically, if it was compressed in the first place.
If you need the uncompressed data, take a look at the util-module

Will return Ok with an value of None if no a tile with the specified tile id was found.

§Errors

Will return Err if the tile data was not read into memory yet and there was an error while attempting to read it.

Source

pub async fn get_tile_async( &mut self, x: u64, y: u64, z: u8, ) -> Result<Option<Vec<u8>>>

Available on crate feature async only.

Async version of get_tile.

Returns the data of the tile with the specified coordinates.

See get_tile_by_id_async for further details on the return type.

§Errors

See get_tile_by_id_async for details on possible errors.

Source§

impl<R: Read + Seek> PMTiles<R>

Source

pub fn from_reader(input: R) -> Result<Self>

Reads a PMTiles archive from a reader.

This takes ownership of the reader, because tile data is only read when required.

§Arguments
  • input - Reader
§Errors

Will return Err if there was any kind of I/O error while reading from input, the data stream was no valid PMTiles archive or the internal compression of the archive is set to “Unknown”.

§Example
let mut file = std::fs::File::open(file_path).unwrap();

let pm_tiles = PMTiles::from_reader(file).unwrap();
Source

pub fn from_reader_partially( input: R, tiles_filter_range: impl RangeBounds<u64>, ) -> Result<Self>

Same as from_reader, but with an extra parameter.

Reads a PMTiles archive from a reader, but only parses tile entries whose tile IDs are included in the filter range. Tiles that are not included in the range will appear as missing.

This can improve performance in cases where only a limited range of tiles is needed, as whole leaf directories may be skipped during parsing.

§Arguments
  • input - Reader
  • tiles_filter_range - Range of Tile IDs to load
§Errors

See from_reader for details on possible errors.

§Example
let mut file = std::fs::File::open(file_path).unwrap();

let pm_tiles = PMTiles::from_reader_partially(file, ..).unwrap();
Source

pub fn to_writer(self, output: &mut (impl Write + Seek)) -> Result<()>

Writes the archive to a writer.

The archive is always deduped and the directory entries clustered to produce the smallest possible archive size.

This takes ownership of the object so all data does not need to be copied. This prevents large memory consumption when writing large PMTiles archives.

§Arguments
  • output - Writer to write data to
§Errors

Will return Err if Self::internal_compression was set to Compression::Unknown or an I/O error occurred while writing to output.

§Example

Write the archive to a file.

let pm_tiles = PMTiles::new(TileType::Png, Compression::None);
let mut file = std::fs::File::create(file_path).unwrap();
pm_tiles.to_writer(&mut file).unwrap();
Source§

impl<T: AsRef<[u8]>> PMTiles<Cursor<T>>

Source

pub fn from_bytes(bytes: T) -> Result<Self>

Reads a PMTiles archive from anything that can be turned into a byte slice (e.g. Vec<u8>).

§Arguments
  • bytes - Input bytes
§Errors

Will return Err if there was any kind of I/O error while reading from input, the data stream was no valid PMTiles archive or the internal compression of the archive is set to “Unknown”.

§Example
let bytes = include_bytes!("../test/stamen_toner(raster)CC-BY+ODbL_z3.pmtiles");
let pm_tiles = PMTiles::from_bytes(bytes).unwrap();
Source

pub fn from_bytes_partially( bytes: T, tiles_filter_range: impl RangeBounds<u64>, ) -> Result<Self>

Same as from_bytes, but with an extra parameter.

Reads a PMTiles archive from something that can be turned into a byte slice (e.g. Vec<u8>), but only parses tile entries whose tile IDs are included in the filter range. Tiles that are not included in the range will appear as missing.

This can improve performance in cases where only a limited range of tiles is needed, as whole leaf directories may be skipped during parsing.

§Arguments
  • bytes - Input bytes
  • tiles_filter_range - Range of Tile IDs to load
§Errors

See from_bytes for details on possible errors.

§Example
let bytes = include_bytes!("../test/stamen_toner(raster)CC-BY+ODbL_z3.pmtiles");
let pm_tiles = PMTiles::from_bytes_partially(bytes, ..).unwrap();
Source§

impl<R: AsyncRead + AsyncSeekExt + Send + Unpin> PMTiles<R>

Source

pub async fn from_async_reader(input: R) -> Result<Self>

Available on crate feature async only.

Async version of from_reader.

Reads a PMTiles archive from a reader.

This takes ownership of the reader, because tile data is only read when required.

§Arguments
  • input - Reader
§Errors

Will return Err if there was any kind of I/O error while reading from input, the data stream was no valid PMTiles archive or the internal compression of the archive is set to “Unknown”.

§Example
let bytes = include_bytes!("../test/stamen_toner(raster)CC-BY+ODbL_z3.pmtiles");
let mut reader = futures::io::Cursor::new(bytes);

let pm_tiles = PMTiles::from_async_reader(reader).await.unwrap();
Source

pub async fn from_async_reader_partially( input: R, tiles_filter_range: impl RangeBounds<u64> + Sync + Send, ) -> Result<Self>

Available on crate feature async only.

Same as from_async_reader, but with an extra parameter.

Reads a PMTiles archive from a reader, but only parses tile entries whose tile IDs are included in the filter range. Tiles that are not included in the range will appear as missing.

This can improve performance in cases where only a limited range of tiles is needed, as whole leaf directories may be skipped during parsing.

§Arguments
  • input - Reader
  • tiles_filter_range - Range of Tile IDs to load
§Errors

See from_async_reader for details on possible errors.

§Example
let bytes = include_bytes!("../test/stamen_toner(raster)CC-BY+ODbL_z3.pmtiles");
let mut reader = futures::io::Cursor::new(bytes);

let pm_tiles = PMTiles::from_async_reader_partially(reader, ..).await.unwrap();
Source

pub async fn to_async_writer( self, output: &mut (impl AsyncWrite + AsyncSeekExt + Unpin + Send), ) -> Result<()>

Available on crate feature async only.

Async version of to_writer.

Writes the archive to a writer.

The archive is always deduped and the directory entries clustered to produce the smallest possible archive size.

This takes ownership of the object so all data does not need to be copied. This prevents large memory consumption when writing large PMTiles archives.

§Arguments
  • output - Writer to write data to
§Errors

Will return Err if Self::internal_compression was set to Compression::Unknown or an I/O error occurred while writing to output.

§Example

Write the archive to a file.

let pm_tiles = PMTiles::new_async(TileType::Png, Compression::None);
let mut out_file = tokio::fs::File::create(file_path).await.unwrap().compat();
pm_tiles.to_async_writer(&mut out_file).await.unwrap();

Trait Implementations§

Source§

impl<R: Debug> Debug for PMTiles<R>

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl<R> Default for PMTiles<R>

Source§

fn default() -> Self

Returns the “default value” for a type. Read more

Auto Trait Implementations§

§

impl<R> Freeze for PMTiles<R>
where R: Freeze,

§

impl<R> RefUnwindSafe for PMTiles<R>
where R: RefUnwindSafe,

§

impl<R> Send for PMTiles<R>
where R: Send,

§

impl<R> Sync for PMTiles<R>
where R: Sync,

§

impl<R> Unpin for PMTiles<R>
where R: Unpin,

§

impl<R> UnsafeUnpin for PMTiles<R>
where R: UnsafeUnpin,

§

impl<R> UnwindSafe for PMTiles<R>
where R: UnwindSafe,

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> Conv for T

Source§

fn conv<T>(self) -> T
where Self: Into<T>,

Converts self into T using Into<T>. Read more
Source§

impl<T> FmtForward for T

Source§

fn fmt_binary(self) -> FmtBinary<Self>
where Self: Binary,

Causes self to use its Binary implementation when Debug-formatted.
Source§

fn fmt_display(self) -> FmtDisplay<Self>
where Self: Display,

Causes self to use its Display implementation when Debug-formatted.
Source§

fn fmt_lower_exp(self) -> FmtLowerExp<Self>
where Self: LowerExp,

Causes self to use its LowerExp implementation when Debug-formatted.
Source§

fn fmt_lower_hex(self) -> FmtLowerHex<Self>
where Self: LowerHex,

Causes self to use its LowerHex implementation when Debug-formatted.
Source§

fn fmt_octal(self) -> FmtOctal<Self>
where Self: Octal,

Causes self to use its Octal implementation when Debug-formatted.
Source§

fn fmt_pointer(self) -> FmtPointer<Self>
where Self: Pointer,

Causes self to use its Pointer implementation when Debug-formatted.
Source§

fn fmt_upper_exp(self) -> FmtUpperExp<Self>
where Self: UpperExp,

Causes self to use its UpperExp implementation when Debug-formatted.
Source§

fn fmt_upper_hex(self) -> FmtUpperHex<Self>
where Self: UpperHex,

Causes self to use its UpperHex implementation when Debug-formatted.
Source§

fn fmt_list(self) -> FmtList<Self>
where &'a Self: for<'a> IntoIterator,

Formats each item in a sequence. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T> Pipe for T
where T: ?Sized,

Source§

fn pipe<R>(self, func: impl FnOnce(Self) -> R) -> R
where Self: Sized,

Pipes by value. This is generally the method you want to use. Read more
Source§

fn pipe_ref<'a, R>(&'a self, func: impl FnOnce(&'a Self) -> R) -> R
where R: 'a,

Borrows self and passes that borrow into the pipe function. Read more
Source§

fn pipe_ref_mut<'a, R>(&'a mut self, func: impl FnOnce(&'a mut Self) -> R) -> R
where R: 'a,

Mutably borrows self and passes that borrow into the pipe function. Read more
Source§

fn pipe_borrow<'a, B, R>(&'a self, func: impl FnOnce(&'a B) -> R) -> R
where Self: Borrow<B>, B: 'a + ?Sized, R: 'a,

Borrows self, then passes self.borrow() into the pipe function. Read more
Source§

fn pipe_borrow_mut<'a, B, R>( &'a mut self, func: impl FnOnce(&'a mut B) -> R, ) -> R
where Self: BorrowMut<B>, B: 'a + ?Sized, R: 'a,

Mutably borrows self, then passes self.borrow_mut() into the pipe function. Read more
Source§

fn pipe_as_ref<'a, U, R>(&'a self, func: impl FnOnce(&'a U) -> R) -> R
where Self: AsRef<U>, U: 'a + ?Sized, R: 'a,

Borrows self, then passes self.as_ref() into the pipe function.
Source§

fn pipe_as_mut<'a, U, R>(&'a mut self, func: impl FnOnce(&'a mut U) -> R) -> R
where Self: AsMut<U>, U: 'a + ?Sized, R: 'a,

Mutably borrows self, then passes self.as_mut() into the pipe function.
Source§

fn pipe_deref<'a, T, R>(&'a self, func: impl FnOnce(&'a T) -> R) -> R
where Self: Deref<Target = T>, T: 'a + ?Sized, R: 'a,

Borrows self, then passes self.deref() into the pipe function.
Source§

fn pipe_deref_mut<'a, T, R>( &'a mut self, func: impl FnOnce(&'a mut T) -> R, ) -> R
where Self: DerefMut<Target = T> + Deref, T: 'a + ?Sized, R: 'a,

Mutably borrows self, then passes self.deref_mut() into the pipe function.
Source§

impl<T> Tap for T

Source§

fn tap(self, func: impl FnOnce(&Self)) -> Self

Immutable access to a value. Read more
Source§

fn tap_mut(self, func: impl FnOnce(&mut Self)) -> Self

Mutable access to a value. Read more
Source§

fn tap_borrow<B>(self, func: impl FnOnce(&B)) -> Self
where Self: Borrow<B>, B: ?Sized,

Immutable access to the Borrow<B> of a value. Read more
Source§

fn tap_borrow_mut<B>(self, func: impl FnOnce(&mut B)) -> Self
where Self: BorrowMut<B>, B: ?Sized,

Mutable access to the BorrowMut<B> of a value. Read more
Source§

fn tap_ref<R>(self, func: impl FnOnce(&R)) -> Self
where Self: AsRef<R>, R: ?Sized,

Immutable access to the AsRef<R> view of a value. Read more
Source§

fn tap_ref_mut<R>(self, func: impl FnOnce(&mut R)) -> Self
where Self: AsMut<R>, R: ?Sized,

Mutable access to the AsMut<R> view of a value. Read more
Source§

fn tap_deref<T>(self, func: impl FnOnce(&T)) -> Self
where Self: Deref<Target = T>, T: ?Sized,

Immutable access to the Deref::Target of a value. Read more
Source§

fn tap_deref_mut<T>(self, func: impl FnOnce(&mut T)) -> Self
where Self: DerefMut<Target = T> + Deref, T: ?Sized,

Mutable access to the Deref::Target of a value. Read more
Source§

fn tap_dbg(self, func: impl FnOnce(&Self)) -> Self

Calls .tap() only in debug builds, and is erased in release builds.
Source§

fn tap_mut_dbg(self, func: impl FnOnce(&mut Self)) -> Self

Calls .tap_mut() only in debug builds, and is erased in release builds.
Source§

fn tap_borrow_dbg<B>(self, func: impl FnOnce(&B)) -> Self
where Self: Borrow<B>, B: ?Sized,

Calls .tap_borrow() only in debug builds, and is erased in release builds.
Source§

fn tap_borrow_mut_dbg<B>(self, func: impl FnOnce(&mut B)) -> Self
where Self: BorrowMut<B>, B: ?Sized,

Calls .tap_borrow_mut() only in debug builds, and is erased in release builds.
Source§

fn tap_ref_dbg<R>(self, func: impl FnOnce(&R)) -> Self
where Self: AsRef<R>, R: ?Sized,

Calls .tap_ref() only in debug builds, and is erased in release builds.
Source§

fn tap_ref_mut_dbg<R>(self, func: impl FnOnce(&mut R)) -> Self
where Self: AsMut<R>, R: ?Sized,

Calls .tap_ref_mut() only in debug builds, and is erased in release builds.
Source§

fn tap_deref_dbg<T>(self, func: impl FnOnce(&T)) -> Self
where Self: Deref<Target = T>, T: ?Sized,

Calls .tap_deref() only in debug builds, and is erased in release builds.
Source§

fn tap_deref_mut_dbg<T>(self, func: impl FnOnce(&mut T)) -> Self
where Self: DerefMut<Target = T> + Deref, T: ?Sized,

Calls .tap_deref_mut() only in debug builds, and is erased in release builds.
Source§

impl<T> TryConv for T

Source§

fn try_conv<T>(self) -> Result<T, Self::Error>
where Self: TryInto<T>,

Attempts to convert self into T using TryInto<T>. Read more
Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.