Source code for ecoscope.base._dataclasses
import datetime
import uuid
from dataclasses import dataclass
from typing import Any, Union
import geopandas # type: ignore[import-untyped]
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: list[list[float]] | geopandas.GeoSeries | None = None
[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
)
if self.filter_point_coords is None:
self.filter_point_coords = [[0.0, 0.0]]
[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")
[docs]
@dataclass
class SpatialFeature:
"""
A spatial geometry with an associated name and unique ID. Becomes a useful construct in several movdata calculations
"""
name: str = ""
unique_id: Any = uuid.uuid4()
geometry: Any = None
[docs]
@dataclass
class ProximityProfile:
spatial_features: list[SpatialFeature]
RelocsFilterType = Union[RelocsCoordinateFilter, RelocsDateRangeFilter, RelocsSpeedFilter, RelocsDistFilter]