Dados do IBGE

MongoDB

Página de Downloads de Geociências do IBGE
Página de Downloads de Geociências 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.3.1 – Baixar os dados do IBGE

Na página de Downloads de Geociências do IBGE, pasta organização do territórioestrutura territoriallocalidadesShapefile_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;