Great Lakes Bathymetry

From TSAS Library
Jump to: navigation, search
Partial Erie bathymetry cut with MPCNC, map from NOAA, processed with QGIS and Aspire 8.5



Create STL for CNC Router or 3D Printer

Proprietary Workflow (Aspire)

Video walkthrough here

  1. Data pulled from NOAA's ETOPO1 images, available directly here which offers a 1-minute resolution of worldwide bedrock
  2. Add raster image to QGIS
  3. Select extent desired (Raster -> Extraction -> Clipper)
  4. Export as .tiff
  5. Open in GIMP, click white area surrounding with Magic Wand Tool, then drag upward to increase threshold to maximum
  6. Overwrite .tiff to save
  7. Open in Aspire, under Modeling tab, select "Create a component from selected bitmap"
  8. Right-click component under Component Tree, then select Properties
  9. Switch to 3D view so the changes are illustrated
  10. Move Shape Height slider until desired relief is achieved (1.5" was used for this project)
  11. Open unadjusted .tiff in Inkscape (one with dark image with little detail, but sharp boundary edge)
  12. Choose Path -> Trace Bitmap
    • Use Brightness Cutoff with the lowest possible settings
    • Deselect Smooth
  13. Choose Path -> Outset to increase size so bitmap is tightly enveloped by vector (may need to adjust outset steps under Preferences -> Steps)
  14. Erase any holes within the vector to create solid object
  15. Import vector in Aspire and carefully align to .tiff
  16. Move to Toolpaths bar and select 3D Roughing Path
  17. Choose Selected Vector under Machining Limit Boundary, then press Calculate
  18. Press 3D Finishing Toolpath, then choose vector as above
  19. Preview the toolpaths to ensure desired results
  20. If image is larger than machine, use Tile Toolpaths to divide it [2]

Tool speeds used in above (wooden) image:

Print Pass Tool Size Feed Rate Plunge Rate Print Time
Rough Pass .25" square bit 15.0 mm/sec 3.0 mm/sec 1:30
Finish Pass .125" ball nose 25.0 mm/sec 6.0 mm/sec 4:30

Open Source Workflow

  1. Download ArcGrid DEM from USGS National Map or Earth Explorer (3DEP, 1/3 arc-second DEM)
  2. Unzip file
  3. Open QGIS, add Vector, add layer file (.adf)
  4. Select extent (Raster -> Extraction -> Clipper)
  5. Save as GeoTIFF
  6. Add GeoTIFF to model
  7. Analyze to DEM (Raster -> Analysis -> DEM [Terrain Models])
  8. If necessary, merge the DEMs
  • A balance must be made between extent and resolution. 1:50,000 creates excellent models, but cannot contain an entire lake. Above that and the file crashes my system. A further note on resolution.
  • Solution to bathymetric (negative) altitude values[3]: using Raster Calculator, add bottom value to all height values
  1. Create STL (Raster -> DEMto3D)[4]

Very Long, Detailed Workflow

  1. Download QGIS
  2. Download Great Lakes Bathymetry from NOAA's Grid Extract Tool
  3. Download lakes shapefiles from Science Base
  4. Open shapefiles in QGIS and merge each at border
    1. Open first file, e.g. hydro_p_LakeErie.shp
    2. Right click in Layers Panel and save as LakeEriebound
    3. Remove original shapefile
    4. Repeat for all needed
    5. Select LakeEriebound in Layers Panel, click Select Features by area or single click
    6. Hold shift, select both features in LakeEriebound on map
    7. Click Toggle Editing (pencil icon)
    8. Go to Edit -> Merge Selected Features
    9. Check that LakeEriebound is now one polygon, Toggle Editing, save changes, then repeat for all shapefiles
  5. Go to Vector -> Geoprocessing Tools -> Fixed distance buffer
  6. Run as batch process by inputting each shapefile (LakeEriebound, etc.) into Input Layer, and buffer name (e.g. eriemask) in Buffer column. Used .2 Distance
  7. Remove LakeEriebound, etc. from Layers Panel
  8. Add bathymetry rasters from NOAA's Grid Extract Tool, ensuring all area under buffers is included
  9. Rename Buffer to eriemask, etc.
  10. Go to Raster -> Extraction -> Clipper
  11. Choose first lake input file and name output file (e.g. eriebath)
  12. Choose mask layer and select relevant mask (e.g. eriemask)
    1. If error Output driver `GMT' not recognised . . ., select pencil button next to output algorithm and change -of GMT to -of GTIFF
    2. If black 0-level box appears after masking, delete the files and re-run with large (-99999) number and No Data Value box selected
  13. Go to Raster -> Miscellaneous -> Merge and select two adjacent masked files

[Running into issues with shared color values]

Laser Cut, Low Resolution


  1. Download shapefiles from NOAA. Superior bathymetry contours with unclear provenance is available here, with login
  2. Download and install QGIS and Inkscape[5]
  3. No need to extract files, open each in QGIS Desktop
  4. Add OpenStreetMap information if desired (the native support is not working at this time[6], but the plugin does)
  5. Right-click shapefile in left layers panel, select Properties
  6. Choose Filter, then create expression, e.g. "DEPTH" IN ('0', '1', '25', '50', '60')[7]
    • It is helpful to use the Values box (make sure "Use unfiltered layer" is checked if changing an applied filter) to see the extent of the map's values

Other Sources


  1. Geographic Information Systems Stack Exchange. "Load .osm.pbf file in Qgis." here.
  2. Vectric Ltd. "Vectric V8 Tutorials - Tiling 3D Toolpathing." YouTube. [1]
  3. Geographic Information Systems Stack Exchange. "Mars DTM has all negative elevations in QGIS. Can't build STL file for 3D print." here.
  4. Modified from Laguna Tools. "Max CNC Tutorial 3D Landscape." YouTube. here.
  5. Stack Exchange answer here
  6. "OpenStreetMap in QGIS." OpenStreetMap Wiki. here.
  7. Geographic Information Systems Stack Exchange. "QGIS choose contour line labels." Here