Usage

Below is a sample script indicating how the cascade.py library can be used.

from wayfarer import loader
from cascade import orderer

# load a network
net = loader.load_network_from_file("./docs/examples/40_directed_net.dat")
o = orderer.Orderer(code_field="EDGE_ID")

# assign orders to the network
orders = o.assign_order(net)

print(f"Number of edges with an order: {len(orders)}")

# loop through orders
for edge_id, values in list(orders.items())[0:10]:
    strahler_order, shreve_order = values[0], values[1]
    print(
        f"EdgeId: {edge_id} Strahler Order: {strahler_order} Shreve Order: {shreve_order}"
    )

# get a Strahler order for a specific edge
edge_id = 197
print(orders[197])
# orders is a dictionary using the edge id as a key, and values as a list in the
# following format
# strahler_stream_orders shreve_stream_orders segments visited
# [1, 1, 100007, 9]

strahler_order = orders[197][0]
print(f"Strahler order for {edge_id}: {strahler_order}")

The next example shows how to load a network from a Shapefile using the wayfarer library, and apply ordering:

import fiona
from networkx import MultiDiGraph
from wayfarer import loader
from cascade import orderer

# load a network from a shapefile
recs = fiona.open("./docs/examples/HydroEdge11.shp", "r")
net = loader.load_network_from_geometries(
    recs,
    key_field="SEG_CD",
    keep_geometry=True,
    use_integer_keys=False,
    graph_type=MultiDiGraph,
)
o = orderer.Orderer(code_field="SEG_CD")

# assign orders to the network
orders = o.assign_order(net)

# loop through orders
for seg_cd, values in orders.items():
    strahler_order, shreve_order = values[0], values[1]
    print(
        f"Segment Code: {seg_cd} Strahler Order: {strahler_order} Shreve Order: {shreve_order}"
    )