Source code for geoglows.streams

import numpy as np

from .data import metadata_tables

__all__ = ['river_to_vpu', 'latlon_to_river', 'river_to_latlon', ]


[docs] def river_to_vpu(river_id: int, metadata_table_path: str = None) -> int: """ Gives the VPU number for a given River ID number Args: river_id (int): a 9 digit integer that is a valid GEOGLOWS River ID number metadata_table_path (str): optional path to the local metadata table Returns: int: a 3 digit integer that is the VPU number for the given River ID number """ return ( metadata_tables(columns=['LINKNO', 'VPUCode'], metadata_table_path=metadata_table_path) .loc[lambda x: x['LINKNO'] == river_id, 'VPUCode'] .values[0] )
[docs] def latlon_to_river(lat: float, lon: float, metadata_table_path: str = None) -> int: """ Gives the River ID number whose outlet is nearest the given lat and lon Args: lat (float): a latitude lon (float): a longitude metadata_table_path (str): optional path to the local metadata table Returns: int: a 9 digit integer that is a valid GEOGLOWS River ID number """ df = metadata_tables(columns=['LINKNO', 'lat', 'lon'], metadata_table_path=metadata_table_path) df['dist'] = ((df['lat'] - lat) ** 2 + (df['lon'] - lon) ** 2) ** 0.5 return df.loc[lambda x: x['dist'] == df['dist'].min(), 'LINKNO'].values[0]
[docs] def river_to_latlon(river_id: int, metadata_table_path: str = None) -> np.ndarray: """ Gives the lat and lon of the outlet of the river with the given River ID number Args: river_id (int): a 9 digit integer that is a valid GEOGLOWS River ID number metadata_table_path (str): optional path to the local metadata table Returns: np.ndarray: a numpy array of floats, [lat, lon] """ return ( metadata_tables(columns=['LINKNO', 'lat', 'lon'], metadata_table_path=metadata_table_path) .loc[lambda x: x['LINKNO'] == river_id, ['lat', 'lon']] .values[0] )