geo 0.33.0

Geospatial primitives and algorithms
Documentation
use crate::MonotoneChains;
use crate::monotone_chain::geometry::*;
use crate::{GeoNum, HasDimensions, Intersects};

chains_intersects_impl!(
    MonotoneChainMultiLineString<'a, T>,
    MonotoneChainLineString<'a, T>
);
chains_intersects_impl!(
    MonotoneChainMultiLineString<'a, T>,
    MonotoneChainMultiLineString<'a, T>
);

impl<'a, T> Intersects<MonotoneChainPolygon<'a, T>> for MonotoneChainMultiLineString<'a, T>
where
    T: GeoNum,
{
    fn intersects(&self, rhs: &MonotoneChainPolygon<'a, T>) -> bool {
        if self.is_empty() || rhs.is_empty() {
            return false;
        }
        self.chains()
            .any(|c| rhs.chains().any(|c2| c.intersects(c2)))
            || self
                .geometry()
                .iter()
                .filter_map(|c| c.0.first())
                .any(|c| c.intersects(rhs.geometry()))
    }
}

impl<'a, T> Intersects<MonotoneChainMultiPolygon<'a, T>> for MonotoneChainMultiLineString<'a, T>
where
    T: GeoNum,
{
    fn intersects(&self, rhs: &MonotoneChainMultiPolygon<'a, T>) -> bool {
        if self.is_empty() || rhs.is_empty() {
            return false;
        }
        self.chains()
            .any(|c| rhs.chains().any(|c2| c.intersects(c2)))
            || self
                .geometry()
                .iter()
                .filter_map(|c| c.0.first())
                .any(|c| c.intersects(rhs.geometry()))
    }
}