API Documentation#
Background#
The API (not a rest API, more of an SDK) is a set of python classes designed for easy and standardized access to the database data.
The classes can both describe what data is available, and return data in a GeoPandas dataframe.
Components#
There are two main API classes for data access.
from snowexsql.api import PointMeasurements, LayerMeasurements
PointMeasurements
gives access to the PointData (depths, GPR, etc), and
LayerMeasurements
gives access to the LayerData (pits, etc).
Both of the classes have the same methods, although they access different tables in the database.
The primary methods for accessing data are .from_area
and
.from_filter
. Both of these methods return a GeoPandas dataframe.
.from_filter#
The .from_filter
is the simpler of the two search methods. It takes in
a variety of key word args (kwargs) and returns a dataset that meets
all of the criteria.
df = LayerMeasurements.from_filter(
type="density",
site_name="Boise River Basin",
limit=1000
)
In this example, we filter to all the layer measurements of density that were taken in the Boise River Basin, and we limit to the top 1000 measurements.
Each kwarg (except date) can take in a list or a single value so you could change
this to site_name=["Boise River Basin", "Grand Mesa"]
To find what kwargs are allowed, we can check the class
LayerMeasurements.ALLOWED_QRY_KWARGS
For LayerMeasurements
this will return
["site_name", "site_id", "date", "instrument", "observers", "type", "utm_zone", "pit_id", "date_greater_equal", "date_less_equal"]
so we can filter by any of these as inputs to the function.
Notice `limit` is not specified here. Limit is in the SPECIAL_KWARGS
and gets handled at the end of the query.
Notice `date_greater_equal` and `date_less_equal` for filtering the date parameter using >= and <= logic.
To find what values are allowed for each, we can check the propeties of the
class. Both LayerMeasurements
and PointMeasurements
have
the following properties.
all_site_names
all_types
all_dates
all_observers
all_instruments
So you can find all the instruments for filtering like LayerMeasurements().all_instruments
.
Note - these must be called from an instantiated class like shown earlier
in this line.
.from_area#
The signature for .from_area
looks like this
def from_area(cls, shp=None, pt=None, buffer=None, crs=26912, **kwargs):
It is a class method, so it does not need an instantiated class.
The **kwargs
argument takes the same inputs as the from_filter
function.
The big difference is that from area will filter to results either within
shp
(a shapely polygon) or within buffer
radius
around pt
(a shapely point).
Large Query Exception and Limit#
By default, if more than 1000 records will be returned, and no limit
is provided. The query will fail. This is intentional so that we are aware
of large queries. If you understand your query will be large and need
more than 1000 records returned, add a limit
kwarg to your query
with a value greater than the number you need returned.
This will override the default behavior and return as many records as
you requested.