Source code for stactools.core.geometry
from functools import reduce
from typing import Any, Dict, List, Protocol
import rasterio.features
from shapely import Geometry
[docs]
def bounding_box(geom: Dict[str, Any]) -> List[float]:
"""Extracts and returns the bounding box of a GeoJSON geometry.
Args:
geom (dict): A GeoJSON Feature, GeoJSON FeatureCollection, GeoJSON geometry,
STAC Item, or STAC ItemCollection.
Returns:
list: A list of float values containing the bounding box of the GeoJSON
geometry in the format [min X, min Y, max X, max Y]
"""
return list(rasterio.features.bounds(geom))
[docs]
def mutual_intersection(geoms: List[Geometry]) -> Geometry:
"""Finds the mutual intersection of a set of geometries.
Args:
geoms (List[Geometry]): A non-empty list of geometries to intersect
Returns:
Geometry: The mutual intersection of all geometries
"""
assert len(geoms) > 0, "Must provide non-empty list of geometries"
return reduce(
lambda current, to_intersect: current.intersection(to_intersect),
geoms[1:],
geoms[0],
)
[docs]
class GeoInterface(Protocol):
"""A simple protocol for things that have a ``__geo_interface__`` method.
The ``__geo_interface__`` protocol is described `here
<https://gist.github.com/sgillies/2217756>`_, and is used within `shapely
<https://shapely.readthedocs.io/en/stable/manual.html>`_ to
extract geometries from objects.
"""
def __geo_interface__(self) -> Dict[str, Any]: ...