10000 GitHub - ronihdzz/metro-maps-cdmx: Desktop application showing the complete CDMX metro network and calculates the shortest route between stations with customer-server architecture
[go: up one dir, main page]
More Web Proxy on the site http://driver.im/
Skip to content

Desktop application showing the complete CDMX metro network and calculates the shortest route between stations with customer-server architecture

License

Notifications You must be signed in to change notification settings

ronihdzz/metro-maps-cdmx

Repository files navigation


Metro maps cdmx

Autor: David Roni Hernández Beltrán



Video de la explicación del proyecto en español:

Alt text

Menu



1) Prerrequisitos


1.1) Sistemas operativos

El programa es multiplataforma por lo cual deberia minimo funcionar en: Windows,Linux y Mac.

El programa ha sido probado con exito en los siguientes sistemas operativos:

  • Windows 10

Sin embargo por cuestiones de disponibilidad de equipo no ha podido ser probada en otras versiones de los sitemas operativos, sin embargo deberia funcionar en otros sistemas operativos y versiones de estos, debido a que la aplicación se creo que tecnologias multiplataformas.

1.2) Instalacion de paquetes de python

A continuación se enlistan los prerrequisitos para poder ejecutar el sofware:

  • Python 3 instalado en la computadora
  • La herramienta de gestión de paquetes pip3

Para poder ejecutar el programa es necesario tener python 3 instalado, asi como tambien instalar los siguientes paquetes:

  • pyqt5
  • pyqt5-tools
  • pytest
  • pandas
  • openpyxl
  • pygame
  • networkx
  • unidecode
  • mutagen
  • gTTS

Recomendación: Instalar los paquetes en un virtualenv la cual es una herramienta para crear entornos Python aislados, con el fin de evitar problemas de dependencias y versiones, si desea consultar información de como instalar un entorno virtual recomiendo el siguiente link: https://docs.python.org/es/3/tutorial/venv.html

A continuación se muestra como poder instalar los paquetes antes mencionados:

Windows/Mac

  • Alternativa numero 1: Instalar cada paquete de forma individual

  • Instalando pyqt5:

    pip3 install pyqt5
  • Instalando pytest:

    pip3 install pytest
  • Instalando pandas:

    pip3 install pandas
  • Instalando openpyxl:

    pip3 install openpyxl
  • Instalando pygame:

    pip3 install pygame
  • Instalando networkx:

    pip3 install networkx
  • Instalando unidecode:

    pip3 install unidecode
  • Instalando mutagen:

    pip3 install mutagen
  • Instalando gTTS:

    pip3 install gTTS
  • Alternativa numero 2: Instalar todos los paquetes con ayuda del archivo requirements.txt

    pip3 install -r requirements.txt

Linux

  • Instalando pyqt5:

    sudo apt update
    sudo apt upgrade
    sudo apt install python3-pyqt5
  • Instalando pytest:

    pip3 install pytest
  • Instalando pandas:

    pip3 install pandas
  • Instalando openpyxl:

    pip3 install openpyxl
  • Instalando pygame:

    pip3 install pygame
  • Instalando networkx:

    pip3 install networkx
  • Instalando unidecode:

    pip3 install unidecode
  • Instalando mutagen:

    pip3 install mutagen
  • Instalando gTTS:

    pip3 install gTTS

2) Como ejecutar el proyecto

Para poder ejecutar el proyecto es importante saber que: metro maps es un proyecto conformado de dos partes:

  • El cliente: el programa con el que interactuara la persona para obtener la ruta más cercana.
  • El servidor: el programa que estara ejecutando una computadora y que sera el encargado de calcular la ruta mas cercana para cada persona.

NOTA: El cliente y el servidor pueden ejecutarse en una misma computadora, pero lo ideal seria que se ejecutaran en una distinta computara.El programa del cliente puede ejecutarse en distintas computadoras.El programa del servidor solo se ejecutara en una computadora.

¿Como ejecutar el proyecto?

Si los scripts: cliente y servidor se ejecutaran en distintas maquinas y dichas maquinas estan conectadas a la misma red:

  • PASO 1 Cerciorarse que las computadoras que correran el programa de cliente esten conectados en la misma red de la computadora que ejecutara el programa del servidor.

  • PASO 2 Obten la direccion IPv4 de la computadora que ejecutara el programa del servidor:

    • Para obtener la direccion IPV4 en linux/mac, escribir lo siguiente en consola:

      ifconfig
    • Para obtener la direccion IPV4 en windows, escribir lo siguiente en consola:

      ipconfig
  • PASO 3 En el script <<recursos.py>> del proyecto:

    ├── METRO-MAPS-CDMX
    │   ├── GUI
    │   │   ├── ...
    │   │   ├── ...
    │   │   ├── ...
    │   ├── multimedia
    │   │   ├── ...
    │   │   ├── ...
    │   │   ├── ...
    │   ├── procesamiento_datos
    │   │   ├── ...
    │   │   ├── ...
    │   │   ├── ...
    │   │   ├── ...
    │   ├── tests
    │   │   ├── ...
    │   │   ├── ...
    │   │   ├── ...
    │   │   ├── ...
    │   ├── .gitignore
    │   ├── images_rc.py
    │   ├── images.qrc
    │   ├── LICENSE
    │   ├── main_cliente.py
    │   ├── main_servidor
    │   ├──    ...
    │   ├──    ...
    │   ├── recursos.py <============
    │   ├── requirements.txt
    

    Modicar los valores de lo señalado por las flechas:

    from PyQt5 import QtCore
    from PyQt5.QtGui import QIcon
    
    
    class App_Principal():
    
        ###############################################
        # DATOS DEL SERVER QUE EJECUTA EL SERVICIO
        #     QUE LA  GUI  CONSUMIRA
        ###############################################
    
        SERVER_IP="127.0.0.1"  <===================== editar valor
        SERVER_PORT=1111       <===================== editar valor
    
        #################################################
        # DATOS  QUE  REQUIERE  LA  GUI
        #################################################
    
    

    ¿que valores se deben poner en las variables señaladas por las flechas?

    En la variable: <<SERVER_IP>> igualarla a un string que contenga la direccion IPV4 de la computadora que ejecutara el programa del servidor.

    En la variable <<SERVER_PORT>> igualarlo a un dato de tipo entero que contenga el numero de puerto en el que se ejecutara el socket del servidor.Es importante recordar que los por lo general libres son los puertos en el ragno de: 1024 a 49151.

  • PASO 4 Guardar los cambios del proyecto realizados en el paso anterior.

  • PASO 5 Copiar el proyecto con los cambios realizados del paso 3, en las computadoras que ejecutaran la aplicacion de cliente y en la computadora que ejecutara la aplicacion de servidor.

  • PASO 6 En la computadora que ejecutara la aplicacion del servidor, ubicarse en la carpeta que esta almacenado el script: <<main_servidor.py>> y posteriormente ejecutar el siguiente comando:

    python main_servidor.py
  • PASO 7 En las computadoras que ejecutaran la aplicacion del cliente, ubicarse en la carpeta que esta almacenado el script: <<main_cliente.py>> y posteriormente ejecutar el siguiente comando:

    python main_cliente.py

Si los scripts: cliente y servidor se ejecutaran en la misma maquina:

  • PASO 1 Abrir una terminal en la computadora, ubicarse en la carpeta que esta almacenado el script: <<main_servidor.py>> y posteriormente ejecutar el siguiente comando:

    python main_servidor.py
  • PASO 2 Abrir otra terminal en la computadora, ubicarse en la carpeta que esta almacenado el script: <<main_cliente.py>> y posteriormente ejecutar el siguiente comando:

    python main_cliente.py

3) Funcionamiento del proyecto

Funcionamiento del programa del cliente:

El programa es una GUI de escritorio pensada para que el usuario la pueda usar y obtener la ruta a seguir. Lo que tendra que hacer el usuario es lo siguiente:

¿Que debera hacer el usuario para obtener la ruta a seguir?

  • Seleccionar la estacion origen
  • Seleccionar la estacion destino
  • Dar clic sobre el boton con la leyenda: << OBTENER RUTA >>

Ejemplo:

  • Supongamos que un usuario se encuentra en la estacion del metro: << observatorio >> y desea llegar a la estacion del metro << terminar aerea >> ¿que debera hacer el usuario para obtener la ruta mas corta?

    • Seleccionar la estacion origen: Seleccionar la estacion: observatorio
    • Seleccionar la estacion destino: Seleccionar la estacion: terminal aerea
    • Dar clic sobre el boton con la leyenda: << OBTENER RUTA >>

Con los pasos anteriores el usuario:

  • Vera los nombres de las estaciones de la ruta a seguir
  • Vera la cantidad de estaciones a recorrer:
  • Vera la distancia total a reccorer:
  • Vera la ruta a seguir marcada en el mapa de puntos

Si el usuario desea escuchar en audio la ruta a seguir debera hacer lo siguiente:

  • Seleccionar la estacion origen si no se ha seleccionado
  • Seleccionar la estacion destino si no se ha seleccionado
  • Cersiorarse que este habilitado el sonido y si no esta habilitado habilitarlo, dando clic izquierdo sobre el circulo que tiene en la parte inferior la leyenda: << Con sonido >>
  • Dar clic sobre el boton con la leyenda: << OBTENER RUTA >>

El usuario puede explorar cada punto del mapa y ver que estacion de metro representa dando clic izquierdo sobre el punto respectivo.Cuando el usuario de clic sobre el punto respectivo, vera en la parte superior izquierda de la GUI la imagen de la estacion del metro que representa dicho punto

OBSERVACIONES:

  • Cada punto del mapa representa cada estacion del metro
  • El mapa contiene todas las estaciones de la red del metro de la ciudad de mexico
  • Cada punto representado del mapa es una representacion a escala de la ubicacion real de cada estacion del metro ya que se tomo en cuenta cada latitud y longitud del metro para su respectiva graficacion en la cordenada exacta de la interfaz grafica del cliente.

NOTA: Si el usuario tiene habilitado el sonido, entonces cada vez que de clic sobre un punto del mapa tambien escuchara en audio el nombre de la estacion del metro que representa dicho punto.

El usuario podra ver los contactos del desarrollador de este proyecto:

La aplicacion de cliente metro-maps-cdmx ofrece un apartado en donde el usuario pueda ver los contactos del programador, es decir mis datos de contacto personales, tambien muestra un link de acceso al repositorio de todo este proyecto, lo único que se tendrá que hacer es dar clic izquierdo sobre el icono con signo de exclamación e inmediatamente se desplegara una ventana con dichos datos.

A continuación de muestra como:

Funcionamiento del programa del servidor:

Este programa mostrara en consola los datos(direccion IP, puerto, nombre estacion origen, nombre estacion destino,etc. ) de cada cliente que desea obtener la ruta mas cercana entre su estacion origen y estacion destino.

4) Ejecutar los tests

Debido a que todos los audios, imagenes y archivos que contienen informacion de cada estacion del metro se creo el siguiente tests que se encarga de verificar que todos los audios imagenes y archivos contengan los mismos nombres de estaciones de metro y la misma cantidad de estaciones de metro.

Para ejecutar los tests debera ubicarse a la altura del <<main_gui.py>> y a la altura del <<main_server.py>> y ejecutar el siguiente comando:

pytest tests

5) Agregar nuevo codigo

Si deseas contribuir al proyecto no olvidar pre-formatear tu codigo con ayuda de pre-commit, para ello deberas instalar el paquete << pre-commit >>

pip install pre-commit

Y despues instalar las configuraciones respectivas del proyecto con el siguiente comando:

pre-commit install

Lo anterior hara que antes de que se cargue tu commit, verificara que tu codigo implementado cumpla con ciertos estandares y reglas.

6) Fuentes de informacion

About

Desktop application showing the complete CDMX metro network and calculates the shortest route between stations with customer-server architecture

Topics

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages

0