geo/algorithm/intersects/
line_string.rs1use super::{has_disjoint_bboxes, Intersects};
2use crate::BoundingRect;
3use crate::*;
4
5impl<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
23impl<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>);