Surface water network
Project description
Surface water network
A Python package to create and analyze surface water networks.
Python packages
Python 3.8+ is required.
Required
geopandas >=0.9
- process spatial data similar to pandaspackaging
- used to check package versionspandas >=1.2
- tabular data analysispyproj >=2.2
- 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
File details
Details for the file surface_water_network-0.8.tar.gz
.
File metadata
- Download URL: surface_water_network-0.8.tar.gz
- Upload date:
- Size: 556.5 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/5.0.0 CPython/3.10.12
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | da2d32efb578d58b11962cf6816ea6e15c756b0d2ddb5076ddd591e30bf6e720 |
|
MD5 | f2ff10614102c07e74e1d2f4c8faacbb |
|
BLAKE2b-256 | f20268ae66a6820d59edb26e4c6dc60d79cd00db59990491b1a4898c2cb5d074 |
File details
Details for the file surface_water_network-0.8-py3-none-any.whl
.
File metadata
- Download URL: surface_water_network-0.8-py3-none-any.whl
- Upload date:
- Size: 101.8 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/5.0.0 CPython/3.10.12
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | aa10bf03b8a25fa2c8808ec9b914b538080879bdf7d7bf4b702992f1855e5c28 |
|
MD5 | f7691a4283db1540905f5a79e4a29a2b |
|
BLAKE2b-256 | d56a6b19ee71910c0a3f1bb35c44bdd041b59cc3f2efbedf97476f98dbc1df14 |