ARQUITECTURA Y HERRAMIENTAS - robertoo01/TMI-2024-VisitaMe GitHub Wiki

Para el diseño de este proyecto se ha decidido llevar a cabo una Progressive Web App la cual permite su utilización a través del navegador del dispositivo.
Esta decisión viene dada tras un estudio de las ventajas y desventajas de los diferentes tipos de desarrollo (aplicación móvil o web) viendo como mayor desventaja del desarrollo móvil la dificultad para migrar una aplicación Android a un entorno iOS y viceversa, necesitando para ello, un mayor coste temporal y material del cual no disponemos actualmente.
Como nuestro objetivo es que cualquiera pueda disfrutar del sistema independientemente del sistema operativo del que disponga, se ha decidido desarrollar una Aplicación Web Progresiva que permite el acceso a ella a través de cualquier navegador web pudiendo, por ello, ser disfrutada a través de Google Chrome (navegador nativo en Android) o Safari (navegador nativo en iOS).

Para el desarrollo de esta aplicación, tras un análisis de las herramienta existentes para ofrecer ciertos servicios necesarios para su funcionamiento, se han decidido hacer uso de las herramientas que se muestran a continuación.
Se emplea la API proporcionada por los servicios de Google Cloud para procesar imágenes mediante Inteligencia Artificial. Esta API nos posibilita obtener las coordenadas geográficas de una foto específica, lo que nos permite determinar si el usuario ha visitado el lugar y ha tomado la fotografía en el monumento solicitado.
Se hará uso de las diferentes APIs que ofrece la plataforma de Google Maps para diferentes funciones de la aplicación entre las cuales se encuentran:
- Obtener lugares de interés cercanos a un punto dado.
- Conseguir las coordenadas de un determinado lugar a través de su nombre o ID.
- Generación de rutas a través de una serie de puntos dados.
El motivo principal para elegir Ionic Framework radica en su capacidad para facilitar el desarrollo de una aplicación web progresiva (PWA) con un enfoque móvil, mientras se asegura su compatibilidad con una amplia gama de dispositivos y navegadores. Además, ofrece un conjunto de herramientas y componentes diseñados específicamente para la creación de interfaces de usuario optimizadas para dispositivos móviles.
Además, Ionic Framework facilita la adaptación de la aplicación a diferentes tamaños de pantalla y resoluciones, lo que es crucial para asegurar una experiencia consistente en una variedad de dispositivos móviles y mejorar así la experiencia de usuario de las personas que estén disfrutando del sistema desarrollado. Esto es especialmente importante cuando se trata de una PWA, ya que queremos que los usuarios puedan acceder a la aplicación desde cualquier navegador, independientemente del dispositivo que estén utilizando.
En resumen, Ionic Framework se elige por su capacidad para simplificar el desarrollo de una PWA con un enfoque móvil, garantizando al mismo tiempo la compatibilidad con una amplia gama de dispositivos y navegadores, lo que permite que la aplicación sea accesible para cualquier usuario, independientemente del sistema operativo subyacente.
Se opta por utilizar GitHub como herramienta multiusos para mantener el proyecto que se está desarrollando. Entre las diferentes utilidades que se le están dando a este entorno destacan las siguientes:
- Control de versiones del código: Se lleva a cabo un control de las distintas versiones del proyecto, lo que nos permite regresar a versiones anteriores en caso de necesidad, además de facilitar la comparación y el estudio del progreso del proyecto entre las diferentes versiones.
- Colaboración: Se fomenta un desarrollo colaborativo, ya que esta plataforma permite que los diferentes miembros del equipo trabajen de forma simultánea en el proyecto.
- Utilización de la WiKi como documentación: Se está utilizando la Wiki como herramienta de documentación del proyecto y para proporcionar una guía de usuario que se pueda consultar para comprender las diversas funcionalidades del sistema.
Se hará uso de la API de MediaWiki para implementar la funcionalidad adicional de mostrar información sobre los monumentos visitados, como se detalla en el apartado de requisitos funcionales. Esta API proporciona acceso a una gran cantidad de datos y contenido disponible en Wikipedia y otros proyectos de Wikimedia.
La integración de esta API permitirá que nuestra aplicación obtenga información detallada sobre los lugares de interés que el usuario visite. Esto significa que, cuando los usuarios se desplacen a puntos de interés, la aplicación podrá ofrecerles información relevante y contextual sobre esos lugares.
Por ejemplo, si un usuario visita un monumento histórico, la aplicación puede mostrar detalles sobre la historia del monumento, su arquitectura, eventos importantes relacionados con él y cualquier otra información relevante disponible en Wikipedia. Esto enriquece la experiencia del usuario al proporcionarle contenido informativo y educativo sobre los lugares que visita.

Esta API ofrece la posibilidad de la generación de un vídeo de fotografías. Esta permite la posibilidad de mostrar dicho video creado a partir de las fotos directamente en el navegador cuando se incluya en los diferentes proyectos de servicio web.
Se hará uso de ella para que, una vez el usuario haya finalizado todo el recorrido, pueda recibir un vídeo recopilatorio de las diferentes fotos que ha tomado. Estas fotos serán seleccionadas por el propio usuario.
A continuación, se muestra un diagrama a alto nivel de la arquitectura de la aplicación con las diferentes funcionalidades que deberían tener cada uno de sus componentes.

Este esquema a alto nivel detalla el siguiente comportamiento:
- El usuario introduce la ubicación a la aplicación, ya sea compartiendo su ubicación o indicándolo textualmente.
- La aplicación solicita lugares emblemáticos que se encuentren cerca a la API de Google Maps.
- La API de Maps devuelve un listado con los lugares de interés a la aplicación.
- La aplicación ofrece la lista de ubicaciones al usuario.
- El usuario fotografía los lugares de interés y esas fotos son mandadas a la aplicación.
- La aplicación manda las fotos del usuario a la API de Google Vision.
- La API de Google Vision retorna un JSON con la información geográfica detectada a partir de esa fotografía.
- Tras verificar los lugares por parte de la aplicación se envía a Maps los lugares visitados.
- La API de Maps devuelve el recorrido realizado por el usuario.
- El usuario elige las fotos que quiere incluir en el vídeo recopilatorio.
- La herramienta de ffmpeg.wasm devuelve el vídeo con las imágenes seleccionadas.