Dados da Geofabrik

MongoDB

MongoDB Compass - Banco de Dados reficio, coleções com as regiões do Brasil
MongoDB Compass - Banco de Dados reficio, coleções com as regiões do Brasil

A Geofabrik foi criada com a convicção de que geodados gratuitos, criados por projetos como o OpenStreetMap, se tornarão cada vez mais atraentes para uso comercial.

Os dados gratuitos mantidos pela comunidade, como os produzidos pelo projeto OpenStreetMap, são uma alternativa real aos dados oferecidos pelos principais participantes deste negócio. Esses dados não são apenas gratuitos, mas também vêm com menos restrições de licença do que os demais ofertados.

O servidor de download em https://download.geofabrik.de disponibiliza dados extraídos do conjunto de dados do OpenStreetMap para download gratuito. A maioria desses arquivos é atualizada todos os dias - qualquer alteração enviada para o OpenStreetMap deverá estar no servidor de download no dia seguinte.

Os dados no servidor de download são organizados por região. O diretório raiz contém arquivos que contêm dados de um continente inteiro, e para todos os continentes, exceto Antártica, há subdiretórios onde são encontrados arquivos individuais para vários países. Alguns países têm seus próprios subdiretórios com dados para subdivisões administrativas.

No caso do Brasil existem arquivos distintos para as regiões Centro-Oeste, Nordeste, Norte, Sudeste e Sul. Aqui usaremos os dados da Região Norte, e será baixado o arquivo no formato .osm.pbf, uma vez que é bem menor do que nos outros formatos.

8.2.1 – Conversão dos dados da Geofabrik 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 norte-latest.geojson norte-latest.osm.pbf 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.2.2 – Criação de uma coleção no MongoDB para receber os dados baixados da Geofabrik

Para armazenar os dados exportados da Geofabrik foi criada a coleção norte usando os comandos:

$ mongo
MongoDB shell version v4.4.1
connecting to: mongodb://127.0.0.1:27017/
Implicit session: session { "id" : UUID("729cee70-98c9-4698-ae70-37c6880813fe") }
MongoDB server version: 4.4.1
> // Usar o banco de dados reficio
> 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", {}, { collation: { locale: "pt", strength: 1 } } );
{ "ok" : 1 }
> // Mostrar as informações sobre a coleção
> db.getCollectionInfos({ name: "osmexport" })
[
	{
		"name" : "osmexport",
		"type" : "collection",
		"options" : {

		},
		"info" : {
			"readOnly" : false,
			"uuid" : UUID("ebfb47cd-cec9-445a-9502-1fd13467a87f")
		},
		"idIndex" : {
			"v" : 2,
			"key" : {
				"_id" : 1
			},
			"name" : "_id_"
		}
	}
]
>
8.2.3 – Importação dos dados

Como os documentos do Mongo não podem ser maiores que 16 MB, o arquivo norte-latest.geojson foi editado de forma a que se tornasse um jsonArray, mudando da FeatureCollection

{
"type": "FeatureCollection",
"name": "points",
"crs": { "type": "name", "properties": { "name": "urn:ogc:def:crs:OGC:1.3:CRS84" } },
"features": [
{ "type": "Feature", "properties": { "osm_id": "94722686", "other_tags": "\"amenity\"=>\"ferry_terminal\"" }, "geometry": { "type": "Point", "coordinates": [ -48.6652009, -0.8863673 ] } },
...
{ "type": "Feature", "properties": { "osm_id": "8017511285", "name": "Apreensão 17\/10\/20", "other_tags": "\"shop\"=>\"variety_store\"" }, "geometry": { "type": "Point", "coordinates": [ -61.1241779, 4.4953679 ] } }
]
}

para o array

[
{ "type": "Feature", "properties": { "osm_id": "94722686", "other_tags": "\"amenity\"=>\"ferry_terminal\"" }, "geometry": { "type": "Point", "coordinates": [ -48.6652009, -0.8863673 ] } },
...
{ "type": "Feature", "properties": { "osm_id": "8017511285", "name": "Apreensão 17\/10\/20", "other_tags": "\"shop\"=>\"variety_store\"" }, "geometry": { "type": "Point", "coordinates": [ -61.1241779, 4.4953679 ] } }
]

e salvando como norte.geojson

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

$ mongoimport \
>     --db reficio \
>     --collection norte \
>     --file norte.geojson \
>     --jsonArray
2020-10-19T18:55:55.858-0300    connected to: mongodb://localhost/
2020-10-19T18:55:58.858-0300    [###############.........] reficio.norte        19.4MB/30.1MB (64.4%)
2020-10-19T18:56:00.488-0300    [########################] reficio.norte        30.1MB/30.1MB (100.0%)
2020-10-19T18:56:00.488-0300    151039 document(s) imported successfully. 0 document(s) failed to import.

Nota: Poderia ter sido usado o programa Ruby split_geojson.rb para dividir o arquivo norte-latest.geojson em vários arquivos, um para cada feição, conforme foi feito em Dados do GeoNames, porém a carga de milhares de arquivos contendo uma feição cada é bastante demorada.

8.2.4 – Exemplo de consulta à coleção
$ mongo
MongoDB shell version v4.4.1
connecting to: mongodb://127.0.0.1:27017/
Implicit session: session { "id" : UUID("cc6b3eeb-bcd2-4588-8dca-cdcfdc310a4d") }
MongoDB server version: 4.4.1
> use reficio;
switched to db reficio
> db.norte.find( 
...     { 'properties.other_tags' : RegExp('"denomination"=>"catholic"')},
...     { 'type' : 1 , 'properties.name' : 1, 'geometry' : 1, _id: 0}
... ).pretty();
{
        "type" : "Feature",
        "properties" : {
                "name" : "Sagrado Coração de Jesús"
        },
        "geometry" : {
                "type" : "Point",
                "coordinates" : [
                        -46.7701122,
                        -1.0657624
                ]
        }
}
{
        "type" : "Feature",
        "properties" : {
                "name" : "Nossa Senhora do Perpétuo Socorro"
        },
        "geometry" : {
                "type" : "Point",
                "coordinates" : [
                        -46.7704184,
                        -1.0460665
                ]
        }
}
{
        "type" : "Feature",
        "properties" : {

        },
        "geometry" : {
                "type" : "Point",
                "coordinates" : [
                        -46.6721506,
                        -0.9926533
                ]
        }
}
{
        "type" : "Feature",
        "properties" : {
                "name" : "Santa Luzia"
        },
        "geometry" : {
                "type" : "Point",
                "coordinates" : [
                        -46.8693646,
                        -1.1054256
                ]
        }
}
{
        "type" : "Feature",
        "properties" : {
                "name" : "Nossa Senhora das Graças"
        },
        "geometry" : {
                "type" : "Point",
                "coordinates" : [
                        -46.7352632,
                        -1.076195
                ]
        }
}
{
        "type" : "Feature",
        "properties" : {
                "name" : "Igreja de Nossa Senhora de Fátima"
        },
        "geometry" : {
                "type" : "Point",
                "coordinates" : [
                        -46.9657602,
                        -1.1528082
                ]
        }
}
{
        "type" : "Feature",
        "properties" : {

        },
        "geometry" : {
                "type" : "Point",
                "coordinates" : [
                        -46.765432,
                        -1.1152045
                ]
        }
}
{
        "type" : "Feature",
        "properties" : {

        },
        "geometry" : {
                "type" : "Point",
                "coordinates" : [
                        -46.773158,
                        -1.1195763
                ]
        }
}
{
        "type" : "Feature",
        "properties" : {
                "name" : "Nossa Senhora de Nazaré"
        },
        "geometry" : {
                "type" : "Point",
                "coordinates" : [
                        -46.7271496,
                        -1.1146361
                ]
        }
}
{
        "type" : "Feature",
        "properties" : {
                "name" : "Nossa Senhora da Imaculada Conceição"
        },
        "geometry" : {
                "type" : "Point",
                "coordinates" : [
                        -46.8039769,
                        -1.1110444
                ]
        }
}
{
        "type" : "Feature",
        "properties" : {

        },
        "geometry" : {
                "type" : "Point",
                "coordinates" : [
                        -46.6406641,
                        -1.0607266
                ]
        }
}
{
        "type" : "Feature",
        "properties" : {

        },
        "geometry" : {
                "type" : "Point",
                "coordinates" : [
                        -46.6443842,
                        -1.0538155
                ]
        }
}
{
        "type" : "Feature",
        "properties" : {
                "name" : "Nossa Senhora do Libramento"
        },
        "geometry" : {
                "type" : "Point",
                "coordinates" : [
                        -47.3932939,
                        -0.9621689
                ]
        }
}
{
        "type" : "Feature",
        "properties" : {
                "name" : "Sta. Maria"
        },
        "geometry" : {
                "type" : "Point",
                "coordinates" : [
                        -48.4834011,
                        -0.6378787
                ]
        }
}
{
        "type" : "Feature",
        "properties" : {

        },
        "geometry" : {
                "type" : "Point",
                "coordinates" : [
                        -46.813795,
                        -1.0726795
                ]
        }
}
{
        "type" : "Feature",
        "properties" : {

        },
        "geometry" : {
                "type" : "Point",
                "coordinates" : [
                        -47.0578847,
                        -1.2434751
                ]
        }
}
{
        "type" : "Feature",
        "properties" : {
                "name" : "Igreja Católica Apostólica Romana"
        },
        "geometry" : {
                "type" : "Point",
                "coordinates" : [
                        -61.7801152,
                        -11.9089879
                ]
        }
}
{
        "type" : "Feature",
        "properties" : {

        },
        "geometry" : {
                "type" : "Point",
                "coordinates" : [
                        -49.1116029,
                        -4.446863
                ]
        }
}
{
        "type" : "Feature",
        "properties" : {
                "name" : "Igreja Católica"
        },
        "geometry" : {
                "type" : "Point",
                "coordinates" : [
                        -60.0391363,
                        -3.0874001
                ]
        }
}
{
        "type" : "Feature",
        "properties" : {
                "name" : "Igreja Catolica"
        },
        "geometry" : {
                "type" : "Point",
                "coordinates" : [
                        -47.3554276,
                        -2.9963285
                ]
        }
}
Type "it" for more
>