8.3 Dados de Buenos Aires Data

Este texto mostra como baixar dados com coordenadas geográficas da página Buenos Aires Data e importar para uma coleção do MongoDB.

8.3.1 – Baixar os dados de Buenos Aires Data

O arquivo com os dados dos bairros de Buenos Aires (barrios.csv) foi baixado da página da Internet Buenos Aires Data (veja imagem destacada).

8.3.2 – Conversão dos dados de Buenos Aires Data para o formato GeoJSON

O arquivo barrios.csv, baixado de Buenos Aires Data, foi primeiramente convertido da codificação ISO-8859-1 para UTF-8 utilizando o programa do Linux iconv e, depois disso, para o formato GeoJSON usando o programa utilitário ogr2ogr do GDAL, que converte dados entre formatos de arquivo, conforme mostrado abaixo:

$ iconv -f ISO-8859-1 -t UTF-8 barrios.csv > barrios_utf8.csv
$ ogr2ogr -f GeoJSON barrios.geojson barrios.vrt

Para converter os dados do formato CSV para GeoJSON usando o utilitário ogr2ogr foi necessário criar o arquivo VRT, que aparece acima, conforme descrito em OGR Virtual Format, para associar informações do sistema de coordenadas à fonte de dados. O arquivo barrios.vrt criado está mostrado abaixo:

<OGRVRTDataSource>
    <OGRVRTLayer name="barrios_utf8">
        <SrcDataSource>barrios_utf8.csv</SrcDataSource>
        <GeometryType>wkbPolygon</GeometryType>
        <LayerSRS>WGS84</LayerSRS>
        <GeometryField encoding="WKT" field='WKT' />
    </OGRVRTLayer>
</OGRVRTDataSource>

8.3.3 – Criação de uma coleção no MongoDB para importar os dados de Buenos Aires Data

Para importar os dados baixados de Buenos Aires Data, foi criada a coleção buenosairesbarrios utilizando os comandos:

$ mongo
use reficio;
// Apagar a coleção, se existir
db.buenosairesbarrios.drop();
// Criar a coleção
db.createCollection("buenosairesbarrios");

8.3.4 – Importação dos dados

A importação dos dados de Buenos Aires Data na coleção buenosairesbarrios do MongoDB foi realizada usando o utilitário mongoimport, conforme mostrado abaixo:

$ mongoimport \
    --stopOnError \
    --db reficio \
    --collection buenosairesbarrios \
    --file barrios.geojson

produzindo a saída:

2018-05-18T18:20:03.276-0300    connected to: localhost
2018-05-18T18:20:03.406-0300    imported 1 document

8.3.5 – Um documento para cada ponto

Como pode ser visto acima, todos os dados foram importados para um único documento. Para colocar cada bairro em um documento em separado, foi criada a coleção barrios_porteños, conforme mostrado abaixo:

$ mongo
use reficio;
// Apagar a coleção, se existir
db.barrios_porteños.drop();
// Criar a coleção
db.createCollection("barrios_porteños");

e executado o comando:

db.buenosairesbarrios.find().forEach(function(data) {
    db.barrios_porteños.insert( data.features );
});

8.3.6 – Exemplo de utilização de um script do Python para mostrar os bairros de Buenos Aires

import pymongo
from pymongo import MongoClient
import numpy as np

conn = MongoClient('localhost', 27017)
db = conn.reficio
barrios_porteños = db.barrios_porteños

# Array com os bairros de Buenos Aires
barrios = []
for barrio in barrios_porteños.find():
    barrios.append( np.array(barrio['properties']['BARRIO']) )

# Imprimir os bairros em ordem alfabética
for barrio in sorted(barrios):
    print(barrio)

que executado na shell interativa do Python produz:

$ python
Python 3.6.4 |Anaconda, Inc.| (default, Jan 16 2018, 18:10:19)
[GCC 7.2.0] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import pymongo
>>> from pymongo import MongoClient
>>> import numpy as np
>>>
>>> conn = MongoClient('localhost', 27017)
>>> db = conn.reficio
>>> barrios_porteños = db.barrios_porteños
>>>
>>> # Array com os bairros de Buenos Aires
... barrios = []
>>> for barrio in barrios_porteños.find():
...     barrios.append( np.array(barrio['properties']['BARRIO']) )
...
>>> # Imprimir os bairros em ordem alfabética
... for barrio in sorted(barrios):
...     print(barrio)
...
AGRONOMIA
ALMAGRO
BALVANERA
BARRACAS
BELGRANO
BOCA
BOEDO
CABALLITO
CHACARITA
COGHLAN
COLEGIALES
CONSTITUCION
FLORES
FLORESTA
LINIERS
MATADEROS
MONSERRAT
MONTE CASTRO
NUEVA POMPEYA
NUÑEZ
PALERMO
PARQUE AVELLANEDA
PARQUE CHACABUCO
PARQUE CHAS
PARQUE PATRICIOS
PATERNAL
PUERTO MADERO
RECOLETA
RETIRO
SAAVEDRA
SAN CRISTOBAL
SAN NICOLAS
SAN TELMO
VELEZ SARSFIELD
VERSALLES
VILLA CRESPO
VILLA DEL PARQUE
VILLA DEVOTO
VILLA GRAL. MITRE
VILLA LUGANO
VILLA LURO
VILLA ORTUZAR
VILLA PUEYRREDON
VILLA REAL
VILLA RIACHUELO
VILLA SANTA RITA
VILLA SOLDATI
VILLA URQUIZA
>>>

8.3.7 Perímetro do bairro da Recoleta

Para ver o perímetro do bairro da Recoleta no mapa foi criado o script perimeter_recoleta.py em Python, que gera o arquivo GPX (GPS eXchange Format) perimeter_recoleta.gpx. O mapa está mostrado abaixo no OpenStreetMap.

8. Dados externos