8.2 Dados do IBGE

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.2.1 – Exportação dos dados do IBGE

Na página de Downloads de Geociências do IBGE foi baixado o arquivo BR_Localidades_2010_v1.dbf do diretório Shapefile_SHP (veja imagem destacada).

8.2.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.2.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
use reficio;
db.createCollection("BR_Localidades_2010_v1");

8.2.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

que produziu a saída:

2018-05-14T16:20:14.774-0300    connected to: localhost
2018-05-14T16:20:16.110-0300    imported 1 document

8.2.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 a coleção ibgelocalidades conforme mostrado abaixo:

$ mongo
use reficio;
db.createCollection("ibgelocalidades", {}, { collation: { locale: "pt", strength: 1 } } );

e executado o comando:

db.BR_Localidades_2010_v1.find().forEach(function(data) {
    db.ibgelocalidades.insert( data.features );
});

8.2.6 – Exemplo de consultas à coleção

$ mongo
> 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("5af9e5833a0b1bbd96a39550"),
        "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 Mapa das cidades do Estado do Rio de Janeiro

Para ver as cidades do Estado do Rio de Janeiro no mapa foi criado o script ibge_cidades_rj.py em Python que gera o arquivo GPX (GPS eXchange Format) ibge_cidades_rj.gpx. O mapa é visto abaixo no OpenStreetMap.

8. Dados externos