8.9 Dados do Rio

Este texto mostra como exportar coordenadas geográficas do Portal de Dados Geográficos Abertos da Cidade do Rio de Janeiro e importar para coleções do MongoDB.

8.9.1 – Exportação dos dados

Na página do portal procure primeiro por locais de referência. No resultado mostrado, ao se clicar na seta de download no canto direito superior, são mostradas três opções: Spreadsheet, KML e Shapefile. Escolha Spreadsheet para baixar o arquivo Locais_de_Referência.csv.

Em seguida, na mesma página, procure por limite bairro. No resultado mostrado, ao se clicar na seta de download no canto direito superior, vão ser mostradas novamente as três opções: Spreadsheet, KML e Shapefile. Escolha desta vez KML para baixar o arquivo Limite_Bairro.kml. No formato Shapefile é usada a referência espacial SAD69 / UTM zone 23S e não WGS-84.

8.9.2 – Conversão dos dados para o formato GeoJSON

Primeiro vamos converter o arquivo contendo os locais de referência, que está codificado em UTF-8, para o formato GeoJSON através do programa ogr2ogr, que converte dados entre formatos de arquivo, usando o comando:

ogr2ogr -f GeoJSON Locais_de_Referência.geojson Locais_de_Referência.csv -oo X_POSSIBLE_NAMES=X -oo Y_POSSIBLE_NAMES=Y -oo KEEP_GEOM_COLUMNS=NO

Em seguida vamos converter o arquivo Limite_Bairro.kml para o formato GeoJSON, através do mesmo programa ogr2ogr utilizado anteriormente, usando o comando:

ogr2ogr -f GeoJSON Limite_Bairro.geojson Limite_Bairro.kml

8.9.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_Limites_dos_Bairro, usando os comandos:

$mongo
use reficio;
// Apagar as coleções, se existirem
db.PCRJ_Locais_de_Referência.drop()
db.PCRJ_Limites_dos_Bairro.drop()
// Criar as coleções
db.createCollection("PCRJ_Locais_de_Referência");
db.createCollection("PCRJ_Limites_dos_Bairros");

8.9.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_Referência \
    --file Locais_de_Referência.geojson

produzindo a saída:

2018-06-05T15:22:30.823-0300    connected to: localhost
2018-06-05T15:22:30.853-0300    imported 1 document

e

mongoimport \
    --db reficio \
    --collection PCRJ_Limites_dos_Bairros \
    --file Limite_Bairro.geojson

produzindo a saída:

2018-06-05T15:25:07.293-0300    connected to: localhost
2018-06-05T15:25:07.724-0300    imported 1 document

8.9.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:

$ mongo
use reficio;
db.createCollection("PCRJ_Locais", {}, { collation: { locale: "pt", strength: 1 } } );
db.PCRJ_Locais_de_Referência.find().forEach(function(data) {
    db.PCRJ_Locais.insert( data.features );
});
db.createCollection("PCRJ_Bairros", {}, { collation: { locale: "pt", strength: 1 } } );
db.PCRJ_Limites_dos_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:

$ mongo
> use reficio;
switched to db reficio
> db.PCRJ_Locais.count();
1404
> db.PCRJ_Bairros.count();
162
>

8.9.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:

$ mongo
> use reficio;
switched to db reficio
> 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.9.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:

$ mongo
> use reficio;
switched to db reficio
> db.PCRJ_Bairros.find({},{'properties.NOME' : 1, _id : 0});
{ "properties" : { "NOME" : "Saúde" } }
{ "properties" : { "NOME" : "Gamboa" } }
{ "properties" : { "NOME" : "Santo Cristo" } }
{ "properties" : { "NOME" : "Caju" } }
{ "properties" : { "NOME" : "Centro" } }
{ "properties" : { "NOME" : "Catumbi" } }
{ "properties" : { "NOME" : "Rio Comprido" } }
{ "properties" : { "NOME" : "Cidade Nova" } }
{ "properties" : { "NOME" : "Estácio" } }
{ "properties" : { "NOME" : "São Cristóvão" } }
{ "properties" : { "NOME" : "Mangueira" } }
{ "properties" : { "NOME" : "Benfica" } }
{ "properties" : { "NOME" : "Paquetá" } }
{ "properties" : { "NOME" : "Santa Teresa" } }
{ "properties" : { "NOME" : "Flamengo" } }
{ "properties" : { "NOME" : "Glória" } }
{ "properties" : { "NOME" : "Laranjeiras" } }
{ "properties" : { "NOME" : "Catete" } }
{ "properties" : { "NOME" : "Cosme Velho" } }
{ "properties" : { "NOME" : "Botafogo" } }
Type "it" for more
>

8.9.8 Bairros e morros do Município do Rio de Janeiro

Para ver os bairros e morros do Município do Rio de Janeiro no mapa, foi criado o script pcrj_morros_bairros_rio.py em Python, que une as duas consultas dos itens anteriores e gera o arquvo GPX (GPS eXchange Format) pcrj_morros_bairros_rio.gpx. O mapa está mostrado abaixo no OpenStreetMap.

8. Dados externos