Source code for bmi_topography.bbox

from collections.abc import Iterable


[docs] class BoundingBox: """Represent a simple latitude-longitude bounding box. Examples -------- Create a bounding box: >>> from bmi_topography import BoundingBox >>> bbox = BoundingBox((33, 111), (44, 122)) >>> print(bbox) [(33, 111), (44, 122)] """ def __init__(self, lower_left: tuple[float], upper_right: tuple[float]) -> None: self._lower_left = lower_left self._upper_right = upper_right if not isinstance(self.lower_left, Iterable) or len(self.lower_left) != 2: raise ValueError( f"lower left coordinate ({self.lower_left}) must have two elements" ) if not isinstance(self.upper_right, Iterable) or len(self.upper_right) != 2: raise ValueError( f"upper right coordinate ({self.upper_right}) must have two elements" ) if self.south > 90 or self.south < -90: raise ValueError(f"south coordinate ({self.south}) must be in [-90,90]") if self.north > 90 or self.north < -90: raise ValueError(f"north coordinate ({self.north}) must be in [-90,90]") if self.south > self.north: raise ValueError( f"south coordinate ({self.south}) must be less than north ({self.north})" ) if self.west > 180 or self.west < -180: raise ValueError(f"west coordinate ({self.west}) must be in [-180,180]") if self.east > 180 or self.east < -180: raise ValueError(f"east coordinate ({self.east}) must be in [-180,180]") if self.west > self.east: raise ValueError( f"west coordinate ({self.west}) must be less than east ({self.east})" ) @property def lower_left(self): """The southwest corner of the box, given by tuple of *(south, west)*.""" return self._lower_left @property def upper_right(self): """The northeast corner of the box, given by tuple of *(north, east)*.""" return self._upper_right @property def south(self): return self.lower_left[0] @property def west(self): return self.lower_left[1] @property def north(self): return self.upper_right[0] @property def east(self): return self.upper_right[1] def __str__(self): s = f"[{self.lower_left}, {self.upper_right}]" return s