Skip to content

Geodan/terrain

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

159 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

terrain

Docker images for creating Cesium Quantized mesh terrain tiles

Quantized mesh specs: https://github.com/CesiumGS/quantized-mesh

noordwijk

Live Samples

1] Maastricht - AHN4 https://geodan.github.io/terrain/samples/maastricht/

2] Maastricht - AHN4 with contours https://geodan.github.io/terrain/samples/maastricht/index-elevation.html

image

3] Corsica - DTM's from https://geoservices.ign.fr/rgealti

https://geodan.github.io/terrain/samples/corsica/

image

Getting started

Download AHN4 0.5m GeoTIFF of Maastricht and process to terrain tiles.

$ wget --no-check-certificate https://service.pdok.nl/rws/ahn/atom/downloads/dtm_05m/M_69AZ2.tif

Start processing input GeoTIFF's

$ docker run -it -v $(pwd):/data geodan/terrainwarp -m 1000

A subfolder 'tmp' will be created containing the processed GeoTIFF's

$ docker run -v $(pwd):/data geodan/terraintiler

A subfolder 'tiles' will be created containing file 'layer.json' and a set of .terrain tiles in a directory per level (0-15).

Terrain tiles can be used in CesiumJS as follows:

var terrainProvider = new Cesium.CesiumTerrainProvider({
    url : './tiles'
});
viewer.scene.terrainProvider = terrainProvider;
viewer.scene.globe.depthTestAgainstTerrain=true;

Download sample client and start webserver:

$ wget https://raw.githubusercontent.com/Geodan/terrain/main/samples/maastricht/index.html
$ python -m http.server

Open browser on port 8000.

Result:

image

Live demo see https://geodan.github.io/terrain/samples/maastricht/

Process

flowchart TD

subgraph Warp
    A{Start} --> B{TIF's}
    B --> C{TIFs remaining?}
    C -->|No| D[Build VRT]
    C -->|Yes| E[Select TIF]
    E --> F[Run GDAL Fill NODATA]
    F --> G[Run GDAL Warp to EPSG:4326+4979]
    G --> C
end
subgraph Tiling
    D --> H[Run CTB-TILE]
    H --> I[Unzip terrain tiles]
    I --> J[Terrain tiles ready - end]
end
Loading

Reference Systems

By default the reference system of the first input image used. If it's a Duch projection (epsg:28992) the vertical is also specified (using epsg: 7415 - composite of EPSG:28992 and EPSG:5709). The used epsg code can be overwritten with the -c in geodan/terrainwarp command.

In the process the images are warped using gdalwarp to EPSG:4326+4979 (-t_srs) to be used in Cesium using the WGS84 ellipsoid model.

Docker

There are 2 Docker images:

1] Warp

The Warp Docker image contains a recent version of GDAL (3.7) and shell script for processing (gdal_fillnodata, gdalwarp, gdalbuildvrt).

See https://hub.docker.com/repository/docker/geodan/terrainwarp

2] Tiler

The Tiler Docker image contains:

See https://hub.docker.com/repository/docker/geodan/terraintiler

Running

1] Warp

Use a volume mount named 'data' in the docker image to process tif files on the host machine.

$ docker run -v $(pwd):/data -it geodan/terrainwarp

The script takes as input parameters:

Syntax: [-c|m|j|h]
options:
c Source s_srs - default EPSG:7415
m fillnodata maxdistance (in pixels) - default 100
j number of parallel jobs - default 5
h Print this help

When option -c is not used, warp will check the EPSG code of the first GeoTIFF.

  • If no EPSG code is detected or the EPSG code is 28992: the default s_srs is used (EPSG:7415). EPSG:7415 is a composite of EPSG:28992 (horizontal) and EPSG:5709 (vertical) used in the Netherlands. A the vertical EPSG code is optional but needed to transform from geoid to ellipsoid.
  • In other cases: the detected EPSG code is used as s_srs

Sample output:

Terrain tiler 1.1 - Warp
Start: Tue Jul 25 12:52:27 UTC 2023
Temp directory: tmp
s_src input images:
Fillnodata maxdistance: 100
Jobs: 5
Delete tmp directory...
tmp directory created.
s_srs not set, trying to detect it from first GeoTIFF
EPSG of first tif: EPSG:28992
make s_srs epsg:7415 in case of epsg:28992
used s_srs: EPSG:7415
Start processing 1 GeoTIFFS...
100% 1:0=0s ./M5_32CN2.TIF
Building virtual raster tmp/ahn.vrt...
0...10...20...30...40...50...60...70...80...90...100 - done.
VRT created: tmp/ahn.vrt
End: Tue Jul 25 12:52:28 UTC 2023
Elapsed time: 1 seconds.
End of processing

2] Tiler

Running:

$ docker run -v $(pwd):/data -it geodan/terraintiler
Syntax: [-s|b|e|o|h]
options:
o Output directory - default tiles
b Break zoomlevel - default 9
s Start zoomlevel - default 15
e End zoomlevel - default 0
j number of parallel jobs - default 5
h Print this help

Sample running Docker image with parameters - generate tiles for level 10 - 0 using '-s 10':

$ docker run -v $(pwd):/data -it geodan/terraintiler -s 10

Sample output:

Terrain tiler 1.1
Start: Wed Jun 21 09:24:39 UTC 2023
Output directory: tiles
Tif extension: TIF
Start zoomlevel: 15
Break zoomlevel: 9
End zoomlevel: 0
Jobs: 5
Delete output directory...
Directory created: tiles
Running ctb-tile from 15 to level 9...
Creating layer.json file...
Creating GTiff tiles for level 9...
Create vrt for GTiff tiles on level 9...
Run ctb tile on level 8 to 0
Cleaning up...
Unzip terrain files...
End: Wed Jun 21 09:24:45 UTC 2023
Elapsed time: 6 seconds.
End of processing

Known issues

In the tiling process, the following errors can occur:

ERROR 1: Integer overflow : nSrcXSize=97201, nSrcYSize=18001
ERROR 1: IReadBlock failed at X offset 0, Y offset 0
ERROR 1: GetBlockRef failed at X block offset 0, Y block offset 0 Error: Could not read heights from raster #74

See also geo-data/cesium-terrain-builder#37

Fix: Increase the -b option to a higher level

Building

Warp Docker image:

$ docker build -t geodan/terrainwarp .

Tiler Docker image:

$ docker build -t geodan/terraintiler .

To build the images together use:

$ sh build_all.sh

History

2023-08-08: release 1.1:

  • add -j option for number of parallel jobs

  • removed parallel progress bar in tiler

2023-07-26: release 1.0:

  • performance improvement by using parallel processes;

  • improved folder tmp handling;

  • improved different epsg codes;

  • improved error handling.

2023-07-24: release 0.3.3: bug fix warp

2023-07-20: release 0.3.2: give more feedback on progress

2023-07-17: release 0.3.1 - add -m option in warp for gdal_fillnodata max_distance

2023-07-06: release 0.3 - split process in tiler and warp

About

No description, website, or topics provided.

Resources

License

Stars

Watchers

Forks

Packages

No packages published

Contributors 3

  •  
  •  
  •