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
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.
©️ OpenStreetMap Contributors https://www.openstreetmap.org/copyright