Blog

Criando curvas de nível e relevo no OSM usando dados da SRTM

Neste artigo vou mostrar como dar um aspecto mais elegante aos seus mapas importados do OpenStreetMap, aplicando um efeito de relevo com curvas de nível, muito úteis quando a topografia for uma informação relevante em seus mapas. Usarei os arquivos DEM (Digital Elevation Model) fornecidos pela Shuttle Radar Topography Mission (SRTM) da NASA. Estes arquivos são distribuídos no formato HGT.

A versão que usarei (SRTMGL1) é a versão 3 (void filled) de 1 arco-segundo (30 metros) e cobertura global. Esta versão requer um cadastro no site do EarthData para ter acesso aos arquivos. Cada arquivo possui resolução de 3601 x 3601 pixels.

O primeiro passo é instalar o programa phyghtmap, que fará todo o trabalho de download e conversão dos arquivos.

apt-get install python-matplotlib

wget http://katze.tfiu.de/projects/phyghtmap/phyghtmap_1.80-1_all.deb

dpkg -i phyghtmap_1.80-1_all.deb

Agora, defina uma área para criar os relevos. Você precisará de um par de coordenadas delimitando uma caixa (bounding box) da área desejada. Eu costumo ir no site do OpenStreetMap, colocar o mapa na área desejada e selecionar “exportar”. As coordenadas da caixa aparecerão no lado esquerdo da tela. Use-as na sequência esquerda-baixo-direita-cima.

Atenção! Não defina uma área muito grande ou você poderá esperar dias até todos os arquivos HGT serem baixados da NASA. Vá compondo seu mapa aos poucos. Para ter uma ideia de quantos arquivos sua área vai precisar, use esta ferramenta: http://dwtkns.com/srtm30m/.

Para baixar e converter os arquivos HGT para um formato que possa ser importado para seu OpenStreetMap local, use este comando:

phyghtmap --pbf -–no-zero-contour -–line-cat=500,100 -–step=10 --jobs=8 --srtm=1 --a -44.978:-23.383:-40.902:-20.705 --earthdata-user=USUARIO --earthdata-password=SENHA

Onde:

--pbf significa que queremos arquivos PBF (formato do OSM).

--no-zero-contour significa que não queremos curvas de nível para altitude zero.

--line-cat=500,100 significa que queremos as curvas "major" a cada 500 metros e as curvas "medium" a cada 100 metros. Explico mais tarde a utilidade disso.

--step=10 significa que queremos um espaço de 10 metros entre as curvas. 

--jobs=8 vai utilizar 8 threads.

--srtm=1 é para usar a resolução de 1 arcseg.

--a é a área desejada, separada por dois pontos (":").

--earthdata-user=USUARIO é o usuário criado no site da NASA.

--earthdata-password=SENHA é a senha do usuário criado no site da NASA.

Cada “ladrilho” baixado da NASA (arquivo HGT) vai ser convertido em um arquivo do formato OSM (PBF), então precisaremos consolidar todos eles em um só, ou passaremos nossa vida toda fazendo a migração para o banco. Para fundir arquivos PBF, precisaremos do programa “osmium”.

Debian Jessie, adicionar ao /etc/apt/sources.list:
deb http://ftp.debian.org/debian jessie-backports main

apt-get install osmium-tool

osmium merge --verbose *.osm.pbf -o consolidado.osm.pbf --overwrite

Isso vai criar um arquivo PBF chamado consolidado.osm.pbf, pronto para ser importado para seu OpenStreetMap local. Obviamente, caso você execute esta linha de comando novamente, certifique-se de ter apagado o arquivo consolidado anterior, ou ele será incluído no novo consolidado, pois ordenamos uma fusão de todos os arquivos PBF encontrados no diretório (“*.osm.pbf”).

Eu gosto de deixar as curvas de nível em um banco de dados separado dos dados do OSM, embora eles sejam completamente compatíveis. Esta decisão fica para você.

Crie um banco de dados “contour” e adicione a extensão “PostGIS” a ele e importe os dados gerados para ele.

osm2pgsql  --latlong --verbose --create --style ./srtm.style --database contour --username postgres -W --host 127.0.0.1 consolidado.osm.pbf

Para criar tabelas mais enxutas, eu preparei um arquivo de estilo do osm2pgsql somente com os dados das curvas de nível. Eis meu arquivo “srtm.style”:

# OsmType  Tag          DataType     Flags
node,way   contour      text         linear
node,way   contour_ext  text         linear
node,way   ele          int4         linear

Com isso você terá dados somente na tabela “planet_osm_line”, contendo as colunas “contour”, “contour_ext” e “ele”, além da coluna de índice “osm_id”.

Agora você já poderá criar sua camada no Geoserver, apontando um Coverage para o banco “contour” e usando a tabela “planet_osm_line”. Se não quiser usar este nome, crie uma visão:

drop view if exists "contours_line";
create view "contours_line" AS (
  SELECT osm_id, way,ele as elevation, contour_ext as cont_ext
  FROM planet_osm_line
);

Perceba que mudei o nome de algumas colunas. Você poderá criar um bom estilo para sua camada. O resultado final em meu servidor você pode ver nas imagens a seguir:

As linhas mais grossas são os contornos “major” e “medium” e as mais finas são os “step”. No próximo artigo vou mostrar como criar o efeito de relevo, chamado de “hillshading”, usando os mesmos arquivos HGT baixados pelo phyghtmap.

 

NASA Jet Propulsion Laboratory (JPL), 2013, NASA Shuttle Radar Topography Mission United States 1 arc second. Version 3. 6oS, 69oW. NASA EOSDIS Land Processes DAAC, USGS Earth Resources Observation and Science (EROS) Center, Sioux Falls, South Dakota (https://lpdaac.usgs.gov)

 

 

 

 

 

 

 

 

0

About the Author:

Java EE developer and OSM Mapper.
  Related Posts
  • No related posts found.

You must be logged in to post a comment.