Source code for pygeoprocessing.routing.helper_functions

import numpy
from osgeo import gdal

from ..geoprocessing import get_raster_info
from ..geoprocessing import raster_calculator
from ..geoprocessing_core import DEFAULT_GTIFF_CREATION_TUPLE_OPTIONS


[docs]def extract_streams_d8( flow_accum_raster_path_band, flow_threshold, target_stream_raster_path, raster_driver_creation_tuple=DEFAULT_GTIFF_CREATION_TUPLE_OPTIONS): """Extract D8 streams based on a flow accumulation threshold. Creates an unsigned byte raster where pixel values of 1 indicate the presence of a stream and pixel values of 0 indicate the absence of a stream. Any flow accumulation pixels greater than ``flow_threshold`` are considered stream pixels. Nodata values found in the input flow accumulation raster propagate through to the target stream raster. Args: flow_accum_raster_path_band (tuple): A (path, band) tuple indicating the path to a D8 flow accumulation raster and the band index to use. flow_threshold (number): The flow threshold. Flow accumulation values greater than this threshold are considered stream pixels, values less than this threshold are non-stream pixels. target_stream_raster_path (string): Where the target streams raster should be written. raster_driver_creation_tuple (tuple): A tuple where the first element is the GDAL driver name of the target raster and the second element is an iterable of raster creation options for the selected driver. Returns: ``None`` """ flow_accum_nodata = get_raster_info( flow_accum_raster_path_band[0])['nodata'][ flow_accum_raster_path_band[1]-1] target_nodata = 255 def _threshold_streams(flow_accum): out_matrix = numpy.full(flow_accum.shape, target_nodata, dtype=numpy.uint8) valid_pixels = numpy.ones(flow_accum.shape, dtype=bool) if flow_accum_nodata is not None: valid_pixels = ~numpy.isclose(flow_accum, flow_accum_nodata) over_threshold = flow_accum > flow_threshold out_matrix[valid_pixels & over_threshold] = 1 out_matrix[valid_pixels & ~over_threshold] = 0 return out_matrix raster_calculator( [flow_accum_raster_path_band], _threshold_streams, target_stream_raster_path, gdal.GDT_Byte, target_nodata)