#[cfg(feature = "geo")]
extern crate geo_types;
extern crate geos;
#[cfg(feature = "geo")]
use geo_types::{Coordinate, LineString, Polygon};
#[cfg(feature = "geo")]
use geos::{Error, Geom, Geometry};
#[cfg(feature = "geo")]
use std::convert::TryInto;
#[cfg(feature = "geo")]
fn fun() -> Result<(), Error> {
let exterior = LineString(vec![
Coordinate::from((0., 0.)),
Coordinate::from((0., 1.)),
Coordinate::from((1., 1.)),
Coordinate::from((1., 0.)),
Coordinate::from((0., 0.)),
]);
let interiors = vec![LineString(vec![
Coordinate::from((0.1, 0.1)),
Coordinate::from((0.1, 0.9)),
Coordinate::from((0.9, 0.9)),
Coordinate::from((0.9, 0.1)),
Coordinate::from((0.1, 0.1)),
])];
let p = Polygon::new(exterior.clone(), interiors.clone());
assert_eq!(p.exterior(), &exterior);
assert_eq!(p.interiors(), interiors.as_slice());
let geom: Geometry = (&p).try_into()?;
assert!(geom.contains(&geom)?);
let tmp: Geometry = (&exterior).try_into()?;
assert!(!geom.contains(&tmp)?);
assert!(geom.covers(&tmp)?);
assert!(geom.touches(&tmp)?);
Ok(())
}
#[cfg(feature = "geo")]
fn main() {
fun().unwrap();
}
#[cfg(not(feature = "geo"))]
fn main() {
eprintln!("You need to enable the \"geo\" feature to run this example!",);
}