CurviRiver takes as input a Polygon of a river segment and generates a 2/3D curvilinear mesh that can be used for hydrodynamic or hydrological modeling. The mesh is generated in the following main steps:
- Determining the centerline of the input Polygon using Voroni diagram and Dijkstra's algorithm,
- Smoothing the generated centerline with a B-spline curve,
- Computing the tangent angles of the centerline at each point along the centerline and generating cross-sections perpendicular to the centerline at given intervals,
- Generating a 2D mesh from vertices of the cross-sections,
- Generating a 3D mesh if depth data is provided, by determining the depth of 2D mesh vertices from the depth data using Inverse Distance Weighting (IDW).
You can install CurviRiver using pip
:
$ pip install curviriver
or using conda
(mamba
):
$ conda install -c conda-forge curviriver
We demonstrate capabilities of CurviRiver by generating a curvilinear mesh along a portion of the Columbia River and interpolating eHydro topobathy data on to the generated mesh vertices. Please visit the example gallery for more examples.
First, we use PyGeoHydro
to retrieve eHydro data for a part of the Columbia River that topobathy data are
available. We get both the survey outline and the bathymetry data.
Then, we use the survey outline polygon to generate a curvilinear mesh.
We use the poly_segmentize
function for this purpose that has two
parameters: Spacing in streamwise direction and number of points in
cross-stream direction. The function returns a geopandas.GeoSeries
of the cross-sections, vertices of which are the mesh points.
from pygeohydro import EHydro
import curviriver as cr
ehydro = EHydro("outlines")
geom = ehydro.survey_grid.loc[ehydro.survey_grid["OBJECTID"] == 210, "geometry"].iloc[0]
outline = ehydro.bygeom(geom, ehydro.survey_grid.crs)
poly = outline.convex_hull.unary_union
spacing_streamwise = 2000
xs_npts = 5
stream = cr.poly_segmentize(poly, outline.crs, spacing_streamwise, xs_npts)
Contributions are very welcomed. Please read CONTRIBUTING.rst file for instructions.
The work for this project is funded by USGS through Water Resources Research Institutes (WRRI).