geowatch.gis.elevation module¶
Tools for accessing querying for elevation data.
- class geowatch.gis.elevation.ElevationDatabase[source]¶
Bases:
objectAn object that might use various backends to query elevation for a given latitude and longitude.
- class geowatch.gis.elevation.ConstantElevationDatabase(const)[source]¶
Bases:
ElevationDatabaseFallback compatibility API when no elevation information is available
- class geowatch.gis.elevation.OpenElevationDatabase[source]¶
Bases:
ElevationDatabaseUse open-elevation to query the elevation for a lat/lon point.
This issues a web request, so it can be slow.
- Parameters:
lat (float) – degrees in latitude
lon (float) – degrees in longitude
cache (bool) – if True uses on-disk caching
attempts (int) – number of attempts before giving up
verbose (int) – verbosity flag
- Returns:
elevation in meters
- Return type:
References
https://gis.stackexchange.com/questions/338392/getting-elevation-for-multiple-lat-long-coordinates-in-python https://gis.stackexchange.com/questions/212106/seeking-alternative-to-google-maps-elevation-api https://open-elevation.com/ https://www.freemaptools.com/elevation-finder.htm
Example
>>> # xdoctest: +REQUIRES(--network) >>> # xdoctest: +REQUIRES(--slow) >>> from geowatch.gis.elevation import * # NOQA >>> lat = 37.65026538818887 >>> lon = 128.81096081618637 >>> eldb = OpenElevationDatabase() >>> elevation = eldb.query(lat, lon, verbose=3) >>> print('elevation = {!r}'.format(elevation)) elevation = 449
- class geowatch.gis.elevation.DEM_Collection(dem_paths)[source]¶
Bases:
ElevationDatabaseManage a collection of DEM geotiffs
Example
>>> # xdoctest: +REQUIRES(--network) >>> # xdoctest: +REQUIRES(--slow) >>> # Use the gtop30 DEM dataset from GIRDER to find elevation. >>> from geowatch.gis.elevation import * # NOQA >>> dems = DEM_Collection.gtop30() >>> lat, lon = (37.7455555555556, 128.780555555556) >>> print(dems.query(lat, lon)) 499.0
>>> # Running one query on the CI is good enough >>> # xdoctest: +REQUIRES(--slow) >>> # xdoctest: +REQUIRES(--slow) >>> lat, lon = (37.7280555555556, 129.008888888889) >>> print(dems.query(lat, lon)) 0 >>> lat, lon = (37.6947222222222, 129.008888888889) >>> print(dems.query(lat, lon)) 95.0 >>> lat, lon = (37.7127777777778, 128.780555555556) >>> print(dems.query(lat, lon)) 452.0 >>> lat, lon = (0, 0) >>> print(dems.query(lat, lon)) 0 >>> lon_basis = np.linspace(-175, 175, 100) >>> lat_basis = np.linspace(-85, 85, 100) >>> lats_, lons_ = np.meshgrid(lat_basis, lon_basis) >>> lats = lats_.ravel() >>> lons = lons_.ravel() >>> elevations = dems.query(lats, lons)
- geowatch.gis.elevation.ensure_girder_gtop30_elevation_maps()[source]¶
Ensure that we have the GTOP30 Digital Elevation Maps (DEMS) available locally.
References
https://data.kitware.com/#collection/59eb64168d777f31ac6477e7/folder/59fb784d8d777f31ac6480fb https://www.google.com/url?sa=j&url=https%3A%2F%2Fwww.usgs.gov%2Fcenters%2Feros%2Fscience%2Fusgs-eros-archive-digital-elevation-global-30-arc-second-elevation-gtopo30%3Fqt-science_center_objects%3D0%23qt-science_center_objects&uct=1599876275&usg=jBvv8w64RCBJd2SyQA3kUtKhMQ4.&source=chat