Source code for pygeohydro.helpers

"""Some helper function for PyGeoHydro."""
from typing import Any, Dict

import numpy as np
import pandas as pd
from defusedxml import cElementTree as ET
from pygeoogc import RetrySession


[docs]def nlcd_helper() -> Dict[str, Any]: """Get legends and properties of the NLCD cover dataset. Notes ----- The following references have been used: - https://github.com/jzmiller1/nlcd - https://www.mrlc.gov/data-services-page - https://www.mrlc.gov/data/legends/national-land-cover-database-2016-nlcd2016-legend """ url = ( "https://www.mrlc.gov/downloads/sciweb1/shared/mrlc/metadata/" + "NLCD_2016_Land_Cover_Science_product_L48.xml" ) r = RetrySession().get(url) root = ET.fromstring(r.content) clist = root[4][1][1].text.split("\n")[2:] _colors = [i.split() for i in clist] colors = {int(c): (float(r), float(g), float(b)) for c, r, g, b in _colors} classes = { root[4][0][3][i][0][0].text: root[4][0][3][i][0][1].text.split("-")[0].strip() for i in range(3, len(root[4][0][3])) } nlcd_meta = { "impervious_years": [2016, 2011, 2006, 2001], "canopy_years": [2016, 2011], "cover_years": [2016, 2013, 2011, 2008, 2006, 2004, 2001], "classes": classes, "categories": { "Unclassified": ("0"), "Water": ("11", "12"), "Developed": ("21", "22", "23", "24"), "Barren": ("31",), "Forest": ("41", "42", "43", "45", "46"), "Shrubland": ("51", "52"), "Herbaceous": ("71", "72", "73", "74"), "Planted/Cultivated": ("81", "82"), "Wetlands": ("90", "95"), }, "roughness": { "11": 0.001, "12": 0.022, "21": 0.0404, "22": 0.0678, "23": 0.0678, "24": 0.0404, "31": 0.0113, "41": 0.36, "42": 0.32, "43": 0.4, "45": 0.4, "46": 0.24, "51": 0.24, "52": 0.4, "71": 0.368, "72": np.nan, "81": 0.325, "82": 0.16, "90": 0.086, "95": 0.1825, }, "colors": colors, } return nlcd_meta
[docs]def nwis_errors() -> pd.DataFrame: """Get error code lookup table for USGS sites that have daily values.""" return pd.read_html("https://waterservices.usgs.gov/rest/DV-Service.html")[0]