El objetivo del proyecto es exponer una página web que pueda ser accedida desde los monitores de los colectivos de la ciudad para mostrar los lugares de interés cercanos al mismo.
El proyecto tiene 2 partes: una API, que hace uso de los datos guardados en las bases de MongoDB y Redis, y un cliente web, que muestra la información procesada por la API de una forma útil y visual.
Este proyecto fue realizado para la materia Bases de Datos 2 dictada en el Instituto Tecnológico de Buenos Aires en el 2021. El profesor a cargo de la materia es Diego Ariel Aizemberg (https://github.com/aaizemberg).
- Ana Cruz (https://github.com/anitacruz)
- Valentino Riera Torraca (https://github.com/vriera)
- Salustiano José Zavalía Pángaro (https://github.com/szavalia)
Usamos MongoDB para guardar datos espaciales de OpenStreetMap, donde se listan las ubicaciones de interés.
Los datasets que usamos están en la carpeta data de este proyecto, pero se pueden descargar datos actualizados siguiendo las instrucciones del Anexo 1:
Para importar los datasets a MongoDB, primero tenemos que copiarlos al repo parándonos en el root de este proyecto y usando:
docker cp datasets.zip my_mongo_container:/
Luego de entrar al contenedor usando docker exec, podemos descomprimir el .zip y tenemos nuestros datasets listos para importar. Es recomendado hacerlo dentro de un directorio nuevo dentro del contenedor. Debería verse así:
arts_centre.json
cafe.json
fast_food.json
mercados.json
pub.json
bar.json
cinema.json
ice_cream.json
pharmacy.json
theatre.json
Luego, creamos una database "final" y la collection "locations" dentro de la misma. Ahora, para cada uno de los json vamos a usar mongoimport:
mongoimport --db final --collection locations --type json NOMBRE_DEL_JSON.json --legacy --jsonArray
Para conseguir el token de la API de transporte del GCBA (que vamos a usar en la API), seguir las instrucciones disponibles en https://www.buenosaires.gob.ar/desarrollourbano/transporte/apitransporte
-
Instalar node
-
Instalar los siguientes paquetes con npm i ${nombre} -redis -dotenv -express -mongo
-
Crear un archivo .env en este directorio y cargar los siguientes datos
TRANSPORTES_CLIENT= [Su hash de cliente] TRANSPORTES_TOKEN= [Su token de la api] MONGO_DB_IP= [El host o ip de su mongo db (en nuestro caso corre en localhos, en el puerto default)] MONGO_DB_DATABASE=final [El nombre de su database, si sigue nuestros imports se llama asi] API_PORT= [El puerto en el que correra esta api] REDIS_HOSTNAME= [El host o ip de su redis (en nuestro caso corre en localhost)] REDIS_PORT= [el puerto en el que esta redis] REFRESH_TIME = [El tiempo en segundos que tardara en obtener las nuevas localizaciones] MOCK_DATA = [Setearlo 1 para usar datos autogenerados o en 0 para hacer request a la API del gobierno]
-
Correr con
node ./index.js
-
Descargar Apache Tomcat 8
-
Copiar el archivo webapp.war en la raíz de este proyecto a la carpeta "webapps" del Tomcat, ubicada en
/PATH_TO_TOMCAT/webapps
-
Iniciar el servidor de Tomcat corriendo startup.sh haciendo
./PATH_TO_TOMCAT/bin/startup.sh
-
Voila! Si ya iniciaste las bases de Redis y MongoDB para que se conecte la API, el Tomcat debería responder tus pedidos en localhost:8080.
Para bajar datos frescos de OpenStreetMap, tenemos que ir a https://overpass-turbo.eu/ y correr el siguiente script para cada amenity relevante.
node
[amenity=NOMBRE_DEL_AMENITY]
(around:40000, -34.6039112,-58.3708228);
out;
Reemplazar la amenity por cada una de la siguiente lista:
- arts_centre
- bar
- cafe
- cinema
- fast_food
- ice_cream
- mercados
- pharmacy
- pub
- theatre
Luego, descargar los datos como un GeoJSON tocando (en la barra superior)
Export -> download/copy as GeoJSON
Para extraer los datos relevantes de estos GeoJSONs, vamos a hacer:
jq --compact-output ".features" NOMBRE_DEL_GEOJSON.geojson > NOMBRE_DEL_GEOJSON.json
Luego de correr esto con cada uno de los GeoJSONs, vamos a tener los JSONs listos para seguir las intrucciones de importación de datos más arriba.