Expand description
The geo-types
library defines geometric types for the GeoRust ecosystem.
In most cases, you will only need to use this crate if you’re a crate author and want
compatibility with other GeoRust crates. Otherwise, the geo
crate re-exports these types and additionally provides geospatial algorithms.
Geometries
Point
: A single point represented by oneCoordinate
MultiPoint
: A collection ofPoint
sLine
: A line segment represented by twoCoordinate
sLineString
: A series of contiguous line segments represented by two or moreCoordinate
sMultiLineString
: A collection ofLineString
sPolygon
: A bounded area represented by oneLineString
exterior ring, and zero or moreLineString
interior ringsMultiPolygon
: A collection ofPolygon
sRect
: An axis-aligned bounded rectangle represented by minimum and maximumCoordinate
sTriangle
: A bounded area represented by threeCoordinate
verticesGeometryCollection
: A collection ofGeometry
sGeometry
: An enumeration of all geometry types, excludingCoordinate
Coordinates and Numeric Types
Coordinate
: A two-dimensional coordinate. All geometry types are composed ofCoordinate
s, thoughCoordinate
itself is not aGeometry
type. SeePoint
for a single coordinate geometry.
By default, coordinates are 64-bit floating point numbers, but this is generic, and you may specify any numeric type that implements CoordNum
or CoordFloat
. As well as f64
, this includes common numeric types like f32
, i32
, i64
, etc.
use geo_types::Point;
// Geometries are f64 by default
let point: Point = Point::new(1.0, 2.0);
assert_eq!(std::mem::size_of::<Point>(), 64 * 2 / 8);
// You can be explicit about the numeric type.
let f64_point: Point<f64> = Point::new(1.0, 2.0);
assert_eq!(std::mem::size_of::<Point<f64>>(), 64 * 2 / 8);
// Or specify some non-default numeric type
let f32_point: Point<f32> = Point::new(1.0, 2.0);
assert_eq!(std::mem::size_of::<Point<f32>>(), 32 * 2 / 8);
// Integer geometries are supported too, though not all
// algorithms will be implemented for all numeric types.
let i32_point: Point<i32> = Point::new(1, 2);
assert_eq!(std::mem::size_of::<Point<i32>>(), 32 * 2 / 8);
Semantics
The geospatial types provided here aim to adhere to the OpenGIS Simple feature access standards. Thus, the types here are inter-operable with other implementations of the standards: JTS, GEOS, etc.
Features
The following optional Cargo features are available:
approx
: Allows geometry types to be checked for approximate equality with approxarbitrary
: Allows geometry types to be created from unstructured input with arbitraryserde
: Allows geometry types to be serialized and deserialized with Serdeuse-rstar_0_8
: Allows geometry types to be inserted into rstar R*-trees (rstar v0.8
)use-rstar_0_9
: Allows geometry types to be inserted into rstar R*-trees (rstar v0.9
)
Re-exports
pub use geometry::*;
Modules
Macros
Creates a Coordinate
from the given scalars.
Creates a LineString
containing the given coordinates.
Structs
A Point
iterator returned by the points
method
Enums
Traits
For algorithms which can only use floating point Point
s/Coordinate
s, like area or length calculations
For algorithms which can use both integer and floating point Point
s/Coordinate
s