As many Cities: Skylines players will be aware, somebody has gone and built an amazing tool called terrain.party which allows anybody to get a reasonably realistic real-world height map that can be imported into the Cities: Skylines map editor. However terrain.party has some limitations:
Being a software developer with some minor background in Geographic Information Systems (GIS), I decided to download the free/open source QGIS suite and see what I could do.
GIS software tools typically deal with one of two types of data: "vector data" or "raster data".
Cities: Skylines uses black-and-white images for it's height maps, where the pixel brightness value is interpreted as a height in meters instead of a shade between black and white. Cities: Skylines does a smooth interpolation between the points in height map so that the terrain does not appear blocky.
The resolution of the image is 1081 x 1081, and a cities skylines map is 17.28 km x 17.28 km. This means that each pixel in the image represents the height at the center of a 15.9 m x 15.9 m section of the map. The image is a 16-bit greyscale, which means there is a number between 0 and 216 (65,536) for each pixel. Right now your browswer is interpreting that as a shade of gray between white and black. To Cities: Skylines the number is representing a height between 0 and 1024 m. This means the height of each 15.9 m x 15.9 m map segment can be adjusted in increments of 0.015 m (1024 m / 65,536).
"Sea level" is at 40 m, so if the pixel values around the edges of the image are below 2667 (40 / 0.015 rounded up) or so, water will flow in from the edges of the map. Doing a Google Image search for "lake huron depth chart" found me this paper with a decent resolution map. From the map we can see that the water depth pretty quickly increases to 40 - 50 m around the island in most places, and so in the images above the edge pixel values are 0 (hence black).
The first step was getting my hands on the GIS data I needed to generate the improved height map. In order to generate a more accurate map than terrain.party, you need to start from more accurate base data or else it's hopeless. Thankfully the Ontario government has made a lot of its GIS data available for free, and accessible via a (reasonably) easy to use interface (even if it looks a bit dated).
I like to start by just seeing what the data looks like nicely rendered. The "Ontario Topographic Map" site is generated from the same open GIS data which we'll be pulling from, and also contains an aerial photography layer. Unfortunately the licence agreement for that site means that I can't export and include/embed an example of their maps/imagery in this website, so you'll have to go see for yourself.
To get the actual data, head to the "Ontario Basic Map" (OBM) site. Zoom in so that the area (17.28 km x 17.28 km) for which you want data is filling your browser window (see below).
Click on the button to bring up the data download window. You'll need to provide your e-mail address, as the download request will be processed by backend servers and then the compiled data will be e-mailed to you as a zip file attachment. However don't actually perform the download yet.
More data layers become available as we zoom in, and some of the ones we want aren't visible when only zoomed enough so that a 17.28 km x 17.28 km area is visible on the screen. There is a way around this though. Record the map boundaries from the download window at this zoom level.
Now we can zoom in on some portion of the map (within our desired area) until new layers stop appearing in the menu on the right hand side.
Then click on the button to bring up the data download menu again. Now all of the layers we want will be available in the layer selection box, and we can overwrite the smaller download area boundaries with the numbers recorded while zoomed out.
I recommend taking all of the data layers which are checked by default, as a lot of that data is nice to have as a reference later (and the download will only be a few megabytes). However there are a few layers/sets of layers that will be essential for generating a height map and "pre-digging" the lakes, rivers, streams, etc.
Elevation information is given as "contour lines" (black lines with labels circled in red) or "spot heights" (little black pluses with labels circled in blue).
Contour lines are lines of equal elevation. For instance, if a contour line has the label "290", that means everywhere along the line has an elevation of 290 (in this case meters above real-world sea level). The closer different contour lines are to each other, the steeper the slope in that area as the elevation is changing over a smaller distance.
Spot heights are exactly what they sound like, the height at a particular spot on the map.
However these two layers are not enough, as the contour lines layer does not contain lines which represent the elevation of terrain under water, nor the elevation along the edges of bodies of water (shorelines). Part of our process will be taking data from the water layers and generating more contour lines which represent shorelines accurately and approximate under water elevations. You shoudln't need to fret about this too much though, as all water layers should be selected by default.
Once you have all your desired layers selected and have overwritten the download area boundaries, go ahead and hit the download button. You should get an e-mail with all the layers as ESRI shape (.shp) files within a few minutes.