2D-gridgeneratie
Voor het genereren van grids maakt D-HyDAMO gebruik van de MeshKernel bibliotheek. Via meshkernel kunnen zowel driehoekige als rechthoekige grids gegenereerd en bewerkt worden. Een voordeel ten opzichte van de methode die werd gebruikt in delft3dfmpy (gridgeom), is dat MeshKernel in Linux werkt en dezelfde resultaten geeft als in Windows. Daarnaast wordt meshkernel ook gebruikt voor het genereren en bewerken van grids in de GUI van D-HYDRO.
Gridgeneratie en bewerkingen gaan via het aanroepen van functies in de workflow / het notebook. Hieronder geven we steeds de mogelijkheden van de functie (de zogenaamde docstring) en een fictief voorbeeld. Voor realistische toepassingen verwijzen we naar het notebook.
Genereren van een vierkant grid binnen een polygoon
Het genereren van een rechthoekig grid gaat via de functie “Mesh2d_add_rectilinear”.
def mesh2d_add_rectilinear(
network: Network,
polygon: Union[Polygon, MultiPolygon],
dx: float,
dy: float,
deletemeshoption: int = 1,
) -> None:
"""Add 2d rectilinear mesh to network. A new network is created, clipped, and merged
with the existing network.
Args:
network (Network): Network object to which the mesh is added
polygon (Union[Polygon, MultiPolygon]): Geometry within which the mesh is generated
dx (float): Horizontal mesh spacing
dy (float): Vertical mesh spacing
deletemeshoption (int, optional): Option for clipping mesh. Defaults to 1.
Returns:
None.
"""
Als voorbeeld genereren we binnen een cirkel (straal van 10 m) een rechthoekig grid. De aanroep is als volgt:
mesh.mesh2d_add_rectilinear(network, circle, dx=2, dy=2)
Genereren van een driehoekig grid binnen een polygoon
Het is ook mogelijk een driehoekig grid te genereren:
def mesh2d_add_triangular(
network: Network, polygon: Union[Polygon, MultiPolygon], edge_length: float = None
) -> None:
"""Add triangular mesh to existing network. An orthogonal mesh is generated by the
meshkernel, which likely means that the given geometry is not completely filled. The
triangle discretization is determined based on the coordinates on the boundary of the
provided geometry. Giving an edge_length will discretize the polygon for you, but
you can also do this yourself.
Args:
network (Network): Network object to which the mesh is added
polygon (Union[Polygon, MultiPolygon]): Geometry within which the mesh is generated
edge_length (float, optional): Distance for which the polygon boundary is discretized (by approximation). Defaults to None.
"""
Hetzelfde voorbeeld als hierboven, maar nu voor een driehoekig grid:
Verfijnen een grid binnen een polygon
Het is mogelijk het grid lokaal binnen een gegeven polygoon een aantal stappen te verfijnen. Zo kan een 40x40 grid lokaal verfijnd worden naar een 20x20 grid, 10x10 grid, etc.
In onderstaand voorbeeld wordt een driehoekig grid gegenereerd binnen een MultiPolygon dat bestaat uit twee cirkels, waarna binnen een rechtoekig polygoon wordt verfijnd met één stap:
Grid uitknippen binnen een polygoon
Ook kan een polygoon worden opgegeven waarbinnen (of waarbuiten) een grid wordt uitgeknipt.
In de volgende figuren wordt links een Multipolygon bestaande uit twee rechthoeken uit het rechthoekige raster geknipt.
Rechts wordt een realistischer voorbeeld getoond: een raster wordt gegeneerd in een multipolygon, waarna een sinusvormige river wordt gemaakt. Om de rivier heen wordt verfijnd (groene gebied), de river zelf wordt uitgeknipt (rode gebied).
| |
|
|