Blog

Importando arquivos do OSM para o PostgreSQL: Parte 2

Agora que todo o ambiente foi preparado, é hora de prosseguir com a importação dos dados do OSM para o banco de dados.  Você vai precisar do osm2pgsql. No Debian / Ubuntu basta usar o apt:

apt-get install osm2pgsql

A seguinte linha de comando vai importar os dados do arquivo south-america-lastest.osm.pbf para a tabela osm de seu banco de dados PostgreSQL no IP 127.0.0.1, orientado pelo arquivo default.style. Pelo menos 100GB de espaço em disco é necessário durante a importação. A configuração usada por mim foi um Core i5 3.2GHz com 16GB de RAM e 4 núcleos rodando um Ubuntu 14.04 LTS.

osm2pgsql -c -k --slim -C 8000 --flat-nodes ./fn -d osm -U postgres -H 127.0.0.1  -S ./default.style ./south-america-latest.osm.pbf

Este comando vai demorar bastante. Aqui você encontrará uma lista com todas as opções de execução do osm2pgsql. Uma opção útil é a –latlong, que converte a projeção para EPSG 4326 ( a do OSM é a mesma do Google – 900913 ). Recomenda-se que a opção –flat-nodes seja usada somente com a importação do arquivo completo (planet). Um outro exemplo de importação:

osm2pgsql --latlong --keep-coastlines --verbose --create --hstore --slim --cache 8000 --database osm --username postgres --host 127.0.0.1 --style ./default.style ./brazil-latest.osm.pbf

Ao final, se tudo correr bem, as seguintes tabelas serão criadas no banco de dados:

planet_osm_point
planet_osm_polygon
planet_osm_line
planet_osm_roads

Se algo der errado, provavelmente o erro está relacionado com a configuração da sua máquina (memória, disco e processador). Este procedimento é muito exigente. Existem outras tabelas usadas pelo importador:

planet_osm_nodes
planet_osm_rels
planet_osm_ways

mas você poderá optar por apagá-las se desejar, porém, existe um programa que mantém seus dados atualizados, baixando as modificações diretamente do site do OpenStreetMap que precisará destas tabelas. Se quiser liberar espaço e não se importar com atualizações, pode apagá-las. Não esqueça de apagar o arquivo “./fn” criado no mesmo diretório onde você executou o osm2pgsql. Ele é um arquivo de cache bem grande usado na importação e não será mais necessário.

Agora vem a parte divertida. Como eu havia dito anteriormente, as tabelas do OSM não são normalizadas, então não é aconselhável criar camadas no seu GeoServer apontando diretamente para elas. O ideal é que você estude as necessidades das suas fontes de dados e crie tabelas (ou visões) separadas para cada camada que será criada. Por exemplo: digamos que você queira exibir no mapa as áreas ocupadas por escolas, hospitais e universidades. As áreas estão na tabela planet_osm_polygon. Você poderá criar uma tabela ou visão que contenha somente os dados necessários. As tabelas são úteis para criar índices, o que acelera consideravelmente a consulta, mas duplica os dados e não permite atualizações. As visões são boas para economizar espaço, pois os dados continuam nas tabelas originais do OSM, mas são muito mais lentas de consultar.  Aqui eu optei por usar uma tabela:

DROP TABLE IF EXISTS "amenity-areas";

CREATE TABLE "amenity-areas" AS (
  SELECT way,amenity FROM planet_osm_polygon
  WHERE amenity IN ('hospital','college','school','university') 
  AND (building IS NULL OR building NOT IN ('no'))
);

CREATE INDEX 
  "amenity-areas_way_idx" ON 
  "amenity-areas" USING gist (way);

Mais uma vez eu usei a tag amenity como exemplo. A Boundless criou um script SQL que cria várias tabelas usadas no exemplo que tomei como referência. Você poderá utilizá-lo se desejar criar um mapa como este de forma rápida:

Geoexplorer

Resultado da importação

O software que você vê na imagem é o meu GeoExplorer, que estou desenvolvendo para criar diversos tipos de mapas temáticos. Falo dele mais tarde. Mas somente com os dados você não conseguirá este excelente resultado gráfico. É necessário criar os estilos que irão decorar os elementos no Geoserver. Os estilos informam ao Geoserver como uma linha, área ou ponto devem ser exibidos no mapa, como as estradas em cores e larguras diferentes na imagem acima, por exemplo. Eles também controlam quando algo deve ou não ser mostrado no mapa, dependendo do nível de zoom em que você está.

Infelizmente o OSM só oferece os dados. A criação de estilos é por nossa conta. Por sorte o pessoal da Boundless (Aaron MillerJoseph Miller) também criou vários estilos que deixam o mapa muito parecido com o que você vê no site do OpenStreetMap e que usei para criar o da imagem acima. Caso você deseje usá-lo, baixe e descompacte o arquivo. Edite o arquivo ./SLD_create.sh e configure as variáveis de acordo com seu ambiente.

restapi=http://localhost:8080/geoserver/rest
login=admin:geoserver
workspace=osm
store=openstreetmap

Forneça o endereço de seu servidor, as credenciais de login, o workspace e store que você quer as suas camadas do OSM. O workspace e o store já deverão estar criados, com o store apontando para a tabela osm no banco de dados criado nos passos anteriores. Este script irá criar todas as camadas e estilos necessários. Tudo que você precisa fazer é ir em seu Geoserver e criar um layergroup unindo tudo, ou de acordo com suas necessidades. Eu preferi agrupar alguns elementos…

Grupo de Camadas

… como as rodovias.

Rodovias agrupadas

Não entrei em detalhes sobre como usar o Geoserver, mas se sentir alguma dificuldade ou se perceber algum link quebrado, entre em contato que terei prazer em ajudar.

 

 

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.