geo/algorithm/intersects/
line_string.rs

1use super::{has_disjoint_bboxes, Intersects};
2use crate::BoundingRect;
3use crate::*;
4
5// Blanket implementation using self.lines().any().
6impl<T, G> Intersects<G> for LineString<T>
7where
8    T: CoordNum,
9    Line<T>: Intersects<G>,
10    G: BoundingRect<T>,
11{
12    fn intersects(&self, geom: &G) -> bool {
13        if has_disjoint_bboxes(self, geom) {
14            return false;
15        }
16        self.lines().any(|l| l.intersects(geom))
17    }
18}
19symmetric_intersects_impl!(Coord<T>, LineString<T>);
20symmetric_intersects_impl!(Line<T>, LineString<T>);
21symmetric_intersects_impl!(Rect<T>, LineString<T>);
22
23// Blanket implementation from LineString<T>
24impl<T, G> Intersects<G> for MultiLineString<T>
25where
26    T: CoordNum,
27    LineString<T>: Intersects<G>,
28    G: BoundingRect<T>,
29{
30    fn intersects(&self, rhs: &G) -> bool {
31        if has_disjoint_bboxes(self, rhs) {
32            return false;
33        }
34        self.iter().any(|p| p.intersects(rhs))
35    }
36}
37
38symmetric_intersects_impl!(Point<T>, MultiLineString<T>);
39symmetric_intersects_impl!(Line<T>, MultiLineString<T>);
40symmetric_intersects_impl!(Rect<T>, MultiLineString<T>);