pub struct Polygon {
    pub srid: SRID,
    pub geom: Polygon<f64>,
}
Expand description

A bounded two-dimensional area.

MySQL extension: The spatial reference system identifier (SRID) may identify the used coordinate system.

Fields

srid: SRIDgeom: Polygon<f64>

Methods from Deref<Target = Polygon<f64>>

Return a reference to the exterior LineString ring.

Examples
use geo_types::{LineString, Polygon};

let exterior = LineString::from(vec![(0., 0.), (1., 1.), (1., 0.), (0., 0.)]);

let polygon = Polygon::new(exterior.clone(), vec![]);

assert_eq!(polygon.exterior(), &exterior);

Execute the provided closure f, which is provided with a mutable reference to the exterior LineString ring.

After the closure executes, the exterior LineString will be closed.

Examples
use geo_types::{coord, LineString, Polygon};

let mut polygon = Polygon::new(
    LineString::from(vec![(0., 0.), (1., 1.), (1., 0.), (0., 0.)]),
    vec![],
);

polygon.exterior_mut(|exterior| {
    exterior.0[1] = coord! { x: 1., y: 2. };
});

assert_eq!(
    polygon.exterior(),
    &LineString::from(vec![(0., 0.), (1., 2.), (1., 0.), (0., 0.),])
);

If the first and last Coordinates of the exterior LineString no longer match, the LineString will be closed:

use geo_types::{coord, LineString, Polygon};

let mut polygon = Polygon::new(
    LineString::from(vec![(0., 0.), (1., 1.), (1., 0.), (0., 0.)]),
    vec![],
);

polygon.exterior_mut(|exterior| {
    exterior.0[0] = coord! { x: 0., y: 1. };
});

assert_eq!(
    polygon.exterior(),
    &LineString::from(vec![(0., 1.), (1., 1.), (1., 0.), (0., 0.), (0., 1.),])
);

Return a slice of the interior LineString rings.

Examples
use geo_types::{coord, LineString, Polygon};

let interiors = vec![LineString::from(vec![
    (0.1, 0.1),
    (0.9, 0.9),
    (0.9, 0.1),
    (0.1, 0.1),
])];

let polygon = Polygon::new(
    LineString::from(vec![(0., 0.), (1., 1.), (1., 0.), (0., 0.)]),
    interiors.clone(),
);

assert_eq!(interiors, polygon.interiors());

Execute the provided closure f, which is provided with a mutable reference to the interior LineString rings.

After the closure executes, each of the interior LineStrings will be closed.

Examples
use geo_types::{coord, LineString, Polygon};

let mut polygon = Polygon::new(
    LineString::from(vec![(0., 0.), (1., 1.), (1., 0.), (0., 0.)]),
    vec![LineString::from(vec![
        (0.1, 0.1),
        (0.9, 0.9),
        (0.9, 0.1),
        (0.1, 0.1),
    ])],
);

polygon.interiors_mut(|interiors| {
    interiors[0].0[1] = coord! { x: 0.8, y: 0.8 };
});

assert_eq!(
    polygon.interiors(),
    &[LineString::from(vec![
        (0.1, 0.1),
        (0.8, 0.8),
        (0.9, 0.1),
        (0.1, 0.1),
    ])]
);

If the first and last Coordinates of any interior LineString no longer match, those LineStrings will be closed:

use geo_types::{coord, LineString, Polygon};

let mut polygon = Polygon::new(
    LineString::from(vec![(0., 0.), (1., 1.), (1., 0.), (0., 0.)]),
    vec![LineString::from(vec![
        (0.1, 0.1),
        (0.9, 0.9),
        (0.9, 0.1),
        (0.1, 0.1),
    ])],
);

polygon.interiors_mut(|interiors| {
    interiors[0].0[0] = coord! { x: 0.1, y: 0.2 };
});

assert_eq!(
    polygon.interiors(),
    &[LineString::from(vec![
        (0.1, 0.2),
        (0.9, 0.9),
        (0.9, 0.1),
        (0.1, 0.1),
        (0.1, 0.2),
    ])]
);

Add an interior ring to the Polygon.

The new LineString interior ring will be closed:

Examples
use geo_types::{coord, LineString, Polygon};

let mut polygon = Polygon::new(
    LineString::from(vec![(0., 0.), (1., 1.), (1., 0.), (0., 0.)]),
    vec![],
);

assert_eq!(polygon.interiors().len(), 0);

polygon.interiors_push(vec![(0.1, 0.1), (0.9, 0.9), (0.9, 0.1)]);

assert_eq!(
    polygon.interiors(),
    &[LineString::from(vec![
        (0.1, 0.1),
        (0.9, 0.9),
        (0.9, 0.1),
        (0.1, 0.1),
    ])]
);
👎 Deprecated since 0.6.1:

Please use geo::is_convex on poly.exterior() instead

Determine whether a Polygon is convex

Trait Implementations

Converts this type into a mutable reference of the (usually inferred) input type.

Converts this type into a shared reference of the (usually inferred) input type.

Returns a copy of the value. Read more

Performs copy-assignment from source. Read more

Formats the value using the given formatter. Read more

The resulting type after dereferencing.

Dereferences the value.

Mutably dereferences the value.

Converts to this type from the input type.

Converts to this type from the input type.

Converts to this type from the input type.

See the trait documentation.

See the trait documentation.

The number of fields that this type will consume. Must be equal to the number of times you would call row.take() in build_from_row Read more

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

This method tests for !=.

The Rust type you’d like to map from. Read more

Construct an instance of this type

See the trait documentation.

See the trait documentation.

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.

Convert self to an expression for Diesel’s query builder. Read more

Convert &self to an expression for Diesel’s query builder. Read more

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.