Source code for petrodc.usgs_eros.elevation

import requests
import pandas as pd
import io


[docs]def elevation(lat=(40, 41), lon=(-65, -60)): """ Function to request data from SRTM30. Bathymetry / Topography (SRTM30) is a global bathymetry/topography data product distributed by the USGS EROS data center. The data product has a resolution of 30 seconds (roughly 1 km). Keyword Arguments: lat (tuple): with min and max latitude lon (tuple): with min and max longitude Returns: ElevationSurface object. - Attributes: df (pandas dataframe): lat, lon and elev columns - Methods: plot: generate a 3D surface plot """ return ElevationSurface(lat, lon)
def point_elev(lat, lon): minlat = lat - 0.001 maxlat = lat + 0.001 minlon = lon - 0.001 maxlon = lon + 0.001 c = elevation(lat=(minlat, maxlat), lon=(minlon, maxlon)) znew = round(c.df.elev.mean()) return znew class ElevationSurface(object): """ 3D surface object. Attributes: df (pandas dataframe): lat, lon and elev columns Methods: plot: generate a 3D surface plot """ def __init__(self, lat, lon): # Define the domain of interest minlat = lat[0] maxlat = lat[1] minlon = lon[0] maxlon = lon[1] url = 'http://coastwatch.pfeg.noaa.gov/erddap/griddap/usgsCeSrtm30v6.csv?topo[(' + str(maxlat) + '):1:(' + \ str(minlat) + ')][(' + str(minlon) + '):1:(' + str(maxlon) + ')]' s = requests.get(url).content df = pd.read_csv(io.StringIO(s.decode('utf-8')), header=0) df.reset_index(drop=True) df.drop(0, inplace=True) df = df[['latitude', 'longitude', 'topo']].astype(float) df.rename(columns={'latitude': 'lat', 'longitude': 'lon', 'topo': 'elev'}, inplace=True) self.df = df def plot(self): import plotly.graph_objects as go from numpy import array, unique lon_u = unique(self.df.lon) lat_u = unique(self.df.lat) elev = array([self.df.elev[i: i + len(lon_u)] for i in range(0, len(self.df.elev), len(lon_u))]) fig = go.Figure(data=[go.Surface(z=elev, x=lon_u, y=lat_u)]) fig.update_layout(scene=dict( xaxis_title='Lon, °', yaxis_title='Lat, °', zaxis_title='Elevation, m')) return fig