Source code for geetools.Geometry
"""Toolbox for the ``ee.Geometry`` class."""
from __future__ import annotations
import ee
from geetools.accessors import register_class_accessor
@register_class_accessor(ee.Geometry, "geetools")
[docs]
class GeometryAccessor:
"""Toolbox for the ``ee.Geometry`` class."""
def __init__(self, obj: ee.Geometry):
"""Initialize the Geometry class."""
self._obj = obj
[docs]
def keepType(self, type: str) -> ee.Geometry:
"""Only keep the geometries of the given type from a GeometryCollection.
Args:
type: The type of geometries to keep. Can be one of: Point, LineString, LineRing Polygon.
Returns:
.. code-block:: python
import ee
import geetools
ee.Initialize()
point0 = ee.Geometry.Point([0,0], proj="EPSG:4326")
point1 = ee.Geometry.Point([0,1], proj="EPSG:4326")
poly0 = point0.buffer(1, proj="EPSG:4326")
poly1 = point1.buffer(1, proj="EPSG:4326").bounds(proj="EPSG:4326")
line = ee.Geometry.LineString([point1, point0], proj="EPSG:4326")
multiPoly = ee.Geometry.MultiPolygon([poly0, poly1], proj="EPSG:4326")
geometryCol = ee.Algorithms.GeometryConstructors.MultiGeometry([multiPoly, poly0, poly1, point0, line], crs="EPSG:4326", geodesic=True, maxError=1)
geom = geometryCol.geetools.keepType('LineString')
print(geom.getInfo())
"""
# will raise an error if self is not a GeometryCollection
error_msg = "This method can only be used with GeometryCollections"
assert self._obj.type().getInfo() == "GeometryCollection", error_msg
def filterType(geom):
geom = ee.Geometry(geom)
return ee.Algorithms.If(geom.type().compareTo(type), None, geom)
self._obj
geometries = self._obj.geometries().map(filterType, True)
return getattr(ee.Geometry, "Multi" + type)(geometries, self._obj.projection())