pub struct BoundingBox { /* private fields */ }Expand description
A geospatial instance has at least two coordinate dimensions: X and Y for 2D coordinates of each point. X represents longitude/easting and Y represents latitude/northing. A geospatial instance can optionally have Z and/or M values associated with each point.
The Z values introduce the third dimension coordinate, typically used to indicate height or elevation.
M values allow tracking a value in a fourth dimension. These can represent:
- Linear reference values (e.g., highway milepost)
- Timestamps
- Other values defined by the CRS
The bounding box is defined as min/max value pairs of coordinates from each axis. X and Y values are always present, while Z and M are omitted for 2D geospatial instances.
When calculating a bounding box:
- Null or NaN values in a coordinate dimension are skipped
- If a dimension has only null/NaN values, that dimension is omitted
- If either X or Y dimension is missing, no bounding box is produced
- Example: POINT (1 NaN) contributes to X but not to Y, Z, or M dimensions
Special cases:
- For X values only, xmin may exceed xmax. In this case, a point matches if x >= xmin OR x <= xmax
- This wraparound can occur when the bounding box crosses the antimeridian line.
- In geographic terms: xmin=westernmost, xmax=easternmost, ymin=southernmost, ymax=northernmost
For GEOGRAPHY types:
- X values must be within [-180, 180] (longitude)
- Y values must be within [-90, 90] (latitude)
Derived from the parquet format spec
§Examples
use parquet::geospatial::bounding_box::BoundingBox;
// 2D bounding box
let bbox_2d = BoundingBox::new(0.0, 0.0, 100.0, 100.0);
// 3D bounding box with elevation
let bbox_3d = BoundingBox::new(0.0, 0.0, 100.0, 100.0)
.with_zrange(0.0, 1000.0);
// 3D bounding box with elevation and measured value
let bbox_3d_m = BoundingBox::new(0.0, 0.0, 100.0, 100.0)
.with_zrange(0.0, 1000.0)
.with_mrange(0.0, 1000.0);Implementations§
Source§impl BoundingBox
impl BoundingBox
Sourcepub fn new(xmin: f64, xmax: f64, ymin: f64, ymax: f64) -> Self
pub fn new(xmin: f64, xmax: f64, ymin: f64, ymax: f64) -> Self
Creates a new bounding box with the specified coordinates.
Sourcepub fn with_xrange(self, xmin: f64, xmax: f64) -> Self
pub fn with_xrange(self, xmin: f64, xmax: f64) -> Self
Updates the bounding box with specified X-coordinate range.
Sourcepub fn with_yrange(self, ymin: f64, ymax: f64) -> Self
pub fn with_yrange(self, ymin: f64, ymax: f64) -> Self
Updates the bounding box with specified Y-coordinate range.
Sourcepub fn with_zrange(self, zmin: f64, zmax: f64) -> Self
pub fn with_zrange(self, zmin: f64, zmax: f64) -> Self
Creates a new bounding box with the specified Z-coordinate range.
Sourcepub fn with_mrange(self, mmin: f64, mmax: f64) -> Self
pub fn with_mrange(self, mmin: f64, mmax: f64) -> Self
Creates a new bounding box with the specified M-coordinate range.
Sourcepub fn is_z_valid(&self) -> bool
pub fn is_z_valid(&self) -> bool
Returns true if both zmin and zmax are present.
Sourcepub fn is_m_valid(&self) -> bool
pub fn is_m_valid(&self) -> bool
Returns true if both mmin and mmax are present.
Trait Implementations§
Source§impl Clone for BoundingBox
impl Clone for BoundingBox
Source§fn clone(&self) -> BoundingBox
fn clone(&self) -> BoundingBox
1.0.0 · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
source. Read more