|
1 | | -use super::{impl_covers_from_relate, Covers}; |
2 | | -use crate::geometry::*; |
| 1 | +use super::{Covers, impl_covers_from_intersects, impl_covers_from_relate}; |
| 2 | +use crate::{Contains, HasDimensions, geometry::*}; |
3 | 3 | use crate::{GeoFloat, GeoNum}; |
4 | 4 |
|
5 | | -impl<T> Covers<Coord<T>> for LineString<T> |
| 5 | +impl_covers_from_intersects!(LineString<T>, [Point<T>, MultiPoint<T>]); |
| 6 | + |
| 7 | +impl<T> Covers<Line<T>> for LineString<T> |
6 | 8 | where |
7 | | - T: GeoFloat, |
8 | | - Self: Covers<Point<T>>, |
| 9 | + T: GeoNum, |
9 | 10 | { |
10 | | - fn covers(&self, rhs: &Coord<T>) -> bool { |
11 | | - self.covers(&Point::new(rhs.x, rhs.y)) |
| 11 | + fn covers(&self, rhs: &Line<T>) -> bool { |
| 12 | + if rhs.start == rhs.end { |
| 13 | + self.covers(&rhs.start) |
| 14 | + } else { |
| 15 | + self.contains(rhs) |
| 16 | + } |
12 | 17 | } |
13 | 18 | } |
14 | | -impl_covers_from_relate!(LineString<T>, [Point<T>, MultiPoint<T>]); |
15 | | -impl_covers_from_relate!(LineString<T>, [Line<T>]); |
16 | | -impl_covers_from_relate!(LineString<T>, [ LineString<T>, MultiLineString<T>]); |
17 | | -impl_covers_from_relate!(LineString<T>, [ Rect<T>, Triangle<T>]); |
18 | | -impl_covers_from_relate!(LineString<T>, [Polygon<T>, MultiPolygon<T>]); |
19 | | -impl_covers_from_relate!(LineString<T>, [Geometry<T>, GeometryCollection<T>]); |
20 | 19 |
|
21 | | -impl<T> Covers<Coord<T>> for MultiLineString<T> |
| 20 | +impl<T> Covers<LineString<T>> for LineString<T> |
22 | 21 | where |
23 | | - T: GeoFloat, |
24 | | - Self: Covers<Point<T>>, |
| 22 | + T: GeoNum, |
25 | 23 | { |
26 | | - fn covers(&self, rhs: &Coord<T>) -> bool { |
27 | | - self.covers(&Point::new(rhs.x, rhs.y)) |
| 24 | + fn covers(&self, rhs: &LineString<T>) -> bool { |
| 25 | + if self.is_empty() || rhs.is_empty() { |
| 26 | + return false; |
| 27 | + } |
| 28 | + rhs.lines().all(|l| self.covers(&l)) |
28 | 29 | } |
29 | 30 | } |
30 | | -impl_covers_from_relate!(MultiLineString<T>, [Point<T>, MultiPoint<T>]); |
31 | | -impl_covers_from_relate!(MultiLineString<T>, [Line<T>]); |
32 | | -impl_covers_from_relate!(MultiLineString<T>, [ LineString<T>, MultiLineString<T>]); |
33 | | -impl_covers_from_relate!(MultiLineString<T>, [ Rect<T>, Triangle<T>]); |
34 | | -impl_covers_from_relate!(MultiLineString<T>, [Polygon<T>, MultiPolygon<T>]); |
35 | | -impl_covers_from_relate!(MultiLineString<T>, [Geometry<T>, GeometryCollection<T>]); |
| 31 | + |
| 32 | +impl_covers_from_relate!(LineString<T>, [ |
| 33 | +MultiLineString<T>, |
| 34 | +Rect<T>, Triangle<T>, |
| 35 | +Polygon<T>, MultiPolygon<T>, |
| 36 | +Geometry<T>, GeometryCollection<T> |
| 37 | +]); |
| 38 | + |
| 39 | +impl_covers_from_intersects!(MultiLineString<T>, [Point<T>, MultiPoint<T>]); |
| 40 | +impl_covers_from_relate!(MultiLineString<T>, [ |
| 41 | +Line<T>, |
| 42 | +LineString<T>, MultiLineString<T>, |
| 43 | +Rect<T>, Triangle<T>, |
| 44 | +Polygon<T>, MultiPolygon<T>, |
| 45 | +Geometry<T>, GeometryCollection<T> |
| 46 | +]); |
0 commit comments