Waterbodies
Waterbodies are places with stationary water, such as lakes and reservoirs. For the Map, I am using the osmfilter.exe to filter for the following osm elements:
water=lake OR water=reservoir OR natural=water OR landuse=reservoir
This is always enabled, because a lot of large lakes, like Lake Michigan, would otherwise be missing.
Rivers
Floating water (natural or artificial) is devided into 2 segments. Rivers are the wider regions where boats and/or ships can navigate. These will be filtered by the following osmfilter command:
waterway=river OR water=river OR waterway=riverbank OR waterway=canal
Filtering the osm file with this options will result in A LOT of Rivers, because there are no categories like small / medium / large rivers in osm. To work around this problem, I filter the data one more time in QGIS, using the following code:
"other_tags" != '%"intermittent"=>"yes"%' AND "name" != ''
This way, we only get the larger rivers with actual names that are present the whole year. It’s not a perfect way to filter by these tags, but a good workaround.
Streams
The smaller areas where the source of the rivers are located are called Streams. They can only be generated at scales 1:100 or larger. This feature includes all un-named osm rivers and actual streams. The osmfilter command looks like this:
waterway=river OR water=river OR waterway=stream
filtered lakes filtered rivers filtered streams
Here you can see the different amount of lakes, rivers and streams in osm. Be careful with the streams option, because it will produce A LOT of water in your Map. You can also see that there are some fine “lines” in the lakes image. This is because some rivers also containing the “natural=water” tag. This is an inconsistency in the osm naming conventions.
Technical implementation
In QGIS, the multipolygons (for Waterbodies) and lines (for Rivers and Streams) are displayed using a geometry-generator. This geometry-generator creates a “Shapeburst fill” and a certain thickness for the lines and fills the geometry with a color gradient from black to white.
This color gradient will later be used in the worldpainter script to determine the depth of the water from 1 to 5 blocks deep.