`osm-river-basins`: Website to show how are rivers in OSM connected

If one of the branches of the bifurcation was a man-made derivation, you can specify waterway=canal

Nope, both natural.

Would you mind share your way to identify “the shortest way” so that we can reproduce this calculation you did? That would be awesome! I’ve QGIS installed but never worked with it in detail tbh.

1 Like

I’m sorry, I reread the wiki article, it seems it is in fact artificial. I’ll try to find out which part is artificial to fix this.

1 Like

Obligatory XKCD comic for this topic: xkcd: Dubious Islands :wink:


I’ve added a new view, which includes waterway and natural=water.

Any OSM ways, which have a waterway key, or natural=water, and share a node, will now be joined. The total length of the water systems is much less accurate now, but it means that rivers which are connected to the edge of a lake, or river area, will be connected together.

OSMers have various views on whether we should map rivers (or streams) through waterbodies (e.g. this thread). One reason for mapping through a water body is to make hydrological analysis easier, such as on WaterwayMap.org, but people (incl. me) are unsure when to map through a waterbody. My hope with this analysis is to support both mapping approach, and not force one.

Alas, many non-trivial lakes are mapped as multipolygon relations , and this code only looks at ways. :sob:

e.g. the big red Cogburn Creek in CA-BC area is correctly joined when when combining natural=water or waterway=*

wheras with just waterway=* all the tributaries connected to the riverbank are not connected to each other.

However they aren’t connected to the mulitpolygon relation for Harrison Lake).

You can see still find mapping mistakes. Here the Thompson River isn’t connected to the natural=water river bank. (which should be mapped).


I’ll keep this view for now, although it is a little hefty to generate. Supporting relations is low on my priorities for now.

Happy Mapping. :slightly_smiling_face::world_map:


You could try to use the outer ways as areas and ignore the islets for this purpose. That does of course require some preprocessing, but it may be a simpler solution than trying to support the MPs in full.

1 Like

This is what I have done using ST_ExteriorRing in PostGIS IIRC (not quite sure where the output is located on my PC)

18 posts were split to a new topic: Drainage Divides the Danube

One problem with “Rivers and streams” view, is that hydro power plants almost always break up rivers. When a river comes to the dam, water goes through several paths:

  1. pipeline under the dam, through a turbine (man_made=pipeline + waterway=pressurised)
  2. spillway over the dam, or besides the dam ((waterway=canal + usage=spillway)
  3. a lock system besides the dam that lets ships through (waterway=canal + lock=yes)
  4. A fish pass (waterway=fish_pass)
  5. A canoe pass (waterway=canoe_pass)

As we see none of these are waterway=river or stream. And if power plants were mapped correctly, the “River and stream” view would stop showing river watersheds, it would just show us watersheds of parts of rivers between two dams.

1 Like

The real problem is not these side_stream but more with river divides with no specific tag (like derivation=partial) to document features for derivation of water. Below are examples of features
for partial derivation of rivers into the James Bay hydro-electric project where the tags way[waterway=canal] and node[waterway=flood_gate] describes the infrastructures but no specific tag to indicate a derivation :

  • Node 4404857334 - “waterway”=“floodgate” Structure to control partial derivation of the Caniapiscau river
  • Node 8057437866 - “waterway”=“floodgate” Structure to control partial derivation of the Eastmain river
  • Node 11346676599- “waterway”=“floodgate” Structure to control partial derivation of the Nemiscau river
  • Node 4428145174 - “waterway”=“floodgate” Structure to control partial derivation of the Rupert river

What do you mean by “water derivation”? I’m not sure I understand your post.

The 4 rivers merge into large reservoirs connected with a serie of dams and hydro-electric power plants. For each ot the 4 rivers, a portion of the upstream river volume of water is not returned to the downstream section of the river - thus being partially derived to an other watershed. At the point of connection of the reservoirs with the downstream sections, a dam assures the deviation of the water in an other watershed and a flooding door on the dam manages the volume of water to be returned to the river and maintain the population needs, the river vitality, a good habitat for fish and activities on the river (fishing, etc).

Did you mean “diverted”? I assume you’re not talking about mathematical derivatives.

English is not my first language, but below is how deepl.com translates from french
« canal de dérivation de rivière » :

  • river diversion canal
    other solutions
  • river derivation channel
  • river derivation canal
  • river dividation channel

So you would put the tag derivation=partial on what, the power plant, or the artificial lake, or which part of the system? And that would mean “Some of the water is diverted to other watersheds”?

There is a view for “waterway w/o some “dam”-like values”. It should include these pipelines, spillways, canals, fish & canoe passes.

The tag filter is waterway∉dam,weir,lock_gate,sluice_gate,security_lock,fairway,dock,boatyard,fuel,riverbank,pond,check_dam,turning_point,water_point,spillway.

e.g. compare this dam in France with just rivers/streams:


to the version which includes the pressurized pipes through the dam:

Does that solve your problems?

The view “without dams” is almost identical to the “all waterways” view, because usually a river is connected in some way with the downstream. And since it uses all waterway tags, everything is connected, and there is no distinct watersheds. And I must admit, I would really like to have a watershed-correct view derived from Openstreetmap data that resembles this map.

Placing this tag on the node[waterway=floodgate] would explain its role.

The problem with determining water catchment areas is that many rivers are partially canalised (waterway=canal): Locks, hydroelectric power stations, etc. As a result, there is often no continuous connection between waterway=river (or =stream).

If waterway=canal is omitted from the analysis, the water catchment areas are often incomplete.
If waterway=canal is taken into account, different water catchment areas are often connected with each other.
This is a dilemma that I don’t know how to solve either.

Possible approaches:

  • canalised river sections often have the same name as the river upstream and downstream of the canal sections → belongs to the water catchment area
  • If the name contains the word “canal” in the respective national language and/or the name is different from the adjacent river sections at the ends of the canal, then it indicates that it is not a canalised river but a connection between different rivers (possibly different water catchment systems). - Such channels are usually not taken into account in the analysis.
  • many, especially larger rivers including canalised river sections have relations of type=waterway, waterway=river in OSM. Perhaps these can be used in one way or another to determine a river system (and “normal” channels otherwise not taken into account)

I suspect that each of these variants will have various exceptions where an automatic determination of the catchment area will not work.

  • perhaps an additional tag waterway=??? is needed to be inserted in places where different river systems are to be explicitly separated.