Skip to main content

Surface water network

Project description

Surface water network

DOI Codacy Codcov CI

A Python package to create and analyze surface water networks.

Python packages

Python 3.10+ is required.

Required

  • geopandas - process spatial data similar to pandas
  • packaging - used to check package versions
  • pandas - tabular data analysis
  • pyproj - spatial projection support
  • rtree - spatial index support

Optional

  • flopy >=3.3.6 - read/write MODFLOW models
  • netCDF4 - 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

surface_water_network-0.9.tar.gz (544.8 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

surface_water_network-0.9-py3-none-any.whl (102.0 kB view details)

Uploaded Python 3

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

Hashes for surface_water_network-0.9.tar.gz
Algorithm Hash digest
SHA256 c135b27dd86c866c09eba533fdcf1e408cb727d7fef2d732733074eb639e6f2c
MD5 22728e5c2bae07ab90af9ae05a631aa5
BLAKE2b-256 471a72a5e424207f37c5f168ef367f037e74b28f5e6d2437921ec5b79003375b

See more details on using hashes here.

File details

Details for the file surface_water_network-0.9-py3-none-any.whl.

File metadata

File hashes

Hashes for surface_water_network-0.9-py3-none-any.whl
Algorithm Hash digest
SHA256 e2a106f92445a436a0475acb4094de25ee6b80e73cfd183d56cdd19c167e7167
MD5 7cf26c8566231174a3617837749c47ff
BLAKE2b-256 98e717bd3e182369dbd09f1ad8d9c82a42f2f1b41ba39c998074e3e3f7c40ddb

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page