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

8.7 Dados do Rio

MongoDB

Página DATA.RIO/IPP Locais de Referência
Página DATA.RIO/IPP Locais de Referência

Este texto mostra como exportar coordenadas geográficas do site DATA.RIO da Prefeitura da Cidade do Rio de Janeiro / Instituto Municipal de Urbanismo Pereira Passos e importar para coleções do MongoDB.

8.7.1 – Exportação dos dados

Na página do portal procure primeiro por Locais de Referência para abrir a página Locais de Referência. Na página exibida, ao se clicar no menu suspenso Download▼ são mostradas três opções para baixar o Conjunto de Dados Completo: Planilha (CSV), KML e Shapefile. Na planilha (arquivo Locais_de_Referência.csv) é usada a referência espacial EPSG Projection 29183 - SAD69 / UTM zone 23S (Brasil de 48°Oeste a 42°Oeste) e não a WGS-84. Por isso vamos clicar em KML para baixar o arquivo Locais_de_Referência.kml que já tem as coordenadas convertidas de UTM para graus decimais prontas para usar no mapa.

Em seguida procure por bairro e clique em Limite de Bairros para abrir a página Limite de Bairros. Na página exibida, ao se clicar no menu suspenso Download▼ são mostradas três opções para baixar o Conjunto de Dados Completo: Planilha (CSV), KML e Shapefile. Novamente vamos clicar em KML para baixar o arquivo Limite_de_Bairros.kml pelo mesmo motivo acima.

8.7.2 – Conversão dos dados para o formato GeoJSON

Agora vamos converter os dois arquivos baixados no formato KML para o formato GeoJSON usando o programa ogr2ogr, que converte dados entre formatos de arquivo, usando os comandos:

ogr2ogr -f GeoJSON Locais_de_Referência.geojson Locais_de_Referência.kml
ogr2ogr -f GeoJSON Limite_de_Bairros.geojson Limite_de_Bairros.kml
8.7.3 – Criar as coleções no MongoDB para receber os dados

Para armazenar os dados baixados da Prefeitura do Rio foram criadas as coleções PCRJ_Locais_de_Referência e PCRJ_Limite_de_Bairros, usando os comandos:

$ mongo
MongoDB shell version v4.4.1
connecting to: mongodb://127.0.0.1:27017/
Implicit session: session { "id" : UUID("ae70b2fa-9f42-4301-96e8-7d702f5f59dc") }
MongoDB server version: 4.4.1
> // Usar o banco de dados reficio
> use reficio;
switched to db reficio
> // Se as coleções tiverem documentos estes serão apagados
> db.getCollection("PCRJ_Locais_de_Referencia").drop();
false
> db.getCollection("PCRJ_Limite_de_Bairros").drop();
false
> // Criar as coleções
> db.createCollection("PCRJ_Locais_de_Referencia", {}, { collation: { locale: "pt", strength: 1 } } );
{ "ok" : 1 }
> db.createCollection("PCRJ_Limite_de_Bairros", {}, { collation: { locale: "pt", strength: 1 } } );
{ "ok" : 1 }
8.7.4 – Importação dos dados

A importação dos dados da Prefeitura do Rio para as duas coleções do MongoDB foi feita através do utilitário mongoimport, conforme mostrado abaixo:

$ mongoimport \
>     --db reficio \
>     --collection PCRJ_Locais_de_Referencia \
>     --file Locais_de_Referência.geojson
2020-11-03T16:21:54.471-0300    connected to: mongodb://localhost/
2020-11-03T16:21:54.533-0300    1 document(s) imported successfully. 0 document(s) failed to import.
$ mongoimport \
>     --db reficio \
>     --collection PCRJ_Limite_de_Bairros \
>     --file Limite_de_Bairros.geojson
2020-11-03T16:21:54.548-0300    connected to: mongodb://localhost/
2020-11-03T16:21:55.286-0300    1 document(s) imported successfully. 0 document(s) failed to import.
8.7.5 – Um documento para cada feição

Como pode ser visto acima, todos os pontos e limites foram importados para um único documento da coleção. Para colocar cada feição em um documento, foram criadas duas coleções conforme mostrado abaixo:

> // Usar o banco de dados reficio
> use reficio;
switched to db reficio
> // Apagar/Criar as coleções e colocar cada feição em um documento
> db.getCollection("PCRJ_Locais").drop();
true
> db.createCollection("PCRJ_Locais", {}, { collation: { locale: "pt", strength: 1 } } );
{ "ok" : 1 }
> db.PCRJ_Locais_de_Referencia.find().forEach(function(data) {
...     db.PCRJ_Locais.insert( data.features );
... });
> db.getCollection("PCRJ_Bairros").drop();
true
> db.createCollection("PCRJ_Bairros", {}, { collation: { locale: "pt", strength: 1 } } );
{ "ok" : 1 }
> db.PCRJ_Limite_de_Bairros.find().forEach(function(data) {
...     db.PCRJ_Bairros.insert( data.features );
... });

Para ver o número de documentos em cada uma dessas coleções foram executados os comandos:

> db.PCRJ_Locais.count();
1210
> db.PCRJ_Bairros.count();
163
8.7.6 Morros do Município do Rio de Janeiro

Para listar os nomes dos morros do Rio presentes na coleção PCRJ_Locais foi utilizada a consulta mostrada abaixo:

> db.PCRJ_Locais.find({'properties.Nome' : RegExp('^Morro')},
... {'properties.Nome' : 1, _id: 0});
{ "properties" : { "Nome" : "Morro do Cochrane" } }
{ "properties" : { "Nome" : "Morro da Taquara" } }
{ "properties" : { "Nome" : "Morro Queimado" } }
{ "properties" : { "Nome" : "Morro do Inácio Dias" } }
{ "properties" : { "Nome" : "Morro do Engenho da Rainha" } }
{ "properties" : { "Nome" : "Morro dos Urubus" } }
{ "properties" : { "Nome" : "Morro do Dendê" } }
{ "properties" : { "Nome" : "Morro da Serrinha" } }
{ "properties" : { "Nome" : "Morro do Juramento" } }
{ "properties" : { "Nome" : "Morro da Bica" } }
{ "properties" : { "Nome" : "Morro do Sapê" } }
{ "properties" : { "Nome" : "Morro da Freguesia" } }
{ "properties" : { "Nome" : "Morro Dois Irmãos" } }
{ "properties" : { "Nome" : "Morro da Reunião" } }
{ "properties" : { "Nome" : "Morro da Ligação" } }
{ "properties" : { "Nome" : "Morro da Aliança" } }
{ "properties" : { "Nome" : "Morro Santo" } }
{ "properties" : { "Nome" : "Morro da Boiúna" } }
{ "properties" : { "Nome" : "Morro do Valqueire" } }
{ "properties" : { "Nome" : "Morro Jorge Turco" } }
Type "it" for more
8.7.7 Bairros do Município do Rio de Janeiro

Para listar os nomes dos bairros do Rio presentes na coleção PCRJ_Bairros foi utilizada a consulta mostrada abaixo:

> db.PCRJ_Bairros.find({},{'properties.NOME' : 1, _id : 0});
{ "properties" : { "NOME" : "Paquetá" } }
{ "properties" : { "NOME" : "Freguesia (Ilha)" } }
{ "properties" : { "NOME" : "Bancários" } }
{ "properties" : { "NOME" : "Galeão" } }
{ "properties" : { "NOME" : "Tauá" } }
{ "properties" : { "NOME" : "Portuguesa" } }
{ "properties" : { "NOME" : "Moneró" } }
{ "properties" : { "NOME" : "Vigário Geral" } }
{ "properties" : { "NOME" : "Cocotá" } }
{ "properties" : { "NOME" : "Jardim América" } }
{ "properties" : { "NOME" : "Jardim Carioca" } }
{ "properties" : { "NOME" : "Pavuna" } }
{ "properties" : { "NOME" : "Cordovil" } }
{ "properties" : { "NOME" : "Jardim Guanabara" } }
{ "properties" : { "NOME" : "Parada de Lucas" } }
{ "properties" : { "NOME" : "Parque Colúmbia" } }
{ "properties" : { "NOME" : "Praia da Bandeira" } }
{ "properties" : { "NOME" : "Penha Circular" } }
{ "properties" : { "NOME" : "Cacuia" } }
{ "properties" : { "NOME" : "Irajá" } }
Type "it" for more