Blog

Importando os arquivos do OSM para o PostgreSQL: Parte 1

Após preparar o ambiente do PostgrSQL, é hora de importar os dados do OSM. No site Geofabrik existem vários arquivos de dados onde você pode escolher a área de cobertura desejada, desde todo o planeta até países. Além disso, acessando http://www.openstreetmap.org você poderá baixar os dados de uma área a sua escolha.

Eu vou importar os dados da América do Sul, mas se as coisas ficarem difíceis devido a requisitos de memória e processamento, escolha um arquivo menor. Baixe sempre arquivos tipo PBF.

wget http://download.geofabrik.de/south-america-latest.osm.pbf

Você também vai precisar de um arquivo chamado default.style. Este arquivo vai informar ao programa de importação o que você quer e o que não quer mandar para o banco de dados. Eu não sei o motivo deste arquivo se chamar style, já que não tem nada a ver com estilos, e sim com filtro de dados.

Antes de puxar o gatilho vou explicar uma coisa: o resultado disso tudo será a criação de 4 tabelas em seu banco de dados (vai criar um pouco mais, porém as tabelas do OSM são só 4):

planet_osm_point
planet_osm_polygon
planet_osm_line
planet_osm_roads

Os nomes são intuitivos. O que eu quero explicar é o seguinte: todas as tabelas terão a mesma estrutura, baseado no que você decidir no arquivo default.style. A estrutura do OSM funciona baseada em elementos chamados tags. Cada tag pode possuir uma certa quantidade de valores. O site http://taginfo.openstreetmap.org/ permite consultar todas as tags e seus possíveis valores. A tag amenity, por exemplo, possui a seguinte descrição no site:

For describing useful and important facilities for visitors and residents.

Esta tag possui valores como parking, place_of_worship, school, bank, fuel, etc…

Tag Amenity

O site descreve em detalhes o que significa cada um destes valores para todas as tags e como eles se relacionam entre si quando agrupados com outras tags para dar sentido à informação.

Posto

Podemos encontrar também a informação de onde esta tag é mais frequente observando a “Visão Geral”. O exemplo da imagem acima significa que esta informação pode ocorrer mais frequentemente como pontos. Após a importação dos dados, cada tag irá se tornar uma coluna nas tabelas do OSM e seus valores serão as linhas destas tabelas. Daí pode-se concluir que as tabelas do OSM não são normalizadas e possuem uma vasta quantidade de valores nulos, dependendo da consulta que você fizer.

Consulta Bancos

Consultando estes bancos da tag “amenity”…

 

...resulta neste mapa

…resulta neste mapa

Obviamente existem muito mais bancos na Rua das Laranjeiras (RJ). Isso depende da combinação de valores com outras tags. Nem todos os bancos possuem a tag “addr:street” preenchidas. Nesse caso eu deveria consultar os bancos usando o bounding box das coordenadas geográficas de Laranjeiras. Perto dos nossos bancos existem quatro telefones públicos (dois postes com dois telefones cada). Um na praça e outro perto do Santander. Vamos ligar para eles?

Consulta Telefones Públicos Laranjeiras

Nesta consulta eu mandei pesquisar tudo da tabela de pontos (a rua e a ciclovia em azul estão na tabela de linhas e a praça na tabela de polígonos) dentro de um raio de 60 metros das coordenadas do Banco do Brasil (serve do Santander também) . Para conseguir estas coordenadas, modifique a consulta dos bancos para:

select 
  "addr:street", amenity, "name" , ST_AsText(way) as coordenadas
from 
  planet_osm_point 
where 
  amenity = 'bank' and 
  "addr:street" = 'Rua das Laranjeiras'

Isso vai mostrar as coordenadas dos elementos encontrados. Bem, o que eu quis deixar claro é a relação entre as tags do OSM e as colunas das tabelas no banco de dados, bem como mostrar que vão existir colunas que não são preenchidas porque não fazem sentido junto com outras informações (o banco não tem operador e o telefone não tem nome). Já deu para notar que, se você não quiser mapas, tudo bem: você terá uma boa massa de dados para fazer todo tipo de consultas interessantes em seus aplicativos.

Algo mais útil: Telefones de farmácias próximas.

Algo mais útil: Telefones de farmácias próximas.

Um arquivo default.style irá se parecer com isso:

node,way   admin_level  text         linear
node,way   aerialway    text         linear
node,way   aeroway      text         polygon
node,way   amenity      text         polygon
node,way   barrier      text         linear
node,way   bicycle      text         linear
node,way   brand        text         linear
node,way   bridge       text         linear
node,way   boundary     text         linear
node,way   electrified  text         linear
node,way   building     text         polygon

O arquivo original de exemplo contém uma boa descrição do que significam estes valores e como consultar o site taginfo para criar seus próprios critérios de importação.

Como este post já ficou bem grande, vou deixar a importação dos dados do OSM para o próximo.

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.