Source code for eemont.geometry

import ee
import geopy
from geopy.geocoders import get_geocoder_for_service

def _extend_staticmethod_eeGeometry():
    """Decorator. Extends the ee.Geometry class with a static method."""
    return lambda f: (setattr(ee.geometry.Geometry,f.__name__,staticmethod(f)) or f)

[docs]@_extend_staticmethod_eeGeometry() def BBoxFromQuery(query,geocoder = "nominatim", **kwargs): '''Constructs an ee.Geometry describing a bounding box from a query submitted to a geodocer using the geopy package. Parameters ---------- query : str Address, query or structured query to geocode. geocoder : str, default = 'nominatim' Geocoder to use. One of 'nominatim' or 'arcgis'. Please visit https://geopy.readthedocs.io/ for more info. **kwargs : Keywords arguments for geolocator.geocode(). The user_agent argument is mandatory (this argument can be set as user_agent = 'my-gee-username' or user_agent = 'my-gee-app-name'). Please visit https://geopy.readthedocs.io/ for more info. Returns ------- ee.Geometry.Polygon Geometry describing a bounding box from the specified query. Examples -------- >>> import ee, eemont >>> ee.Initialize() >>> ee.Geometry.BBoxFromQuery('Seattle',user_agent = 'my-gee-eemont-query') ee.Geometry({ "functionInvocationValue": { "functionName": "GeometryConstructors.Polygon", "arguments": { "coordinates": { "constantValue": [ [ [ -122.45969600000001, 47.7341357 ], [ -122.45969600000001, 47.4810022 ], [ -122.224433, 47.4810022 ], [ -122.224433, 47.7341357 ] ] ] }, "geodesic": { "constantValue": false } } } }) See Also -------- PointFromQuery : Constructs an ee.Geometry describing a point from a query submitted to a geodocer using the geopy package. MultiPointFromQuery : Constructs an ee.Geometry describing a multi-point from a query submitted to a geodocer using the geopy package. ''' if geocoder in ['nominatim','arcgis']: cls = get_geocoder_for_service(geocoder) else: raise Exception('Invalid geocoder! Use one of "nominatim" or "arcgis".') geolocator = cls(**kwargs) location = geolocator.geocode(query) if location is None: raise Exception('No matches were found for your query!') else: if geocoder == 'nominatim': BBox = location.raw['boundingbox'] return ee.Geometry.BBox(float(BBox[2]),float(BBox[0]),float(BBox[3]),float(BBox[1])) elif geocoder == 'arcgis': BBox = location.raw['extent'] return ee.Geometry.BBox(BBox['xmin'],BBox['ymin'],BBox['xmax'],BBox['ymax']) else: raise Exception('Invalid geocoder! Use one of "nominatim" or "arcgis".')
[docs]@_extend_staticmethod_eeGeometry() def PointFromQuery(query,geocoder = "nominatim", **kwargs): '''Constructs an ee.Geometry describing a point from a query submitted to a geodocer using the geopy package. This returns exactly one pair of coordinates. Parameters ---------- query : str Address, query or structured query to geocode. geocoder : str, default = 'nominatim' Geocoder to use. Please visit https://geopy.readthedocs.io/ for more info. **kwargs : Keywords arguments for geolocator.geocode(). The user_agent argument is mandatory (this argument can be set as user_agent = 'my-gee-username' or user_agent = 'my-gee-app-name'). Please visit https://geopy.readthedocs.io/ for more info. Returns ------- ee.Geometry.Point Geometry describing a point from the specified query. Examples -------- >>> import ee, eemont >>> ee.Initialize() >>> ee.Geometry.PointFromQuery('Mt. Rainier, USA',user_agent = 'my-gee-eemont-query') ee.Geometry({ "functionInvocationValue": { "functionName": "GeometryConstructors.Point", "arguments": { "coordinates": { "constantValue": [ -121.757682, 46.8521484 ] } } } }) See Also -------- BBoxFromQuery : Constructs an ee.Geometry describing a bounding box from a query submitted to a geodocer using the geopy package. MultiPointFromQuery : Constructs an ee.Geometry describing a multi-point from a query submitted to a geodocer using the geopy package. ''' cls = get_geocoder_for_service(geocoder) geolocator = cls(**kwargs) location = geolocator.geocode(query) if location is None: raise Exception('No matches were found for your query!') else: return ee.Geometry.Point([location.longitude,location.latitude])
[docs]@_extend_staticmethod_eeGeometry() def MultiPointFromQuery(query,geocoder = "nominatim", **kwargs): '''Constructs an ee.Geometry describing a multi-point from a query submitted to a geodocer using the geopy package. This returns all pairs of coordinates retrieved by the query. Parameters ---------- query : str Address, query or structured query to geocode. geocoder : str, default = 'nominatim' Geocoder to use. Please visit https://geopy.readthedocs.io/ for more info. **kwargs : Keywords arguments for geolocator.geocode(). The user_agent argument is mandatory (this argument can be set as user_agent = 'my-gee-username' or user_agent = 'my-gee-app-name'). Please visit https://geopy.readthedocs.io/ for more info. Returns ------- ee.Geometry.MultiPoint Geometry describing a multi-point from the specified query. Examples -------- >>> import ee, eemont >>> ee.Initialize() >>> ee.Geometry.MultiPointFromQuery('Mt. Rainier, USA',user_agent = 'my-gee-eemont-query') ee.Geometry({ "functionInvocationValue": { "functionName": "GeometryConstructors.MultiPoint", "arguments": { "coordinates": { "constantValue": [ [ -121.757682, 46.8521484 ], [ -76.9649751, 38.9415 ], [ -97.78689, 30.154197 ], [ -84.130098, 39.863452 ] ] } } } }) See Also -------- BBoxFromQuery : Constructs an ee.Geometry describing a bounding box from a query submitted to a geodocer using the geopy package. PointFromQuery : Constructs an ee.Geometry describing a point from a query submitted to a geodocer using the geopy package. ''' cls = get_geocoder_for_service(geocoder) geolocator = cls(**kwargs) locations = geolocator.geocode(query,exactly_one = False) if locations is None: raise Exception('No matches were found for your query!') else: coords = [] for location in locations: coords.append([location.longitude,location.latitude]) return ee.Geometry.MultiPoint(coords)