1use crate::BoundingRect;
2use crate::*;
3
4pub trait Intersects<Rhs = Self> {
40 fn intersects(&self, rhs: &Rhs) -> bool;
41}
42
43macro_rules! symmetric_intersects_impl {
54 ($t:ty, $k:ty) => {
55 impl<T> $crate::Intersects<$k> for $t
56 where
57 $k: $crate::Intersects<$t>,
58 T: CoordNum,
59 {
60 fn intersects(&self, rhs: &$k) -> bool {
61 rhs.intersects(self)
62 }
63 }
64 };
65}
66
67mod collections;
68mod coordinate;
69mod line;
70mod line_string;
71mod point;
72mod polygon;
73mod rect;
74mod triangle;
75
76#[inline]
79fn value_in_range<T>(value: T, min: T, max: T) -> bool
80where
81 T: std::cmp::PartialOrd,
82{
83 value >= min && value <= max
84}
85
86#[inline]
89pub(crate) fn value_in_between<T>(value: T, bound_1: T, bound_2: T) -> bool
90where
91 T: std::cmp::PartialOrd,
92{
93 if bound_1 < bound_2 {
94 value_in_range(value, bound_1, bound_2)
95 } else {
96 value_in_range(value, bound_2, bound_1)
97 }
98}
99
100#[inline]
103pub(crate) fn point_in_rect<T>(value: Coord<T>, bound_1: Coord<T>, bound_2: Coord<T>) -> bool
104where
105 T: CoordNum,
106{
107 value_in_between(value.x, bound_1.x, bound_2.x)
108 && value_in_between(value.y, bound_1.y, bound_2.y)
109}
110
111fn has_disjoint_bboxes<T, A, B>(a: &A, b: &B) -> bool
113where
114 T: CoordNum,
115 A: BoundingRect<T>,
116 B: BoundingRect<T>,
117{
118 let mut disjoint_bbox = false;
119 if let Some(a_bbox) = a.bounding_rect().into() {
120 if let Some(b_bbox) = b.bounding_rect().into() {
121 if !a_bbox.intersects(&b_bbox) {
122 disjoint_bbox = true;
123 }
124 }
125 }
126 disjoint_bbox
127}
128
129#[cfg(test)]
130mod test {
131 use crate::Intersects;
132 use crate::{
133 Geometry, Line, LineString, MultiLineString, MultiPoint, MultiPolygon, Point, Polygon,
134 Rect, coord, line_string, polygon,
135 };
136
137 #[test]
139 fn empty_linestring1_test() {
140 let linestring = line_string![(x: 3., y: 2.), (x: 7., y: 6.)];
141 assert!(!line_string![].intersects(&linestring));
142 }
143 #[test]
144 fn empty_linestring2_test() {
145 let linestring = line_string![(x: 3., y: 2.), (x: 7., y: 6.)];
146 assert!(!linestring.intersects(&LineString::new(Vec::new())));
147 }
148 #[test]
149 fn empty_all_linestring_test() {
150 let empty: LineString = line_string![];
151 assert!(!empty.intersects(&empty));
152 }
153 #[test]
154 fn intersect_linestring_test() {
155 let ls1 = line_string![(x: 3., y: 2.), (x: 7., y: 6.)];
156 let ls2 = line_string![(x: 3., y: 4.), (x: 8., y: 4.)];
157 assert!(ls1.intersects(&ls2));
158 }
159 #[test]
160 fn parallel_linestrings_test() {
161 let ls1 = line_string![(x: 3., y: 2.), (x: 7., y: 6.)];
162 let ls2 = line_string![(x: 3., y: 1.), (x: 7., y: 5.)];
163 assert!(!ls1.intersects(&ls2));
164 }
165 #[test]
167 fn linestring_in_polygon_test() {
168 let poly = polygon![
169 (x: 0., y: 0.),
170 (x: 5., y: 0.),
171 (x: 5., y: 6.),
172 (x: 0., y: 6.),
173 (x: 0., y: 0.),
174 ];
175 let ls = line_string![(x: 2., y: 2.), (x: 3., y: 3.)];
176 assert!(poly.intersects(&ls));
177 }
178 #[test]
179 fn linestring_on_boundary_polygon_test() {
180 let poly = Polygon::new(
181 LineString::from(vec![(0., 0.), (5., 0.), (5., 6.), (0., 6.), (0., 0.)]),
182 Vec::new(),
183 );
184 assert!(poly.intersects(&LineString::from(vec![(0., 0.), (5., 0.)])));
185 assert!(poly.intersects(&LineString::from(vec![(5., 0.), (5., 6.)])));
186 assert!(poly.intersects(&LineString::from(vec![(5., 6.), (0., 6.)])));
187 assert!(poly.intersects(&LineString::from(vec![(0., 6.), (0., 0.)])));
188 }
189 #[test]
190 fn intersect_linestring_polygon_test() {
191 let poly = Polygon::new(
192 LineString::from(vec![(0., 0.), (5., 0.), (5., 6.), (0., 6.), (0., 0.)]),
193 Vec::new(),
194 );
195 assert!(poly.intersects(&LineString::from(vec![(2., 2.), (6., 6.)])));
196 }
197 #[test]
198 fn linestring_outside_polygon_test() {
199 let poly = Polygon::new(
200 LineString::from(vec![(0., 0.), (5., 0.), (5., 6.), (0., 6.), (0., 0.)]),
201 Vec::new(),
202 );
203 assert!(!poly.intersects(&LineString::from(vec![(7., 2.), (9., 4.)])));
204 }
205 #[test]
206 fn linestring_in_inner_polygon_test() {
207 let e = LineString::from(vec![(0., 0.), (5., 0.), (5., 6.), (0., 6.), (0., 0.)]);
208 let v = vec![LineString::from(vec![
209 (1., 1.),
210 (4., 1.),
211 (4., 4.),
212 (1., 4.),
213 (1., 1.),
214 ])];
215 let poly = Polygon::new(e, v);
216 assert!(!poly.intersects(&LineString::from(vec![(2., 2.), (3., 3.)])));
217 assert!(poly.intersects(&LineString::from(vec![(2., 2.), (4., 4.)])));
218 }
219 #[test]
220 fn linestring_traverse_polygon_test() {
221 let e = LineString::from(vec![(0., 0.), (5., 0.), (5., 6.), (0., 6.), (0., 0.)]);
222 let v = vec![LineString::from(vec![
223 (1., 1.),
224 (4., 1.),
225 (4., 4.),
226 (1., 4.),
227 (1., 1.),
228 ])];
229 let poly = Polygon::new(e, v);
230 assert!(poly.intersects(&LineString::from(vec![(2., 0.5), (2., 5.)])));
231 }
232 #[test]
233 fn linestring_in_inner_with_2_inner_polygon_test() {
234 let e = LineString::from(vec![(2., 2.), (14., 2.), (14., 8.), (2., 8.), (2., 2.)]);
258 let v = vec![
259 LineString::from(vec![(4., 3.), (7., 3.), (7., 6.), (4., 6.), (4., 3.)]),
260 LineString::from(vec![(9., 3.), (12., 3.), (12., 6.), (9., 6.), (9., 3.)]),
261 ];
262 let poly = Polygon::new(e, v);
263 assert!(!poly.intersects(&LineString::from(vec![(5., 4.), (6., 5.)])));
264 assert!(poly.intersects(&LineString::from(vec![(11., 2.5), (11., 7.)])));
265 assert!(poly.intersects(&LineString::from(vec![(4., 7.), (6., 7.)])));
266 assert!(poly.intersects(&LineString::from(vec![(8., 1.), (8., 9.)])));
267 }
268 #[test]
269 fn polygons_do_not_intersect() {
270 let p1 = Polygon::new(
271 LineString::from(vec![(1., 3.), (3., 3.), (3., 5.), (1., 5.), (1., 3.)]),
272 Vec::new(),
273 );
274 let p2 = Polygon::new(
275 LineString::from(vec![
276 (10., 30.),
277 (30., 30.),
278 (30., 50.),
279 (10., 50.),
280 (10., 30.),
281 ]),
282 Vec::new(),
283 );
284
285 assert!(!p1.intersects(&p2));
286 assert!(!p2.intersects(&p1));
287 }
288 #[test]
289 fn polygons_overlap() {
290 let p1 = Polygon::new(
291 LineString::from(vec![(1., 3.), (3., 3.), (3., 5.), (1., 5.), (1., 3.)]),
292 Vec::new(),
293 );
294 let p2 = Polygon::new(
295 LineString::from(vec![(2., 3.), (4., 3.), (4., 7.), (2., 7.), (2., 3.)]),
296 Vec::new(),
297 );
298
299 assert!(p1.intersects(&p2));
300 assert!(p2.intersects(&p1));
301 }
302 #[test]
303 fn polygon_contained() {
304 let p1 = Polygon::new(
305 LineString::from(vec![(1., 3.), (4., 3.), (4., 6.), (1., 6.), (1., 3.)]),
306 Vec::new(),
307 );
308 let p2 = Polygon::new(
309 LineString::from(vec![(2., 4.), (3., 4.), (3., 5.), (2., 5.), (2., 4.)]),
310 Vec::new(),
311 );
312
313 assert!(p1.intersects(&p2));
314 assert!(p2.intersects(&p1));
315 }
316 #[test]
317 fn polygons_conincident() {
318 let p1 = Polygon::new(
319 LineString::from(vec![(1., 3.), (4., 3.), (4., 6.), (1., 6.), (1., 3.)]),
320 Vec::new(),
321 );
322 let p2 = Polygon::new(
323 LineString::from(vec![(1., 3.), (4., 3.), (4., 6.), (1., 6.), (1., 3.)]),
324 Vec::new(),
325 );
326
327 assert!(p1.intersects(&p2));
328 assert!(p2.intersects(&p1));
329 }
330 #[test]
331 fn polygon_intersects_bounding_rect_test() {
332 let poly = Polygon::new(
352 LineString::from(vec![(0., 0.), (12., 0.), (12., 8.), (0., 8.), (0., 0.)]),
353 vec![LineString::from(vec![
354 (7., 4.),
355 (11., 4.),
356 (11., 7.),
357 (7., 7.),
358 (7., 4.),
359 ])],
360 );
361 let b1 = Rect::new(coord! { x: 11., y: 1. }, coord! { x: 13., y: 2. });
362 let b2 = Rect::new(coord! { x: 2., y: 2. }, coord! { x: 8., y: 5. });
363 let b3 = Rect::new(coord! { x: 8., y: 5. }, coord! { x: 10., y: 6. });
364 let b4 = Rect::new(coord! { x: 1., y: 1. }, coord! { x: 3., y: 3. });
365 assert!(poly.intersects(&b1));
367 assert!(poly.intersects(&b2));
369 assert!(!poly.intersects(&b3));
371 assert!(poly.intersects(&b4));
373 assert!(b1.intersects(&poly));
375 assert!(b2.intersects(&poly));
376 assert!(!b3.intersects(&poly));
377 assert!(b4.intersects(&poly));
378 }
379 #[test]
380 fn bounding_rect_test() {
381 let bounding_rect_xl =
382 Rect::new(coord! { x: -100., y: -200. }, coord! { x: 100., y: 200. });
383 let bounding_rect_sm = Rect::new(coord! { x: -10., y: -20. }, coord! { x: 10., y: 20. });
384 let bounding_rect_s2 = Rect::new(coord! { x: 0., y: 0. }, coord! { x: 20., y: 30. });
385 assert!(bounding_rect_xl.intersects(&bounding_rect_sm));
387 assert!(bounding_rect_sm.intersects(&bounding_rect_xl));
388 assert!(bounding_rect_sm.intersects(&bounding_rect_s2));
389 assert!(bounding_rect_s2.intersects(&bounding_rect_sm));
390 }
391 #[test]
392 fn rect_intersection_consistent_with_poly_intersection_test() {
393 let bounding_rect_xl =
394 Rect::new(coord! { x: -100., y: -200. }, coord! { x: 100., y: 200. });
395 let bounding_rect_sm = Rect::new(coord! { x: -10., y: -20. }, coord! { x: 10., y: 20. });
396 let bounding_rect_s2 = Rect::new(coord! { x: 0., y: 0. }, coord! { x: 20., y: 30. });
397
398 assert!(bounding_rect_xl.to_polygon().intersects(&bounding_rect_sm));
399 assert!(bounding_rect_xl.intersects(&bounding_rect_sm.to_polygon()));
400 assert!(
401 bounding_rect_xl
402 .to_polygon()
403 .intersects(&bounding_rect_sm.to_polygon())
404 );
405
406 assert!(bounding_rect_sm.to_polygon().intersects(&bounding_rect_xl));
407 assert!(bounding_rect_sm.intersects(&bounding_rect_xl.to_polygon()));
408 assert!(
409 bounding_rect_sm
410 .to_polygon()
411 .intersects(&bounding_rect_xl.to_polygon())
412 );
413
414 assert!(bounding_rect_sm.to_polygon().intersects(&bounding_rect_s2));
415 assert!(bounding_rect_sm.intersects(&bounding_rect_s2.to_polygon()));
416 assert!(
417 bounding_rect_sm
418 .to_polygon()
419 .intersects(&bounding_rect_s2.to_polygon())
420 );
421
422 assert!(bounding_rect_s2.to_polygon().intersects(&bounding_rect_sm));
423 assert!(bounding_rect_s2.intersects(&bounding_rect_sm.to_polygon()));
424 assert!(
425 bounding_rect_s2
426 .to_polygon()
427 .intersects(&bounding_rect_sm.to_polygon())
428 );
429 }
430 #[test]
431 fn point_intersects_line_test() {
432 let p0 = Point::new(2., 4.);
433 let line1 = Line::from([(2., 0.), (2., 5.)]);
435 let line2 = Line::from([(0., 6.), (1.5, 4.5)]);
437 let line3 = Line::from([(0., 6.), (3., 3.)]);
439 let line4 = Line::from([(1., 2.), (5., 3.)]);
441 let line5 = Line::from([(1., 5.), (5., 6.)]);
443 let line6 = Line::from([(1., 2.), (5., -3.)]);
445 let line7 = Line::from([(1., 6.), (5., 5.)]);
447 assert!(line1.intersects(&p0));
448 assert!(p0.intersects(&line1));
449 assert!(!line2.intersects(&p0));
450 assert!(!p0.intersects(&line2));
451 assert!(line3.intersects(&p0));
452 assert!(p0.intersects(&line3));
453 assert!(!line4.intersects(&p0));
454 assert!(!p0.intersects(&line4));
455 assert!(!line5.intersects(&p0));
456 assert!(!p0.intersects(&line5));
457 assert!(!line6.intersects(&p0));
458 assert!(!p0.intersects(&line6));
459 assert!(!line7.intersects(&p0));
460 assert!(!p0.intersects(&line7));
461 }
462 #[test]
463 fn line_intersects_line_test() {
464 let line0 = Line::from([(0., 0.), (3., 4.)]);
465 let line1 = Line::from([(2., 0.), (2., 5.)]);
466 let line2 = Line::from([(0., 7.), (5., 4.)]);
467 let line3 = Line::from([(0., 0.), (-3., -4.)]);
468 assert!(line0.intersects(&line0));
469 assert!(line0.intersects(&line1));
470 assert!(!line0.intersects(&line2));
471 assert!(line0.intersects(&line3));
472
473 assert!(line1.intersects(&line0));
474 assert!(line1.intersects(&line1));
475 assert!(!line1.intersects(&line2));
476 assert!(!line1.intersects(&line3));
477
478 assert!(!line2.intersects(&line0));
479 assert!(!line2.intersects(&line1));
480 assert!(line2.intersects(&line2));
481 assert!(!line1.intersects(&line3));
482 }
483 #[test]
484 fn line_intersects_linestring_test() {
485 let line0 = Line::from([(0., 0.), (3., 4.)]);
486 let linestring0 = LineString::from(vec![(0., 1.), (1., 0.), (2., 0.)]);
487 let linestring1 = LineString::from(vec![(0.5, 0.2), (1., 0.), (2., 0.)]);
488 assert!(line0.intersects(&linestring0));
489 assert!(!line0.intersects(&linestring1));
490 assert!(linestring0.intersects(&line0));
491 assert!(!linestring1.intersects(&line0));
492 }
493 #[test]
494 fn line_intersects_polygon_test() {
495 let line0 = Line::from([(0.5, 0.5), (2., 1.)]);
496 let poly0 = Polygon::new(
497 LineString::from(vec![(0., 0.), (1., 2.), (1., 0.), (0., 0.)]),
498 vec![],
499 );
500 let poly1 = Polygon::new(
501 LineString::from(vec![(1., -1.), (2., -1.), (2., -2.), (1., -1.)]),
502 vec![],
503 );
504 let poly2 = Polygon::new(
506 LineString::from(vec![(-1., -1.), (-1., 10.), (10., -1.), (-1., -1.)]),
507 vec![LineString::from(vec![
508 (0., 0.),
509 (3., 4.),
510 (3., 0.),
511 (0., 0.),
512 ])],
513 );
514 assert!(line0.intersects(&poly0));
515 assert!(poly0.intersects(&line0));
516
517 assert!(!line0.intersects(&poly1));
518 assert!(!poly1.intersects(&line0));
519
520 assert!(!line0.intersects(&poly2));
521 assert!(!poly2.intersects(&line0));
522 }
523 #[test]
524 fn rect_test_419() {
526 let a = Rect::new(
527 coord! {
528 x: 9.228515625,
529 y: 46.83013364044739,
530 },
531 coord! {
532 x: 9.2724609375,
533 y: 46.86019101567026,
534 },
535 );
536 let b = Rect::new(
537 coord! {
538 x: 9.17953,
539 y: 46.82018,
540 },
541 coord! {
542 x: 9.26309,
543 y: 46.88099,
544 },
545 );
546 assert!(a.intersects(&b));
547 assert!(b.intersects(&a));
548 }
549
550 #[test]
551 fn compile_test_geom_geom() {
552 let geom: Geometry<_> = Line::from([(0.5, 0.5), (2., 1.)]).into();
555 assert!(geom.intersects(&geom));
556 }
557
558 #[test]
559 fn exhaustive_compile_test() {
560 use geo_types::{Coord, GeometryCollection, Triangle};
561 let c = Coord { x: 0., y: 0. };
562 let pt: Point = Point::new(0., 0.);
563 let ls = line_string![(0., 0.).into(), (1., 1.).into()];
564 let multi_ls = MultiLineString::new(vec![ls.clone()]);
565 let ln: Line = Line::new((0., 0.), (1., 1.));
566
567 let poly = Polygon::new(LineString::from(vec![(0., 0.), (1., 1.), (1., 0.)]), vec![]);
568 let rect = Rect::new(coord! { x: 10., y: 20. }, coord! { x: 30., y: 10. });
569 let tri = Triangle::new(
570 coord! { x: 0., y: 0. },
571 coord! { x: 10., y: 20. },
572 coord! { x: 20., y: -10. },
573 );
574 let geom = Geometry::Point(pt);
575 let gc = GeometryCollection::new_from(vec![geom.clone()]);
576 let multi_point = MultiPoint::new(vec![pt]);
577 let multi_poly = MultiPolygon::new(vec![poly.clone()]);
578
579 let _ = c.intersects(&c);
580 let _ = c.intersects(&pt);
581 let _ = c.intersects(&ln);
582 let _ = c.intersects(&ls);
583 let _ = c.intersects(&poly);
584 let _ = c.intersects(&rect);
585 let _ = c.intersects(&tri);
586 let _ = c.intersects(&geom);
587 let _ = c.intersects(&gc);
588 let _ = c.intersects(&multi_point);
589 let _ = c.intersects(&multi_ls);
590 let _ = c.intersects(&multi_poly);
591
592 let _ = pt.intersects(&c);
593 let _ = pt.intersects(&pt);
594 let _ = pt.intersects(&ln);
595 let _ = pt.intersects(&ls);
596 let _ = pt.intersects(&poly);
597 let _ = pt.intersects(&rect);
598 let _ = pt.intersects(&tri);
599 let _ = pt.intersects(&geom);
600 let _ = pt.intersects(&gc);
601 let _ = pt.intersects(&multi_point);
602 let _ = pt.intersects(&multi_ls);
603 let _ = pt.intersects(&multi_poly);
604
605 let _ = ln.intersects(&c);
606 let _ = ln.intersects(&pt);
607 let _ = ln.intersects(&ln);
608 let _ = ln.intersects(&ls);
609 let _ = ln.intersects(&poly);
610 let _ = ln.intersects(&rect);
611 let _ = ln.intersects(&tri);
612 let _ = ln.intersects(&geom);
613 let _ = ln.intersects(&gc);
614 let _ = ln.intersects(&multi_point);
615 let _ = ln.intersects(&multi_ls);
616 let _ = ln.intersects(&multi_poly);
617
618 let _ = ls.intersects(&c);
619 let _ = ls.intersects(&pt);
620 let _ = ls.intersects(&ln);
621 let _ = ls.intersects(&ls);
622 let _ = ls.intersects(&poly);
623 let _ = ls.intersects(&rect);
624 let _ = ls.intersects(&tri);
625 let _ = ls.intersects(&geom);
626 let _ = ls.intersects(&gc);
627 let _ = ls.intersects(&multi_point);
628 let _ = ls.intersects(&multi_ls);
629 let _ = ls.intersects(&multi_poly);
630
631 let _ = poly.intersects(&c);
632 let _ = poly.intersects(&pt);
633 let _ = poly.intersects(&ln);
634 let _ = poly.intersects(&ls);
635 let _ = poly.intersects(&poly);
636 let _ = poly.intersects(&rect);
637 let _ = poly.intersects(&tri);
638 let _ = poly.intersects(&geom);
639 let _ = poly.intersects(&gc);
640 let _ = poly.intersects(&multi_point);
641 let _ = poly.intersects(&multi_ls);
642 let _ = poly.intersects(&multi_poly);
643
644 let _ = rect.intersects(&c);
645 let _ = rect.intersects(&pt);
646 let _ = rect.intersects(&ln);
647 let _ = rect.intersects(&ls);
648 let _ = rect.intersects(&poly);
649 let _ = rect.intersects(&rect);
650 let _ = rect.intersects(&tri);
651 let _ = rect.intersects(&geom);
652 let _ = rect.intersects(&gc);
653 let _ = rect.intersects(&multi_point);
654 let _ = rect.intersects(&multi_ls);
655 let _ = rect.intersects(&multi_poly);
656
657 let _ = tri.intersects(&c);
658 let _ = tri.intersects(&pt);
659 let _ = tri.intersects(&ln);
660 let _ = tri.intersects(&ls);
661 let _ = tri.intersects(&poly);
662 let _ = tri.intersects(&rect);
663 let _ = tri.intersects(&tri);
664 let _ = tri.intersects(&geom);
665 let _ = tri.intersects(&gc);
666 let _ = tri.intersects(&multi_point);
667 let _ = tri.intersects(&multi_ls);
668 let _ = tri.intersects(&multi_poly);
669
670 let _ = geom.intersects(&c);
671 let _ = geom.intersects(&pt);
672 let _ = geom.intersects(&ln);
673 let _ = geom.intersects(&ls);
674 let _ = geom.intersects(&poly);
675 let _ = geom.intersects(&rect);
676 let _ = geom.intersects(&tri);
677 let _ = geom.intersects(&geom);
678 let _ = geom.intersects(&gc);
679 let _ = geom.intersects(&multi_point);
680 let _ = geom.intersects(&multi_ls);
681 let _ = geom.intersects(&multi_poly);
682
683 let _ = gc.intersects(&c);
684 let _ = gc.intersects(&pt);
685 let _ = gc.intersects(&ln);
686 let _ = gc.intersects(&ls);
687 let _ = gc.intersects(&poly);
688 let _ = gc.intersects(&rect);
689 let _ = gc.intersects(&tri);
690 let _ = gc.intersects(&geom);
691 let _ = gc.intersects(&gc);
692 let _ = gc.intersects(&multi_point);
693 let _ = gc.intersects(&multi_ls);
694 let _ = gc.intersects(&multi_poly);
695
696 let _ = multi_point.intersects(&c);
697 let _ = multi_point.intersects(&pt);
698 let _ = multi_point.intersects(&ln);
699 let _ = multi_point.intersects(&ls);
700 let _ = multi_point.intersects(&poly);
701 let _ = multi_point.intersects(&rect);
702 let _ = multi_point.intersects(&tri);
703 let _ = multi_point.intersects(&geom);
704 let _ = multi_point.intersects(&gc);
705 let _ = multi_point.intersects(&multi_point);
706 let _ = multi_point.intersects(&multi_ls);
707 let _ = multi_point.intersects(&multi_poly);
708
709 let _ = multi_ls.intersects(&c);
710 let _ = multi_ls.intersects(&pt);
711 let _ = multi_ls.intersects(&ln);
712 let _ = multi_ls.intersects(&ls);
713 let _ = multi_ls.intersects(&poly);
714 let _ = multi_ls.intersects(&rect);
715 let _ = multi_ls.intersects(&tri);
716 let _ = multi_ls.intersects(&geom);
717 let _ = multi_ls.intersects(&gc);
718 let _ = multi_ls.intersects(&multi_point);
719 let _ = multi_ls.intersects(&multi_ls);
720 let _ = multi_ls.intersects(&multi_poly);
721
722 let _ = multi_poly.intersects(&c);
723 let _ = multi_poly.intersects(&pt);
724 let _ = multi_poly.intersects(&ln);
725 let _ = multi_poly.intersects(&ls);
726 let _ = multi_poly.intersects(&poly);
727 let _ = multi_poly.intersects(&rect);
728 let _ = multi_poly.intersects(&tri);
729 let _ = multi_poly.intersects(&geom);
730 let _ = multi_poly.intersects(&gc);
731 let _ = multi_poly.intersects(&multi_point);
732 let _ = multi_poly.intersects(&multi_ls);
733 let _ = multi_poly.intersects(&multi_poly);
734 }
735}