------------------
* A new submodule, ``pygeoprocessing.kernels`` has been added to facilitate the
creation of kernel rasters needed for calls to
``pygeoprocessing.convolve_2d``. Functions for creating common decay kernels
have been added, along with functions to facilitate the creation of
distance-based kernels using a user-defined function
(``pygeoprocessing.create_kernel``) and to facilitate the creation of kernels
using custom 2D numpy arrays, such as those commonly used in image processing
(``pygeoprocessing.kernel_from_numpy_array``).
https://github.com/natcap/pygeoprocessing/issues/268
* Logging across functions in ``pygeoprocessing.geoprocessing`` now correctly
reports the function that it's being called from rather than ``<lambda>``.
https://github.com/natcap/pygeoprocessing/issues/300
* The function ``pygeoprocessing.reproject_vector`` now accepts an optional
parameter ``layer_name`` to allow the target vector layer name to be defined
by the user. If the user does not provide a ``layer_name``, the layer name
will be copied from the source vector.
https://github.com/natcap/pygeoprocessing/issues/301
* Implement the proposed new function ``pygeoprocessing.raster_reduce``, a
wrapper around ``pygeoprocessing.iterblocks``
(https://github.com/natcap/pygeoprocessing/issues/285)
* Nodata value checking in ``pygeoprocessing.routing`` now correctly handles
comparison of ``nan`` values. This is explicitly tested in
``pygeoprocessing.routing.fill_pits``, but should also improve the
experience of other routing functions as well.
https://github.com/natcap/pygeoprocessing/issues/248
* Added a function to build overviews for a raster,
``pygeoprocessing.build_overviews``. Related to this,
``pygeoprocessing.get_raster_info()`` now includes an ``'overviews'`` key
listing the pixel dimensions of each overview layer in a raster.
https://github.com/natcap/pygeoprocessing/issues/280
* Added a D8 stream extraction function at
``pygeoprocessing.routing.extract_streams_d8`` which takes a D8 flow
accumulation raster and a flow accumulation threshold, setting all pixels
with accumulation above that threshold to 1 and all other valid pixels to 0.
https://github.com/natcap/pygeoprocessing/issues/272
* Adding a new function, ``pygeoprocessing.create_raster_from_bounding_box``,
that enables the creation of a new raster from a bounding box.
https://github.com/natcap/pygeoprocessing/issues/276
* Win32 wheels of PyGeoprocessing are no longer created through our GitHub
Actions workflows and will no longer be produced or distributed as part of
our release checklist. For details (and metrics!) see:
https://github.com/natcap/pygeoprocessing/issues/232