2  Stream, river and estuary lines

2.1 Table streams (stream and river lines)

The stream layer (table streams in the database) is made up of 136,180 lines, each with a unique combination of:

  • reach code (reach), one of 131,296 unique reach/subcatchment codes made up of a three-character stream code and an integer equivalent to the reach’s catchment area in ha (see section 4.2). Each reach also has a unique numeric code called site, which is used for more efficient data extraction than is possible with the reach code (see Table subcs, section 3.1). The revisions for version 1.2 changed the locations of some reaches, and catchment areas (and therefore reach codes) calculated from the more recent LiDAR data have changed slightly in some cases. (These changes have persisted in version 1.3.) To distinguish version 1.2/1.3 codes from version 1.1 codes, the stream code and catchment area integer are now separated by an underscore rather than a hyphen.1
  • mi_prinx, one of 14,802 unique identifiers that link to Melbourne Water’s asset ID table (table mwassets 2). 85,238 reaches have no mi_prinx value because they are small streams that augment the original Melbourne Water stream layers. 128,114 reaches have a single MI_PRINX. It is usual for a single MI_PRINX to extend over multiple subcs, however, 3,184 subcs have more than one MI_PRINX.
  • type, six types of streams derived mainly from the source data for the stream lines (Table 2.1).
Table 2.1: The six stream types in the Melbourne Water stream layer showing the total length of each type in the dataset, and the primary data source for each type. Sources beginning with ‘DR’ are spatial layers used by Melbourne Water. For all types, we made corrections to the original geometries where appropriate.


Length (km)

Primary data source




stream extensions


Derived by GraceGIS, and augmented selectively in V1.1 by DR_Waterways_above_MW_Limit (See Appendix 1 methods)

channel or drain





Our estimates informed by Melbourne Water's estuary layer

connecting line through waterbody


DR_Waterway_Connector, with some added by us during assembly of the network




The primary data sources listed in Table 2.1 were corrected and augmented to produce the layer shown in Figure 2.1.

While the Melbourne Water layer DR_Natural_Waterway_Centreline was the base source for stream lines in the dataset, J Kunapo corrected many lines using LiDAR (see Appendix A for more details), through manual checks (e.g. deletion of duplicate/overlapping/spurious lines) and in some cases filled in missing lines (sourceLayer “GraceGIS Links” in earlier versions of the stream layer).

Stream extensions were added from a fine-scale stream network derived from LiDAR using hill-shade to identify the head of gullies as the most upstream point, and further stream extensions were added to match those in the Melbourne Water layer DR_Waterways_above_MW_Limit, but only where those lines matched a channel visible on the LiDAR hill-shade (Walsh et al. 2022): see also Appendix A].

“Connecting lines through waterbody” lines should not be interpreted as stream channels, but serve only to maintain the hydrologic connectivity of the network through large waterbodies, such as reservoirs.

Most of the network of underground urban stormwater pipes in Melbourne Water’s DR_UGround_Centreline layer has been excluded. However, all pipes that connect upland sections of streams with either their outlet to the sea or with more downstream sections of streams or channels were retained. Small segments of pipes at their outlets to the sea or to streams were also retained. These collectively make up 304 km of pipes in the dataset (Table 2.1).

We estimated estuary extent by visually inspecting aerial imagery and contours, cross-checking with Melbourne Water’s estuary layer (HWS 2018 estuaries layer) and on-ground experience. Several of the lines in Melbourne Water’s layer extended too far into the catchments. The estuary extent in Figure 2.1 is more correct, but likely retains some errors and omissions. See also the estuaries table below.

MW streams by type

Figure 2.1: Melbourne Water stream network colour-coded by type.

The streams table also contains the following fields (in addition to reach, mi_prinx, type, and site considered above)

  • nextds, the next site downstream (see subcs, below).

  • hydroid, a unique integer code for every line segment. This differs from site because 3184 subcatchments (identified by site codes) contain more than one stream segment (when a subcatchment contains more than one line type or mi_prinx value).

  • nextdownid, the next hydroid downstream of each line segment. This permits calculation of network relationships at a finer level than the site level.

  • strcode, the three-character stream code for the line flowing through the subcatchment. See stream_names table Section 3.5.

  • botseg, = 1 if the line segment is the most downstream segment in the subcatchment, = 0 if not.

  • length_m, length of the line segment in m.

  • reach_v11, the best possible match for the equivalent reach in the version 1.1 stream network.

reach_v11_match, An integer code indicating the quality of the match with the equivalent version 1.1 reach. 1 = geometry and catchment area unchanged between versions (NA stream segments); 2 = geometry unchanged, but catchment area changed; 3 = the bottom of the matched version 1.1 reach is <25 m from the bottom of the version 1.2 reach; 4 = the bottom of the matched version 1.1 reach is 25-100 m from the bottom of the version 1.2 reach; 99 or NA = no matching version 1.1 reach code identified.

  • seg_order, the order of hydroid segments in each reach (most upstream = 1, most downstream = number of segments in the reach3).
  • geom, the line geometry

  • sampleable, a binary variable, with value 1 for the 33315 reaches that are large enough to be sampled for macroinvertebrates using rapid bioassessment methods, and excludes pipes and connecting lines through waterways. The reaches were selected using the following SQL query:

SELECT streams.* FROM streams 
    JOIN subcs ON streams.site = subcs.site 
    JOIN c_env ON subcs.site = c_env.site 
    WHERE LOG(subcs.carea_km2) > GREATEST(LOG(0.79), 2.5 - 0.75 * 
                                          POWER(c_env.maq, 0.25)) 
    AND streams.type NOT IN ('pipe', 'connecting line through waterbody');

This rule defines the relationship between catchment area and mean annual runoff (see table c_env below) describing the upper bound of reaches that have been sampled for macroinvertebrates in the Melbourne Water macroinvertebrate database (https://tools.thewerg.unimelb.edu.au/mwbugs). To date, it has been found to adequately define streams large enough to sample, but may be revised. The resulting stream network is of a similar drainage to the stream network used by models supporting the 2018 Melboure Water Healthy Waterways Strategy (Figure 2.2).

par(mar = c(0,0,0,0))
plot(streams$geom[streams$type == "connecting line through waterbody"], 
     col = "orange")
plot(streams$geom[streams$type == "pipe"], col = "red", add = TRUE)
plot(streams$geom[streams$sampleable == 1], col = "darkblue", add = TRUE)
       legend = c("Sampleable stream/channel/estuary","Connector","Pipe"),
       lty = 1, col = c("darkblue","orange","red"), cex = 0.7)

Figure 2.2: The stream network filtered to show only those stream lines (including channels and estuaries) that are large enough to sample macroinvertebrates using rapid bioassessment methods (dark blue), also showing pipes and connecting lines through waterbodies to provide a complete hydrologic network.

2.2 Table estuaries (estuarine extent)

We added the HWS 2018 estuaries layer to the database as table estuaries. It contains polygons of estuarine extent for all 29 identified estuaries in the region. In addition to the original information in the table, we assigned a unique strcode each estuary, which matches that field in the stream_names, streams, and subcs tables.

  1. For example, reach GRD-1096 in version 1.1 is GRD_1098 in versions 1.2 and 1.3: the location of the stream reach was unchanged, but the catchment boundary changed slightly. The stream line of YAR-14898 in the upper Yarra catchment has shifted ~40 m after correction with the new LiDAR. In versions 1.2 and 1.3, this reach is YAR_14850. All mainstem Yarra codes have shifted by ~50 ha, correcting an error in the Yarra headwaters in version 1.1. See Section 4.3 for further explanation of the reach code convention.↩︎

  2. The table mwassets in the database is a subset of Melbourne Water’s Asset ID table, with asset information taken directly from Melbourne Water’s table. Only those assets for which a matching line in the stream network table are included. The table contains 14,802 assets, each with a unique mi_prinx value that links to one or more records by the mi_prinx field in the streams table.↩︎

  3. reach XJC_91 on the Kirkham Dr drain has the largest number of segments (12), comprising a series of channels and pipes with separate mi_prinx values.↩︎