[][src]Struct geos::Geometry

pub struct Geometry<'a> { /* fields omitted */ }

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

impl<'a> Geometry<'a>[src]

pub fn new_from_wkt(wkt: &str) -> GResult<Geometry<'a>>[src]

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");

pub fn new_from_hex(hex: &[u8]) -> GResult<Geometry<'a>>[src]

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));

pub fn new_from_wkb(wkb: &[u8]) -> GResult<Geometry<'a>>[src]

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));

pub fn build_area(&self) -> GResult<Geometry<'a>>[src]

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))");

pub fn polygonize<T: Borrow<Geometry<'a>>>(
    geometries: &[T]
) -> GResult<Geometry<'a>>
[src]

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)))");

pub fn polygonizer_get_cut_edges<T: Borrow<Geometry<'a>>>(
    &self,
    geometries: &[T]
) -> GResult<Geometry<'a>>
[src]

pub fn line_merge(&self) -> GResult<Geometry<'a>>[src]

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)",
);

pub fn reverse(&self) -> GResult<Geometry<'a>>[src]

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)",
);

pub fn simplify(&self, tolerance: f64) -> GResult<Geometry<'a>>[src]

Returns a simplified version of the given geometry.

pub fn topology_preserve_simplify(
    &self,
    tolerance: f64
) -> GResult<Geometry<'a>>
[src]

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

pub fn set_srid(&mut self, srid: usize)[src]

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));

pub fn normalize(&mut self) -> GResult<()>[src]

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))");

pub fn create_empty_polygon() -> GResult<Geometry<'a>>[src]

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");

pub fn create_empty_point() -> GResult<Geometry<'a>>[src]

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");

pub fn create_empty_line_string() -> GResult<Geometry<'a>>[src]

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");

pub fn create_empty_collection(type_: GeometryTypes) -> GResult<Geometry<'a>>[src]

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");

pub fn create_polygon<'b>(
    exterior: Geometry<'a>,
    interiors: Vec<Geometry<'b>>
) -> GResult<Geometry<'a>>
[src]

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))",
);

pub fn create_geometry_collection(
    geoms: Vec<Geometry<'a>>
) -> GResult<Geometry<'a>>
[src]

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))");

pub fn create_multipolygon(polygons: Vec<Geometry<'a>>) -> GResult<Geometry<'a>>[src]

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)))");

pub fn create_multiline_string(
    linestrings: Vec<Geometry<'a>>
) -> GResult<Geometry<'a>>
[src]

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))");

pub fn create_multipoint(points: Vec<Geometry<'a>>) -> GResult<Geometry<'a>>[src]

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)");

pub fn create_point(s: CoordSeq<'a>) -> GResult<Geometry<'a>>[src]

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)");

pub fn create_line_string(s: CoordSeq<'a>) -> GResult<Geometry<'a>>[src]

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)");

pub fn create_linear_ring(s: CoordSeq<'a>) -> GResult<Geometry<'a>>[src]

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

impl<'a> Clone for Geometry<'a>[src]

fn clone(&self) -> Geometry<'a>[src]

Also passes the context to the newly created Geometry.

impl<'a> ContextHandling for Geometry<'a>[src]

impl<'a> ContextInteractions<'a> for Geometry<'a>[src]

fn set_context_handle(&mut self, context: ContextHandle<'a>)[src]

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);

fn get_context_handle(&self) -> &ContextHandle<'a>[src]

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))));

impl<'a> Drop for Geometry<'a>[src]

impl<'a> Geom<'a> for Geometry<'a>[src]

impl<'a, 'b, G: Geom<'b>> PartialEq<G> for Geometry<'a>[src]

impl<'a> Send for Geometry<'a>[src]

impl<'a> Sync for Geometry<'a>[src]

impl<'a, T: Borrow<Point<f64>>> TryFrom<&'a [T]> for GGeometry<'a>[src]

type Error = Error

The type returned in the event of a conversion error.

impl<'a, 'b> TryFrom<&'a Geometry> for GGeometry<'b>[src]

type Error = Error

The type returned in the event of a conversion error.

impl<'a, 'b> TryFrom<&'a LineString<f64>> for GGeometry<'b>[src]

type Error = Error

The type returned in the event of a conversion error.

impl<'a, 'b> TryFrom<&'a MultiPolygon<f64>> for GGeometry<'b>[src]

type Error = Error

The type returned in the event of a conversion error.

impl<'a, 'b> TryFrom<&'a Point<f64>> for GGeometry<'b>[src]

type Error = Error

The type returned in the event of a conversion error.

impl<'a, 'b> TryFrom<&'a Polygon<f64>> for GGeometry<'b>[src]

type Error = Error

The type returned in the event of a conversion error.

impl<'a, 'b> TryFrom<&'b Geometry<'a>> for Geometry<f64>[src]

type Error = Error

The type returned in the event of a conversion error.

impl<'a> TryFrom<Geometry<'a>> for Geometry<f64>[src]

type Error = Error

The type returned in the event of a conversion error.

impl<'a> TryFrom<Geometry<'a>> for Geometry[src]

type Error = Error

The type returned in the event of a conversion error.

impl<'a> TryFrom<Geometry> for GGeometry<'a>[src]

type Error = Error

The type returned in the event of a conversion error.

impl<'a> TryFrom<LineString<f64>> for GGeometry<'a>[src]

type Error = Error

The type returned in the event of a conversion error.

impl<'a> TryFrom<MultiPolygon<f64>> for GGeometry<'a>[src]

type Error = Error

The type returned in the event of a conversion error.

impl<'a> TryFrom<Point<f64>> for GGeometry<'a>[src]

type Error = Error

The type returned in the event of a conversion error.

impl<'a> TryFrom<Polygon<f64>> for GGeometry<'a>[src]

type Error = Error

The type returned in the event of a conversion error.

Auto Trait Implementations

impl<'a> RefUnwindSafe for Geometry<'a>

impl<'a> Unpin for Geometry<'a>

impl<'a> UnwindSafe for Geometry<'a>

Blanket Implementations

impl<T> Any for T where
    T: 'static + ?Sized
[src]

impl<T> Borrow<T> for T where
    T: ?Sized
[src]

impl<T> BorrowMut<T> for T where
    T: ?Sized
[src]

impl<T> From<T> for T[src]

impl<T, U> Into<U> for T where
    U: From<T>, 
[src]

impl<T> ToOwned for T where
    T: Clone
[src]

type Owned = T

The resulting type after obtaining ownership.

impl<T, U> TryFrom<U> for T where
    U: Into<T>, 
[src]

type Error = Infallible

The type returned in the event of a conversion error.

impl<T, U> TryInto<U> for T where
    U: TryFrom<T>, 
[src]

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

The type returned in the event of a conversion error.