pub struct Geometry<'a> { /* private fields */ }
Expand description

Representation of a GEOS geometry.

Example

use geos::{Geom, Geometry};

let point_geom = Geometry::new_from_wkt("POINT (2.5 3.5)")
                          .expect("Invalid geometry");
assert_eq!(point_geom.get_x(), Ok(2.5));
assert_eq!(point_geom.get_y(), Ok(3.5));

Implementations

Creates a Geometry from the WKT format.

Example
use geos::Geometry;

let point_geom = Geometry::new_from_wkt("POINT (2.5 2.5)").expect("Invalid geometry");

Create a new Geometry from the HEX format.

Example
use geos::{Geom, Geometry};

let point_geom = Geometry::new_from_wkt("POINT (2.5 2.5)").expect("Invalid geometry");
let hex_buf = point_geom.to_hex().expect("conversion to HEX failed");

// The interesting part is here:
let new_geom = Geometry::new_from_hex(hex_buf.as_ref())
                     .expect("conversion from HEX failed");
assert_eq!(point_geom.equals(&new_geom), Ok(true));

Create a new Geometry from the WKB format.

Example
use geos::{Geom, Geometry};

let point_geom = Geometry::new_from_wkt("POINT (2.5 2.5)").expect("Invalid geometry");
let wkb_buf = point_geom.to_wkb().expect("conversion to WKB failed");

// The interesting part is here:
let new_geom = Geometry::new_from_wkb(wkb_buf.as_ref())
                     .expect("conversion from WKB failed");
assert_eq!(point_geom.equals(&new_geom), Ok(true));

Creates an areal geometry formed by the constituent linework of given geometry.

You can find new illustrations on postgis documentation.

Available using the v3_8_0 feature.

Example
use geos::{Geom, Geometry};

let geom = Geometry::new_from_wkt("POINT(100 90)").expect("Invalid geometry");
let small_geom = geom.buffer(25., 8).expect("buffer failed");
let big_geom = geom.buffer(50., 8).expect("buffer failed");

let union_geom = small_geom.union(&big_geom).expect("union failed");
let build_area_geom = union_geom.build_area().expect("build_area failed");

// Looks like a donut.
assert_eq!(union_geom.to_wkt_precision(1).unwrap(),
           "POLYGON ((150.0 90.0, 149.0 80.2, 146.2 70.9, 141.6 62.2, 135.4 54.6, \
                      127.8 48.4, 119.1 43.8, 109.8 41.0, 100.0 40.0, 90.2 41.0, \
                      80.9 43.8, 72.2 48.4, 64.6 54.6, 58.4 62.2, 53.8 70.9, 51.0 80.2, \
                      50.0 90.0, 51.0 99.8, 53.8 109.1, 58.4 117.8, 64.6 125.4, \
                      72.2 131.6, 80.9 136.2, 90.2 139.0, 100.0 140.0, 109.8 139.0, \
                      119.1 136.2, 127.8 131.6, 135.4 125.4, 141.6 117.8, 146.2 109.1, \
                      149.0 99.8, 150.0 90.0))");

Description from postgis:

Creates a GeometryCollection containing possible polygons formed from the constituent linework of a set of geometries.

Example:
use geos::{Geom, Geometry};

let geom1 = Geometry::new_from_wkt("POLYGON((-71.040878 42.285678,\
                                             -71.040943 42.2856,\
                                             -71.04096 42.285752,\
                                             -71.040878 42.285678))")
                     .expect("Failed to create geometry");
let geom2 = Geometry::new_from_wkt("POLYGON((-71.17166 42.353675,\
                                             -71.172026 42.354044,\
                                             -71.17239 42.354358,\
                                             -71.171794 42.354971,\
                                             -71.170511 42.354855,\
                                             -71.17112 42.354238,\
                                             -71.17166 42.353675))")
                     .expect("Failed to create geometry");

let polygonized = Geometry::polygonize(&[geom1, geom2]).expect("polygonize failed");
assert_eq!(polygonized.to_wkt().unwrap(),
           "GEOMETRYCOLLECTION (POLYGON ((-71.0408780000000064 42.2856779999999972, \
                                          -71.0409429999999986 42.2856000000000023, \
                                          -71.0409599999999983 42.2857520000000022, \
                                          -71.0408780000000064 42.2856779999999972)), \
                                POLYGON ((-71.1716600000000028 42.3536750000000026, \
                                          -71.1720260000000025 42.3540440000000018, \
                                          -71.1723899999999929 42.3543579999999977, \
                                          -71.1717940000000056 42.3549709999999990, \
                                          -71.1705110000000047 42.3548550000000006, \
                                          -71.1711200000000019 42.3542380000000023, \
                                          -71.1716600000000028 42.3536750000000026)))");

Merges Multi Line String geometry into a (set of) Line String.

Warning

If you use this function on something else than a Multi Line String or a Line String, it’ll return an empty Geometry collection.

Example
use geos::{Geom, Geometry};

let lines = Geometry::new_from_wkt("MULTILINESTRING((-29 -27,-30 -29.7,-36 -31,-45 -33),\
                                                 (-45 -33,-46 -32))")
                     .expect("Invalid geometry");
let lines_merged = lines.line_merge().expect("line merge failed");
assert_eq!(
    lines_merged.to_wkt_precision(1).unwrap(),
    "LINESTRING (-29.0 -27.0, -30.0 -29.7, -36.0 -31.0, -45.0 -33.0, -46.0 -32.0)",
);

Reverses the order of the vertexes.

Available using the v3_7_0 feature.

Example
use geos::{Geom, Geometry};

let line = Geometry::new_from_wkt("LINESTRING(1 10,1 2)")
                    .expect("invalid geometry");
let reversed_line = line.reverse().expect("reverse failed");

assert_eq!(
    reversed_line.to_wkt_precision(1).unwrap(),
    "LINESTRING (1.0 2.0, 1.0 10.0)",
);

Returns a simplified version of the given geometry.

Returns a simplified version of the given geometry. It will avoid creating invalid derived geometries.

Set SRID of self.

Example
use geos::{Geom, Geometry};

let mut point_geom = Geometry::new_from_wkt("POINT (2.5 2.5 4.0)")
                              .expect("Invalid geometry");
point_geom.set_srid(4326);
assert_eq!(point_geom.get_srid(), Ok(4326));

Normalizes self in its normalized/canonical form. May reorder vertices in polygon rings, rings in a polygon, elements in a multi-geometry complex.

Example
use geos::{Geom, Geometry};

let mut geom = Geometry::new_from_wkt(
    "GEOMETRYCOLLECTION(POINT(2 3), MULTILINESTRING((0 0, 1 1),(2 2, 3 3)))",
).expect("Invalid geometry");

geom.normalize().expect("normalize failed");

assert_eq!(geom.to_wkt_precision(1).unwrap(),
           "GEOMETRYCOLLECTION (MULTILINESTRING ((2.0 2.0, 3.0 3.0), (0.0 0.0, 1.0 1.0)), \
                                POINT (2.0 3.0))");

Creates an empty polygon geometry.

Example
use geos::{Geom, Geometry};

let geom = Geometry::create_empty_polygon().expect("Failed to build empty polygon");

assert_eq!(geom.to_wkt().unwrap(), "POLYGON EMPTY");

Creates an empty point geometry.

Example
use geos::{Geom, Geometry};

let geom = Geometry::create_empty_point().expect("Failed to build empty point");

assert_eq!(geom.to_wkt().unwrap(), "POINT EMPTY");

Creates an empty line string geometry.

Example
use geos::{Geom, Geometry};

let geom = Geometry::create_empty_line_string().expect("Failed to build empty line string");

assert_eq!(geom.to_wkt().unwrap(), "LINESTRING EMPTY");

Creates an empty collection.

The type_ must be one of:

Example
use geos::{Geom, Geometry, GeometryTypes};

let geom = Geometry::create_empty_collection(GeometryTypes::MultiPolygon)
                    .expect("Failed to build empty collection");

assert_eq!(geom.to_wkt().unwrap(), "MULTIPOLYGON EMPTY");

Creates a polygon formed by the given shell and array of holes.

Note

exterior must be a LinearRing.

Example
use geos::{Geom, Geometry};

let geom = Geometry::new_from_wkt("LINEARRING(75.15 29.53,77 29,77.6 29.5, 75.15 29.53)")
                    .expect("Invalid geometry");
let polygon_geom = Geometry::create_polygon(geom, vec![])
                            .expect("create_polygon failed");

assert_eq!(
    polygon_geom.to_wkt_precision(1).unwrap(),
    "POLYGON ((75.2 29.5, 77.0 29.0, 77.6 29.5, 75.2 29.5))",
);

Create a geometry collection.

Example
use geos::{Geom, Geometry};

let geom1 = Geometry::new_from_wkt("POLYGON((0 0, 10 0, 10 6, 0 6, 0 0))")
                     .expect("Invalid geometry");
let geom2 = Geometry::new_from_wkt("POINT (3.0 4.0)").expect("Invalid geometry");

let geom = Geometry::create_geometry_collection(vec![geom1, geom2])
                    .expect("Failed to build multipolygon");

assert_eq!(geom.to_wkt_precision(1).unwrap(),
           "GEOMETRYCOLLECTION (POLYGON ((0.0 0.0, 10.0 0.0, 10.0 6.0, 0.0 6.0, 0.0 0.0)), \
                                POINT (3.0 4.0))");

Create a multi polygon geometry.

Example
use geos::{Geom, Geometry};

let geom1 = Geometry::new_from_wkt("POLYGON((0 0, 10 0, 10 6, 0 6, 0 0))")
                     .expect("Invalid geometry");
let geom2 = Geometry::new_from_wkt("POLYGON((3 3, 10 3, 10 6, 3 6, 3 3))")
                     .expect("Invalid geometry");

let geom = Geometry::create_multipolygon(vec![geom1, geom2])
                    .expect("Failed to build multipolygon");

assert_eq!(geom.to_wkt_precision(1).unwrap(),
           "MULTIPOLYGON (((0.0 0.0, 10.0 0.0, 10.0 6.0, 0.0 6.0, 0.0 0.0)), \
                          ((3.0 3.0, 10.0 3.0, 10.0 6.0, 3.0 6.0, 3.0 3.0)))");

Create a multiline string geometry.

Example
use geos::{Geom, Geometry};

let geom1 = Geometry::new_from_wkt("LINESTRING (1.0 2.0, 3.0 4.0)").expect("invalid geometry");
let geom2 = Geometry::new_from_wkt("LINESTRING (5.0 6.0, 7.0 8.0)").expect("invalid geometry");

let geom = Geometry::create_multiline_string(vec![geom1, geom2])
                    .expect("Failed to build multiline string");

assert_eq!(geom.to_wkt_precision(1).unwrap(),
           "MULTILINESTRING ((1.0 2.0, 3.0 4.0), (5.0 6.0, 7.0 8.0))");

Creates a multi point geometry.

Example
use geos::{Geom, Geometry};

let geom1 = Geometry::new_from_wkt("POINT (1.0 2.0)").expect("Invalid geometry");
let geom2 = Geometry::new_from_wkt("POINT (3.0 4.0)").expect("Invalid geometry");

let geom = Geometry::create_multipoint(vec![geom1, geom2])
                    .expect("Failed to build multipoint");

assert_eq!(geom.to_wkt_precision(1).unwrap(), "MULTIPOINT (1.0 2.0, 3.0 4.0)");

Creates a point geometry.

Example
use geos::{CoordDimensions, CoordSeq, Geom, Geometry};

let coords = CoordSeq::new_from_vec(&[&[1., 2.]])
                      .expect("failed to create CoordSeq");

let geom = Geometry::create_point(coords).expect("Failed to create a point");

assert_eq!(geom.to_wkt_precision(1).unwrap(), "POINT (1.0 2.0)");

Creates a line string geometry.

Example
use geos::{CoordDimensions, CoordSeq, Geom, Geometry};

let coords = CoordSeq::new_from_vec(&[&[1., 2.], &[3., 4.]])
                      .expect("failed to create CoordSeq");

let geom = Geometry::create_line_string(coords).expect("Failed to create a line string");

assert_eq!(geom.to_wkt_precision(1).unwrap(), "LINESTRING (1.0 2.0, 3.0 4.0)");

Creates a linear ring geometry.

Example
use geos::{CoordDimensions, CoordSeq, Geom, Geometry};

let coords = CoordSeq::new_from_vec(&[&[75.15, 29.53],
                                      &[77., 29.],
                                      &[77.6, 29.5],
                                      &[75.15, 29.53]])
                      .expect("failed to create CoordSeq");

let geom = Geometry::create_linear_ring(coords)
                    .expect("Failed to create a linea ring");

assert_eq!(geom.to_wkt_precision(1).unwrap(),
           "LINEARRING (75.2 29.5, 77.0 29.0, 77.6 29.5, 75.2 29.5)");

Trait Implementations

Also passes the context to the newly created Geometry.

Performs copy-assignment from source. Read more

Set the context handle to the geometry.

use geos::{ContextInteractions, ContextHandle, Geometry};

let context_handle = ContextHandle::init().expect("invalid init");
context_handle.set_notice_message_handler(Some(Box::new(|s| println!("new message: {}", s))));
let mut point_geom = Geometry::new_from_wkt("POINT (2.5 2.5)").expect("Invalid geometry");
point_geom.set_context_handle(context_handle);

Get the context handle of the geometry.

use geos::{ContextInteractions, Geometry};

let point_geom = Geometry::new_from_wkt("POINT (2.5 2.5)").expect("Invalid geometry");
let context = point_geom.get_context_handle();
context.set_notice_message_handler(Some(Box::new(|s| println!("new message: {}", s))));

Gets the last error (if any) from the ContextHandle held by this object. Read more

Gets the last notification (if any) from the ContextHandle held by this object. Read more

Executes the destructor for this type. Read more

Returns the type of the geometry. Read more

Checks if the geometry is valid. Read more

Returns an explanation on why the geometry is invalid. Read more

Get the underlying geos CoordSeq object from the geometry Read more

Returns the area of the geometry. Units are specified by the SRID of the given geometry. Read more

Returns a WKT representation of the geometry. It defaults to 2 dimensions output. Use WKTWriter type directly if you want more control. Read more

Returns a WKT representation of the geometry with the given precision. It is a wrapper around WKTWriter::set_rounding_precision. Read more

Returns true if the geometry is a ring. Read more

Returns true if self shares any portion of space with other. So if any of this is true: Read more

Returns true if self and other have at least one interior into each other. Read more

Returns true if self doesn’t: Read more

Returns true if the only points in common between self and other lie in the union of the boundaries of self and other. Read more

Returns true if self spatially overlaps other. Read more

Returns true if self is completely inside other. Read more

Checks if the two Geometry objects are equal. Read more

Checks if the two Geometry objects are exactly equal. Read more

Returns true if no point of other is outside of self. Read more

Returns true if no point of self is outside of other. Read more

Returns true if no points of the other geometry is outside the exterior of self. Read more

Returns a geometry which represents all points whose distance from self is less than or equal to distance. Read more

Returns a geometry which represents all points whose distance from self is less than or equal to distance. Read more

Returns a geometry which represents all points whose distance from self is less than or equal to distance. Read more

Returns true if the given geometry is empty. Read more

Returns true if the given geometry has no anomalous geometric points, such as self intersection or self tangency. Read more

Returns a geometry which represents part of self that doesn’t intersect with other. Read more

Returns the minimum bouding box of the given geometry. Read more

Returns a geometry which represents the parts of self and other that don’t intersect. Read more

Aggregates the given geometry with another one. Read more

Returns the geometric center or (equivalently) the center of mass of the given geometry as a point. Read more

Documentation from postgis: Read more

Create a voronoi diagram. Read more

Returns a geometry representing the intersection between self and other. Read more

Documentation from postgis: Read more

Returns the closure of the combinatorial boundary of self. Read more

Returns true if self has a Z coordinate. Read more

Returns true if start and end point are coincident. Read more

Returns the length of self. The unit depends of the SRID. Read more

Returns the distance between self and other. The unit depends of the SRID. Read more

Returns the indexed distance between self and other. The unit depends of the SRID. Read more

Returns the hausdorff distance between self and other. The unit depends of the SRID. Read more

Returns the hausdorff distance between self and other. The unit depends of the SRID. Read more

Returns the frechet distance between self and other. The unit depends of the SRID. Read more

Returns the frechet distance between self and other. The unit depends of the SRID. Read more

Returns the length of the given geometry. Read more

Documentation from postgis: Read more

Returns unique points of self.

Returns the X position. The given Geometry must be a Point, otherwise it’ll fail. Read more

Returns the Y position. The given Geometry must be a Point, otherwise it’ll fail. Read more

Returns the Z position. The given Geometry must be a Point, otherwise it’ll fail. Read more

Returns the nth point of the given geometry. Read more

Returns the start point of self. Read more

Returns the end point of self. Read more

Returns the number of points of self. Read more

Returns the number of interior rings. Read more

Returns the number of coordinates inside self. Read more

Returns the number of dimensions used in self. Read more

Return in which coordinate dimension the geometry is. Read more

This functions attempts to return a valid representation of self. Read more

Returns the number of geometries. Read more

Get SRID of self. Read more

Returns the precision of self. Read more

Returns the precision of self. Read more

Returns the biggest X of the geometry. Read more

Returns the smallest X of the geometry. Read more

Returns the biggest Y of the geometry. Read more

Returns the smallest Y of the geometry. Read more

Returns the smallest distance by which a vertex of self could be moved to produce an invalid geometry. Read more

Returns the two-point LineString spanning of self’s minimum clearance. Read more

Returns the minimum rotated rectangle inside of self. Read more

Returns the minimum width inside of self. Read more

Returns a delaunay triangulation around the vertices of self. Read more

Return an offset line at a given distance and side from an input line. All points of the returned geometries are not further than the given distance from the input geometry. Read more

Returns, in the tuple elements order: Read more

Converts a Geometry to the HEX format. For more control over the generated output, use the WKBWriter type. Read more

Converts a Geometry to the WKB format. For more control over the generated output, use the WKBWriter type. Read more

Creates a new PreparedGeometry from the current Geometry. Read more

Also passes the context to the newly created Geometry.

Returns the 1-based nth geometry. Read more

Returns the nth interior ring. Read more

Returns the exterior ring. Read more

This method tests for self and other values to be equal, and is used by ==. Read more

This method tests for !=.

The type returned in the event of a conversion error.

Performs the conversion.

The type returned in the event of a conversion error.

Performs the conversion.

The type returned in the event of a conversion error.

Performs the conversion.

The type returned in the event of a conversion error.

Performs the conversion.

The type returned in the event of a conversion error.

Performs the conversion.

The type returned in the event of a conversion error.

Performs the conversion.

The type returned in the event of a conversion error.

Performs the conversion.

The type returned in the event of a conversion error.

Performs the conversion.

The type returned in the event of a conversion error.

Performs the conversion.

The type returned in the event of a conversion error.

Performs the conversion.

The type returned in the event of a conversion error.

Performs the conversion.

The type returned in the event of a conversion error.

Performs the conversion.

The type returned in the event of a conversion error.

Performs the conversion.

The type returned in the event of a conversion error.

Performs the conversion.

Auto Trait Implementations

Blanket Implementations

Gets the TypeId of self. Read more

Immutably borrows from an owned value. Read more

Mutably borrows from an owned value. Read more

Returns the argument unchanged.

Calls U::from(self).

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

The resulting type after obtaining ownership.

Creates owned data from borrowed data, usually by cloning. Read more

🔬 This is a nightly-only experimental API. (toowned_clone_into)

Uses borrowed data to replace owned data, usually by cloning. Read more

The type returned in the event of a conversion error.

Performs the conversion.

The type returned in the event of a conversion error.

Performs the conversion.