Trait geo::algorithm::orient::Orient
[−]
[src]
pub trait Orient<T> { fn orient(&self, orientation: Direction) -> Self; }
Required Methods
fn orient(&self, orientation: Direction) -> Self
Orients a Polygon's exterior and interior rings according to convention
By default, the exterior ring of a Polygon is oriented counter-clockwise, and any interior rings are oriented clockwise.
use geo::{Point, LineString, Polygon}; use geo::orient::{Orient, Direction}; // a diamond shape, oriented clockwise outside let points_ext_raw = vec![(1.0, 0.0), (0.0, 1.0), (1.0, 2.0), (2.0, 1.0), (1.0, 0.0)]; // counter-clockwise interior let points_int_raw = vec![(1.0, 0.5), (1.5, 1.0), (1.0, 1.5), (0.5, 1.0), (1.0, 0.5)]; let points_ext = points_ext_raw.iter().map(|e| Point::new(e.0, e.1)).collect::<Vec<_>>(); let points_int = points_int_raw.iter().map(|e| Point::new(e.0, e.1)).collect::<Vec<_>>(); let poly = Polygon::new(LineString(points_ext), vec![LineString(points_int)]); // a diamond shape, oriented counter-clockwise outside, let oriented_ext = vec![(1.0, 0.0), (2.0, 1.0), (1.0, 2.0), (0.0, 1.0), (1.0, 0.0)]; let oriented_ext_ls = LineString(oriented_ext.iter().map(|e| Point::new(e.0, e.1)).collect::<Vec<_>>()); // clockwise interior let oriented_int = vec![(1.0, 0.5), (0.5, 1.0), (1.0, 1.5), (1.5, 1.0), (1.0, 0.5)]; let oriented_int_ls = LineString(oriented_int.iter().map(|e| Point::new(e.0, e.1)).collect::<Vec<_>>()); // build corrected Polygon let oriented = poly.orient(Direction::Default); assert_eq!(oriented.exterior.0, oriented_ext_ls.0); assert_eq!(oriented.interiors[0].0, oriented_int_ls.0);
Implementors
impl<T> Orient<T> for Polygon<T> where
T: CoordinateType,impl<T> Orient<T> for MultiPolygon<T> where
T: CoordinateType,