Email

How to Create a 3D Bathymetry Seabed Model from QGIS

This guide explains how bathymetry contour data from Kartverket can be converted into a continuous 3D seabed model using QGIS.

The workflow transforms depth contours into a raster elevation model representing seabed morphology, suitable for visualization and spatial understanding in tools such as Blender or digital twin environments

Result:
A continuous 3D seabed model exported as a GeoTIFF DEM, with an optional heightmap suitable for 3D visualization and displacement workflows.

Example visualization:
View interactive 3D seabed example →

⚠️ Intended Use and Disclaimer

Visualization Purpose Only

The workflow described in this article is intended exclusively for visualization, conceptual analysis, and general spatial understanding of seabed conditions. Generated 3D models must not be used for navigation, marine operations, engineering decisions, dredging planning, construction activities, or safety-critical assessments. The produced models do not replace hydrographic surveys, certified nautical charts, or officially approved depth measurements. PORT360 assumes no responsibility for operational decisions made based on models generated using this workflow.

Step 1 — Create a Working Area (Project Extent)

Creating a dedicated working-area polygon ensures that all exported datasets share the exact same spatial extent. This guarantees alignment between:

  • heightmaps
  • textures
  • shapefiles
  • GeoJSON exports
  • 3D models

Create Shapefile Layer

Layer → Create Layer → New Shapefile Layer

Settings:

  • Geometry type: Polygon
  • CRS: EPSG:25835 — ETRS89 / UTM Zone 35N
  • Name example: Extent-locations.shp

Click OK.

Draw Working Area

  • Select the new shapefile layer
  • Enable Toggle Editing (pencil icon)
  • Select Add Polygon Feature
  • Draw the boundary covering your project location
  • Save edits
Important: This polygon should always be used as the export extent throughout the entire workflow. Keeping a consistent extent prevents misaligned heightmaps and datasets later.

Step 2 — Load Bathymetry Contours

Add Dybdekurve from the Kartverket / Geonorge WFS service.

Processing should always be performed on locally stored data, not directly from WFS services.

Export Contours Locally

Right-click the layer → Export → Save Features As

Settings:

  • Format: GeoPackage
  • CRS: EPSG:25835
  • Filename: “depth_contours.gpkg
  • Export field: dybde
  • Geometry type: Automatic
  • Enable Include Z-dimension
  • Extent: Working polygon (Step 1)

Click OK.

Tip: Exporting WFS data locally significantly improves performance during interpolation.

Step 3 — Convert Depth to Seabed Elevation

Bathymetry values represent depth below sea level and must be converted to negative elevation values.

Right Click Layer: depth_contours — dybdekurve,
Attribute Table → Field Calculator

Create new field:

  • Name: depth_neg
  • Type: Decimal number (real)

Expression:

– “DYBDE”

Click OK, then enable editing and Save, or (CTRL + E).

Step 4 — Add Coastline Constraint

The coastline defines sea level during interpolation.
Add Kystkontur from the same WFS service.

Export Coastline

Right-click coastline layer → Save Features As

  • Format: GeoPackage
  • CRS: EPSG:25835
  • Filename: coastline.gpkg
  • Extent: Working polygon

Click OK.

Assign Sea Level

Open Attribute Table → Field Calculator
Create field:

  • Name: depth_neg
  • Type: Decimal number

Expression:

0

Click OK → Save edits (or CTRL + E)

The coastline now represents sea level and prevents interpolation artifacts near land boundaries.

Step 5 — Merge Input Layers

TIN interpolation requires a single elevation dataset.
Open:

Processing Toolbox → Merge Vector Layers

Input:

  • depth_contours
  • coastline
  • Output: seabed_input.gpkg


Click: Run.

Result

Step 6 — TIN Interpolation (Core Process)

Open:
Processing Toolbox → TIN Interpolation

Settings:

  • Vector layer: seabed_input
  • Attribute: depth_neg
  • Type: Structure lines
  • Method: Linear

Set Working Extent
Limit interpolation to the project polygon (Step 1).

Pixel Size

Pixel Size X = 5 Pixel Size Y = 5
Tip: If rows or columns become extremely large, the pixel size is too small. 5 meters is a good balance between detail and Blender performance.

Output Raster
Save as: heightmap_interpolations.tif


Click: Run.


The result is a continuous seabed elevation model.

Step 7 — Optional: Prepare Heightmap for Blender

For displacement workflows in Blender (none BlenderGIS), normalize elevation values.

Open:
Raster → Raster Calculator

Expression:

(“heightmap_interpolations@1” + 100) / 100

Output: seabed_normalized.tif

Normalization converts seabed elevation into a 0–1 value range compatible with 3D displacement workflows.

Workflow Overview

Bathymetry contours → Negative elevation → Coastline = sea level → Merge layers → TIN interpolation → Seabed DEM → Optional normalization → 3D visualization

Final Result

The generated DEM provides a realistic representation of seabed morphology suitable for:

  • Harbour visualization
  • Planning discussions
  • Digital twin environments
  • Concept presentations

Matching the 3D Model to Real World Scale

Final Thoughts

Creating a 3D bathymetry model from contour data provides a practical way to better understand underwater terrain without requiring specialized survey software or complex processing pipelines.

By combining publicly available bathymetric datasets with QGIS interpolation tools, seabed morphology can be transformed into a continuous 3D surface suitable for visualization, planning discussions, and digital twin environments.

While the workflow focuses on visualization rather than operational accuracy, it enables stakeholders to quickly interpret spatial relationships below sea level — supporting communication, concept development, and early-stage analysis.

Consistent project extents, correct coordinate systems, and properly constrained interpolation are the key factors for producing stable and reusable seabed models.

The resulting GeoTIFF DEM or normalized heightmap can be integrated into visualization platforms such as Blender, web-based 3D viewers, or interactive harbour environments to provide intuitive insight into seabed conditions.

As digital infrastructure and port environments increasingly move toward 3D and real-time visualization, workflows like this help bridge the gap between geospatial data and accessible visual understanding.

Tor-Verner