blob: 6fb906b025112dc5de84dc95f0fe23dfa9de9b19 [file] [log] [blame]
---
layout: default
title: Contour Lines in Vector Tiles
---
# Contour Lines in Vector Tiles
Contour lines are a key element in topographic maps, as they allow us to
visualize the elevation of an area. In this tutorial, we will show you how
to create contour lines from a digital elevation model (DEM) and display
them using vector tiles.
## Prerequisites
To follow this tutorial, you will need to have `gdal` installed on your
system. If you don't have it already, you can install it by running the
following command:
```bash
sudo apt-get install gdal-bin
```
## Reprojecting the GeoTiff
We will be using the [ASTER](https://asterweb.jpl.nasa.gov/gdem.asp) dataset
for this example. The geotiff file provided in this tutorial is already in
the desired projection (WebMercator), but in case you want to use a different
geotiff file, you can use the gdalwarp command to reproject it. Here's an
example of how to do it:
```
gdalwarp -rc \
-s_srs epsg:4326 -t_srs epsg:3857 \
-dstnodata 0 -of GTiff -co tiled=yes \
liecthenstein-aster-dem-v2.tif \
liecthenstein-aster-dem-v2-3857.tif
```
## Generating the Contour Lines
Now that we have the GeoTiff in the desired projection,
we can use the gdal_contour command to generate the contour lines.
The `-a` argument specifies the column that contains the elevation data,
the `-i` argument specifies the interval at which contours
should be generated (in this case, we are using 10 meters),
and the `-nln` argument names the table that will contain the data.
```
gdal_contour \
-a elevation -nln aster_dem -i 10 \
-f PostgreSQL \
liecthenstein-aster-dem-v2-3857.tif "PG:host=localhost user=baremaps password=baremaps dbname=baremaps"
```
## Improving Performance with Indexes
To improve the performance of the contour lines,
we can add some indexes to the database.
Here's an example of how to create a `SPGIST` index:
```postgresql
DROP INDEX IF EXISTS aster_dem_gix;
CREATE INDEX IF NOT EXISTS aster_dem_gix ON aster_dem USING SPGIST(wkb_geometry);
```
## Displaying the Contour Lines
Finally, we can use Baremaps to display the contour lines in a web browser.
To do this, run the following command:
```bash
baremaps map dev \
--tileset 'tileset.json' \
--style 'style.json'
```
This will start the tile server and automatically reload the configuration
files when you make changes. You can then preview the map in your
web browser.
## Optional: Smoothing the Contour Lines
If you want to improve the rendering of the contour lines, you can use
a smoothing function like ST_ChaikinSmoothing. This function takes
a geometry as input and returns a smoothed version of that geometry.
Here's an example of how you could use it:
```postgresql
UPDATE aster_dem
SET wkb_geometry = ST_ChaikinSmoothing(wkb_geometry, 0.1)
```
Keep in mind that this step is optional and might not be necessary depending
on the quality of your input data. You can experiment with different
smoothing parameters to find the best balance between smoothness and
preservation of original features.
That's it! You now know how to generate and display contour lines from
a digital elevation model using vector tiles. Happy mapping!