Source code for ecoscope.base._dataclasses
import datetime
import typing
from dataclasses import dataclass, field
import geopandas
import shapely
import shapely.geometry
[docs]@dataclass
class RelocsCoordinateFilter:
"""Filter parameters for filtering get_fixes based on X/Y coordinate ranges or specific coordinate values"""
min_x: float = -180.0
max_x: float = 180.0
min_y: float = -90.0
max_y: float = 90.0
filter_point_coords: typing.Union[typing.List[typing.List[float]], geopandas.GeoSeries] = field(
default_factory=[[0.0, 0.0]]
)
[docs] def __post_init__(self):
if isinstance(self.filter_point_coords, list):
self.filter_point_coords = geopandas.GeoSeries(
shapely.geometry.Point(coord) for coord in self.filter_point_coords
)
[docs]@dataclass
class RelocsDateRangeFilter:
"""
Filter parameters for filtering based on a datetime range
"""
start: datetime.datetime
end: datetime.datetime
[docs]@dataclass
class RelocsSpeedFilter:
"""
Filter parameters for filtering based on the speed needed to move from one fix to the next
"""
max_speed_kmhr: float = float("inf")
temporal_order: str = "ASC"
[docs]@dataclass
class RelocsDistFilter:
"""
Filter based on the distance between consecutive fixes. Fixes are filtered to the range [min_dist_km, max_dist_km].
"""
min_dist_km: float = 0.0
max_dist_km: float = float("inf")
temporal_order: str = "ASC"
[docs]@dataclass
class TrajSegFilter:
"""
Class filtering a set of trajectory segment segments
"""
min_length_meters: float = 0.0
max_length_meters: float = float("inf")
min_time_secs: float = 0.0
max_time_secs: float = float("inf")
min_speed_kmhr: float = 0.0
max_speed_kmhr: float = float("inf")