Trait geo::algorithm::orient::Orient [] [src]

pub trait Orient<T> {
    fn orient(&self, orientation: Direction) -> Self;
}

Required Methods

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