Source code for bmi_topography.bbox
from collections.abc import Iterable
from typing import Tuple
[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(
"lower left coordinate ({0}) must have two elements".format(
self.lower_left
)
)
if not isinstance(self.upper_right, Iterable) or len(self.upper_right) != 2:
raise ValueError(
"upper right coordinate ({0}) must have two elements".format(
self.upper_right
)
)
if self.south > 90 or self.south < -90:
raise ValueError(
"south coordinate ({0}) must be in [-90,90]".format(self.south)
)
if self.north > 90 or self.north < -90:
raise ValueError(
"north coordinate ({0}) must be in [-90,90]".format(self.north)
)
if self.south > self.north:
raise ValueError(
"south coordinate ({0}) must be less than north ({1})".format(
self.south, self.north
)
)
if self.west > 180 or self.west < -180:
raise ValueError(
"west coordinate ({0}) must be in [-180,180]".format(self.west)
)
if self.east > 180 or self.east < -180:
raise ValueError(
"east coordinate ({0}) must be in [-180,180]".format(self.east)
)
if self.west > self.east:
raise ValueError(
"west coordinate ({0}) must be less than east ({1})".format(
self.west, 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 = "[{0}, {1}]".format(self.lower_left, self.upper_right)
return s