/ Tecnologia / Integração do … / 8.1 Dados do …

8.1 Dados do OpenStreetMap

MongoDB

OpenStreeMap - Seleção da área a ser exportada
OpenStreeMap - Seleção da área a ser exportada

Este texto mostra como exportar coordenadas geográficas do OpenStreetMap e importar para uma coleção do MongoDB.

8.1.1 – Exportação dos dados do OpenStreetMap a partir do mapa aberto no navegador

Com o OpenStreetMap aberto no navegador mostrando o Centro da Cidade do Rio de Janeiro, foi dado um clique no botão Exportar na parte superior da página, depois foi dado um clique em Selecionar outra área manualmente e selecionado o retângulo visto na imagem destacada. Em seguida foi foi dado um clique no botão Exportar para baixar os dados deste retângulo a partir do banco de dados do OpenStreetMap. O arquivo baixado tem o nome de map.osm.

8.1.2 – Conversão dos dados exportados do OpenStreetMap para GeoJSON

Foi feita a conversão para o formato GeoJSON através do GDAL ogr2ogr, que converte dados entre formatos de arquivo, usando o comando:

$ ogr2ogr -f GeoJSON map.geojson map.osm points
Warning 1: Input datasource uses random layer reading, but output datasource does not support random layer writing
0...10...20...30...40...50...60...70...80...90...100 - done.
8.1.3 – Criação de uma coleção no MongoDB para receber os dados do OpenStreetMap

Para armazenar os dados exportados do OpenStreetMap foi criada a coleção osmexport usando os comandos:

$ mongo
MongoDB shell version v4.4.1
connecting to: mongodb://127.0.0.1:27017/
Implicit session: session { "id" : UUID("f28aa5d8-3369-46be-9232-3364cd836496") }
MongoDB server version: 4.4.1
> use reficio;
switched to db reficio
> // Se a coleção osmexport tiver documentos estes serão apagados
> db.getCollection("osmexport").drop();
true
> // Criar a coleção osmexport
> db.createCollection("osmexport");
{ "ok" : 1 }
>
8.1.4 – Importação dos dados

A importação dos dados do OpenStreetMap para a coleção osmexport do MongoDB foi feita através do utilitário mongoimport, conforme mostrado abaixo:

$ mongoimport \
>     --db reficio \
>     --collection osmexport \
>     --file map.geojson
2020-10-19T11:35:40.638-0300    connected to: mongodb://localhost/
2020-10-19T11:35:40.722-0300    1 document(s) imported successfully. 0 document(s) failed to import.
8.1.5 – Um documento para cada ponto

Como pode ser visto acima, todos os pontos foram importados para um único documento. Para colocar cada feição em um documento, foi criada e preenchida a coleção osmpoints conforme mostrado abaixo:

$ mongo
MongoDB shell version v4.4.1
connecting to: mongodb://127.0.0.1:27017/
Implicit session: session { "id" : UUID("1a87a33d-4362-495d-a6b7-3de3ccee00bb") }
MongoDB server version: 4.4.1
> use reficio;
switched to db reficio
> // Se a coleção osmpoints tiver documentos estes serão apagados
> db.osmpoints.drop();
false
> // Criar a coleção osmpoints
> db.createCollection("osmpoints");
{ "ok" : 1 }
> // Criar um documento em osmpoints para cada ponto em osmexport
> db.osmexport.find().forEach(function(data) {
...     db.osmpoints.insert( data.features );
... });
> 
8.1.6 – Exemplo de consulta à coleção

Selecionar os pontos com a tag: “denomination=>catholic”

$ mongo
MongoDB shell version v4.4.1
connecting to: mongodb://127.0.0.1:27017/
Implicit session: session { "id" : UUID("1a87a33d-4362-495d-a6b7-3de3ccee00bb") }
MongoDB server version: 4.4.1
> use reficio
switched to db reficio
> db.osmpoints.find( 
...     { 'properties.other_tags' : RegExp('"denomination"=>"catholic"')},
...     { 'type' : 1 , 'properties.name' : 1, 'geometry' : 1, _id: 0}
... ).pretty();
{
        "type" : "Feature",
        "properties" : {
                "name" : "Igreja de Nossa Senhora do Rosário e São Benedito dos Homens Pretos"
        },
        "geometry" : {
                "type" : "Point",
                "coordinates" : [
                        -43.1803813,
                        -22.9041351
                ]
        }
}
{
        "type" : "Feature",
        "properties" : {
                "name" : "Igreja de Nossa Senhora do Parto"
        },
        "geometry" : {
                "type" : "Point",
                "coordinates" : [
                        -43.1769091,
                        -22.9058593
                ]
        }
}
{
        "type" : "Feature",
        "properties" : {
                "name" : "Igreja de Nossa Senhora do Terço e Senhor dos Passos"
        },
        "geometry" : {
                "type" : "Point",
                "coordinates" : [
                        -43.182868,
                        -22.905319
                ]
        }
}
{
        "type" : "Feature",
        "properties" : {
                "name" : "Igreja de Nossa Senhora da Conceição e Boa Morte"
        },
        "geometry" : {
                "type" : "Point",
                "coordinates" : [
                        -43.1787691,
                        -22.9030222
                ]
        }
}
> 
8.1.7 Visualizar os pontos da consulta anterior no mapa