Surface water network
Project description
Surface water network
A Python package to create and analyze surface water networks.
Python packages
Python 3.10+ is required.
Required
geopandas- process spatial data similar to pandaspackaging- used to check package versionspandas- tabular data analysispyproj- spatial projection supportrtree- spatial index support
Optional
flopy >=3.3.6- read/write MODFLOW modelsnetCDF4- used to read TopNet files
Testing
Run pytest -v or python3 -m pytest -v
For faster multi-core pytest -v -n 2 (with pytest-xdist)
To run doctests pytest -v swn --doctest-modules
Examples
import geopandas
import pandas as pd
import swn
Read from Shapefile:
shp_srs = "tests/data/DN2_Coastal_strahler1z_stream_vf.shp"
lines = geopandas.read_file(shp_srs)
lines.set_index("nzsegment", inplace=True, verify_integrity=True) # optional
Or, read from PostGIS:
from sqlalchemy import create_engine, engine
con_url = engine.url.URL(drivername="postgresql", database="scigen")
con = create_engine(con_url)
sql = "SELECT * FROM wrc.rec2_riverlines_coastal"
lines = geopandas.read_postgis(sql, con)
lines.set_index("nzsegment", inplace=True, verify_integrity=True) # optional
Initialise and create network:
n = swn.SurfaceWaterNetwork.from_lines(lines.geometry)
print(n)
# <SurfaceWaterNetwork: with Z coordinates
# 304 segments: [3046409, 3046455, ..., 3050338, 3050418]
# 154 headwater: [3046409, 3046542, ..., 3050338, 3050418]
# 3 outlets: [3046700, 3046737, 3046736]
# no diversions />
Plot the network, write a Shapefile, write and read a SurfaceWaterNetwork file:
n.plot()
swn.file.gdf_to_shapefile(n.segments, "segments.shp")
n.to_pickle("network.pkl")
n = swn.SurfaceWaterNetwork.from_pickle("network.pkl")
Remove segments that meet a condition (stream order), or that are upstream/downstream from certain locations:
n.remove(
n.segments.stream_order == 1,
segnums=n.gather_segnums(upstream=3047927))
Read flow data from a TopNet netCDF file, convert from m3/s to m3/day:
nc_path = "tests/data/streamq_20170115_20170128_topnet_03046727_strahler1.nc"
flow = swn.file.topnet2ts(nc_path, "mod_flow", 86400)
# remove time and truncate to closest day
flow.index = flow.index.floor("d")
# 7-day mean
flow7d = flow.resample("7D").mean()
# full mean
flow_m = pd.DataFrame(flow.mean(0)).T
Process a MODFLOW/flopy model:
import flopy
m = flopy.modflow.Modflow.load("h.nam", model_ws="tests/data", check=False)
nm = swn.SwnModflow.from_swn_flopy(n, m)
nm.default_segment_data()
nm.set_segment_data_inflow(flow_m)
nm.plot()
nm.to_pickle("sfr_network.pkl")
nm = swn.SwnModflow.from_pickle("sfr_network.pkl", n, m)
nm.set_sfr_obj()
m.sfr.write_file("file.sfr")
nm.grid_cells.to_file("grid_cells.shp")
nm.reaches.to_file("reaches.shp")
Citation
Toews, M. W.; Hemmings, B. 2019. A surface water network method for generalising streams and rapid groundwater model development. In: New Zealand Hydrological Society Conference, Rotorua, 3-6 December, 2019. p. 166-169.
Project details
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file surface_water_network-0.9.tar.gz.
File metadata
- Download URL: surface_water_network-0.9.tar.gz
- Upload date:
- Size: 544.8 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.13.1
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
c135b27dd86c866c09eba533fdcf1e408cb727d7fef2d732733074eb639e6f2c
|
|
| MD5 |
22728e5c2bae07ab90af9ae05a631aa5
|
|
| BLAKE2b-256 |
471a72a5e424207f37c5f168ef367f037e74b28f5e6d2437921ec5b79003375b
|
File details
Details for the file surface_water_network-0.9-py3-none-any.whl.
File metadata
- Download URL: surface_water_network-0.9-py3-none-any.whl
- Upload date:
- Size: 102.0 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.13.1
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
e2a106f92445a436a0475acb4094de25ee6b80e73cfd183d56cdd19c167e7167
|
|
| MD5 |
7cf26c8566231174a3617837749c47ff
|
|
| BLAKE2b-256 |
98e717bd3e182369dbd09f1ad8d9c82a42f2f1b41ba39c998074e3e3f7c40ddb
|