8.3 Dados do IBGE
MongoDB

Este texto mostra como exportar coordenadas geográficas do IBGE (Instituto Brasileiro de Geografia e Estatística) e importar para uma coleção do MongoDB.
8.3.1 – Baixar os dados do IBGE
Na página de Downloads de Geociências do IBGE, pasta organização do território → estrutura territorial → localidades → Shapefile_SHP, foi baixado o arquivo BR_Localidades_2010_v1.dbf.
$ wget https://geoftp.ibge.gov.br/organizacao_do_territorio/estrutura_territorial/localidades/Shapefile_SHP/BR_Localidades_2010_v1.dbf
--2020-10-20 07:47:01-- https://geoftp.ibge.gov.br/organizacao_do_territorio/estrutura_territorial/localidades/Shapefile_SHP/BR_Localidades_2010_v1.dbf
Resolvendo geoftp.ibge.gov.br (geoftp.ibge.gov.br)... 170.84.40.11
Conectando-se a geoftp.ibge.gov.br (geoftp.ibge.gov.br)|170.84.40.11|:443... conectado.
A requisição HTTP foi enviada, aguardando resposta... 200 OK
Tamanho: 18231776 (17M)
Salvando em: “BR_Localidades_2010_v1.dbf”
BR_Localidades_2010_v1.dbf 100%[=========================================>] 17,39M 1,19MB/s em 14s
2020-10-20 07:47:17 (1,27 MB/s) - “BR_Localidades_2010_v1.dbf” salvo [18231776/18231776]
8.3.2 – Conversão dos dados do IBGE para GeoJSON
O arquivo BR_Localidades_2010_v1.dbf baixado do IBGE foi convertido para o formato GeoJSON através do GDAL ogr2ogr, que converte dados entre formatos de arquivo, usando os comandos:
$ export SHAPE_ENCODING="ISO-8859-1"
$ ogr2ogr -f GeoJSON BR_Localidades_2010_v1.geojson BR_Localidades_2010_v1.dbf -dialect SQLite -sql "SELECT ST_Point(LONG, LAT) AS geometry, * FROM BR_Localidades_2010_v1"
8.3.3 – Criação de uma coleção no MongoDB para receber os dados do IBGE
Para armazenar os dados baixados do IBGE foi criada a coleção BR_Localidades_2010_v1 usando os comandos:
$ mongo
MongoDB shell version v4.4.1
connecting to: mongodb://127.0.0.1:27017/
Implicit session: session { "id" : UUID("89757bfa-d1f6-443f-b297-179070584f10") }
MongoDB server version: 4.4.1
> // Usar o banco de dados reficio
> use reficio;
switched to db reficio
> // Se a coleção BR_Localidades_2010_v1 tiver documentos estes serão apagados
> db.getCollection("BR_Localidades_2010_v1").drop();
false
> // Criar a coleção BR_Localidades_2010_v1
> db.createCollection("BR_Localidades_2010_v1", {}, { collation: { locale: "pt", strength: 1 } } );
{ "ok" : 1 }
> // Mostrar as informações sobre a coleção
> db.getCollectionInfos({ name: "BR_Localidades_2010_v1" })
[
{
"name" : "BR_Localidades_2010_v1",
"type" : "collection",
"options" : {
},
"info" : {
"readOnly" : false,
"uuid" : UUID("e72fc858-062d-44b3-9506-60131b1d7033")
},
"idIndex" : {
"v" : 2,
"key" : {
"_id" : 1
},
"name" : "_id_"
}
}
]
>
8.3.4 – Importação dos dados
A importação dos dados do IBGE para a coleção BR_Localidades_2010_v1 do MongoDB foi feita através do utilitário mongoimport, conforme mostrado abaixo:
$ mongoimport \
> --db reficio \
> --collection BR_Localidades_2010_v1 \
> --file BR_Localidades_2010_v1.geojson
2020-10-20T07:59:33.989-0300 connected to: mongodb://localhost/
2020-10-20T07:59:36.130-0300 1 document(s) imported successfully. 0 document(s) failed to import.
8.3.5 – Um documento para cada ponto
Como pode ser visto acima, todos os pontos foram importados para um único documento. Para colocar cada ponto em um documento, foi criada e preenchida a coleção ibgelocalidades conforme mostrado abaixo:
$ mongo
MongoDB shell version v4.4.1
connecting to: mongodb://127.0.0.1:27017/
Implicit session: session { "id" : UUID("36ba58ee-cb32-4b49-8c0c-a949de817a4d") }
MongoDB server version: 4.4.1
> // Usar o banco de dados reficio
> use reficio;
switched to db reficio
> // Se a coleção ibgelocalidades tiver documentos estes serão apagados
> db.getCollection("ibgelocalidades").drop();
false
> // Criar a coleção ibgelocalidades
> db.createCollection("ibgelocalidades", {}, { collation: { locale: "pt", strength: 1 } } );
{ "ok" : 1 }
> // Criar um documento em ibgelocalidades para cada ponto em BR_Localidades_2010_v1
> db.BR_Localidades_2010_v1.find().forEach(function(data) {
... db.ibgelocalidades.insert( data.features );
... });
> // Mostrar as informações sobre a coleção
> db.getCollectionInfos({ name: "ibgelocalidades" })
[
{
"name" : "ibgelocalidades",
"type" : "collection",
"options" : {
},
"info" : {
"readOnly" : false,
"uuid" : UUID("eb9fe5c1-8b5c-4a23-821c-fceaa0e3f553")
},
"idIndex" : {
"v" : 2,
"key" : {
"_id" : 1
},
"name" : "_id_"
}
}
]
>
8.3.6 – Exemplo de consultas à coleção
$ mongo
MongoDB shell version v4.4.1
connecting to: mongodb://127.0.0.1:27017/
Implicit session: session { "id" : UUID("36ba58ee-cb32-4b49-8c0c-a949de817a4d") }
MongoDB server version: 4.4.1
> use reficio;
switched to db reficio
> db.ibgelocalidades.find().count();
21886
> db.ibgelocalidades.find({ $and: [
... {'properties.NM_UF' : 'RIO DE JANEIRO'},
... {'properties.NM_MUNICIP' : 'ANGRA DOS REIS'},
... {'properties.NM_BAIRRO' : 'FRADE'} ] }
... ).pretty();
{
"_id" : ObjectId("5f8ec5fcb6dd714b4ece9a2e"),
"type" : "Feature",
"properties" : {
"ID" : 14902,
"CD_GEOCODI" : "330010015000001",
"TIPO" : "URBANO",
"CD_GEOCODB" : "330010015057",
"NM_BAIRRO" : "FRADE",
"CD_GEOCODS" : "33001001500",
"NM_SUBDIST" : null,
"CD_GEOCODD" : "330010015",
"NM_DISTRIT" : "CUNHAMBEBE",
"CD_GEOCODM" : "3300100",
"NM_MUNICIP" : "ANGRA DOS REIS",
"NM_MICRO" : "BAÍA DA ILHA GRANDE",
"NM_MESO" : "SUL FLUMINENSE",
"NM_UF" : "RIO DE JANEIRO",
"CD_NIVEL" : "2",
"CD_CATEGOR" : "15",
"NM_CATEGOR" : "VILA",
"NM_LOCALID" : "CUNHAMBEBE",
"LONG" : -44.4361637206427,
"LAT" : -22.966426093929,
"ALT" : 2.908335,
"GMRotation" : 0
},
"geometry" : {
"type" : "Point",
"coordinates" : [
-44.4361637206427,
-22.966426093929
]
}
}
>
8.2.7 Municípios do Estado do Rio de Janeiro
Com a consulta mostrada abaixo são produzidos os dados necessários para mostrar os municípios do Estado do Rio de Janeiro usando a coleção ibgelocalidades no mapa.
$ mongo
MongoDB shell version v4.4.1
connecting to: mongodb://127.0.0.1:27017/
Implicit session: session { "id" : UUID("bf7ee107-da15-4345-91a7-e4da70cb603a") }
MongoDB server version: 4.4.1
> use reficio;
switched to db reficio
> db.ibgelocalidades.find(
... { $and: [ {'properties.NM_UF' : 'RIO DE JANEIRO'} , {'properties.NM_CATEGOR' : 'CIDADE'} ] },
... { 'type' : 1 ,
... 'properties.NM_MUNICIP' : 1 ,
... 'geometry' : 1 ,
... _id: 0
... }).pretty();
{
"type" : "Feature",
"properties" : {
"NM_MUNICIP" : "ANGRA DOS REIS"
},
"geometry" : {
"type" : "Point",
"coordinates" : [
-44.3196272622666,
-23.0091159352755
]
}
}
{
"type" : "Feature",
"properties" : {
"NM_MUNICIP" : "APERIBÉ"
},
"geometry" : {
"type" : "Point",
"coordinates" : [
-42.1049166541126,
-21.6194217697861
]
}
}
{
"type" : "Feature",
"properties" : {
"NM_MUNICIP" : "ARARUAMA"
},
"geometry" : {
"type" : "Point",
"coordinates" : [
-42.3410960231634,
-22.8774383873544
]
}
}
{
"type" : "Feature",
"properties" : {
"NM_MUNICIP" : "AREAL"
},
"geometry" : {
"type" : "Point",
"coordinates" : [
-43.1010698051683,
-22.2369120035668
]
}
}
{
"type" : "Feature",
"properties" : {
"NM_MUNICIP" : "ARMAÇÃO DOS BÚZIOS"
},
"geometry" : {
"type" : "Point",
"coordinates" : [
-41.8877494680881,
-22.7577637929238
]
}
}
{
"type" : "Feature",
"properties" : {
"NM_MUNICIP" : "ARRAIAL DO CABO"
},
"geometry" : {
"type" : "Point",
"coordinates" : [
-42.0283359676368,
-22.967638277584
]
}
}
{
"type" : "Feature",
"properties" : {
"NM_MUNICIP" : "BARRA DO PIRAÍ"
},
"geometry" : {
"type" : "Point",
"coordinates" : [
-43.8284524538255,
-22.469596292124
]
}
}
{
"type" : "Feature",
"properties" : {
"NM_MUNICIP" : "BARRA MANSA"
},
"geometry" : {
"type" : "Point",
"coordinates" : [
-44.1724313736866,
-22.5453011339305
]
}
}
{
"type" : "Feature",
"properties" : {
"NM_MUNICIP" : "BELFORD ROXO"
},
"geometry" : {
"type" : "Point",
"coordinates" : [
-43.3996249708152,
-22.7645559675461
]
}
}
{
"type" : "Feature",
"properties" : {
"NM_MUNICIP" : "BOM JARDIM"
},
"geometry" : {
"type" : "Point",
"coordinates" : [
-42.4172114822868,
-22.1533052283079
]
}
}
{
"type" : "Feature",
"properties" : {
"NM_MUNICIP" : "BOM JESUS DO ITABAPOANA"
},
"geometry" : {
"type" : "Point",
"coordinates" : [
-41.6776797949817,
-21.1344974418774
]
}
}
{
"type" : "Feature",
"properties" : {
"NM_MUNICIP" : "CABO FRIO"
},
"geometry" : {
"type" : "Point",
"coordinates" : [
-42.0200748019026,
-22.880764667133
]
}
}
{
"type" : "Feature",
"properties" : {
"NM_MUNICIP" : "CACHOEIRAS DE MACACU"
},
"geometry" : {
"type" : "Point",
"coordinates" : [
-42.6631643572627,
-22.4675708722497
]
}
}
{
"type" : "Feature",
"properties" : {
"NM_MUNICIP" : "CAMBUCI"
},
"geometry" : {
"type" : "Point",
"coordinates" : [
-41.9086360046562,
-21.5772767096589
]
}
}
{
"type" : "Feature",
"properties" : {
"NM_MUNICIP" : "CARAPEBUS"
},
"geometry" : {
"type" : "Point",
"coordinates" : [
-41.6640105958578,
-22.1825947273674
]
}
}
{
"type" : "Feature",
"properties" : {
"NM_MUNICIP" : "COMENDADOR LEVY GASPARIAN"
},
"geometry" : {
"type" : "Point",
"coordinates" : [
-43.2172237155871,
-22.0333589383828
]
}
}
{
"type" : "Feature",
"properties" : {
"NM_MUNICIP" : "CAMPOS DOS GOYTACAZES"
},
"geometry" : {
"type" : "Point",
"coordinates" : [
-41.3304764918626,
-21.7518986320641
]
}
}
{
"type" : "Feature",
"properties" : {
"NM_MUNICIP" : "CANTAGALO"
},
"geometry" : {
"type" : "Point",
"coordinates" : [
-42.365977599021,
-21.9818398587921
]
}
}
{
"type" : "Feature",
"properties" : {
"NM_MUNICIP" : "CARDOSO MOREIRA"
},
"geometry" : {
"type" : "Point",
"coordinates" : [
-41.6132963462101,
-21.4961573566676
]
}
}
{
"type" : "Feature",
"properties" : {
"NM_MUNICIP" : "CARMO"
},
"geometry" : {
"type" : "Point",
"coordinates" : [
-42.6097176406817,
-21.9293117801394
]
}
}
Type "it" for more
>
Uma consulta semelhante foi utilizada pelo programa ibge_cidades_rj_geojson.py para gerar o mapa mostrado abaixo;