Después de observar que PyQGIS provee las funcionalidades necesarias para hacer funcionar TrasMiSIG busqué migrarlo y el resultado ha sido bueno. En realidad, como mencioné hace un año, TrasMiSIG solo exige a la librería de desarrollo espacial funcionalidades de navegación y conexión a PostgreSQL, pues la lógica del negocio está implementada en la base de datos, utilizando el lenguaje PL/PgSQL.

¿Para qué sirve?
La aplicación TrasMiSIG permite consultar y visualizar las rutas asociadas a un par de estaciones del sistema Transmilenio, teniendo en cuenta el día, la hora y el sentido del viaje. Como resultado se genera un reporte que contiene varios criterios para decidir la ruta óptima, como son el tiempo de viaje y el número de paradas en el trayecto.
¿Qué software utiliza?
Ahora TrasMiSIG está desarrollado en Python y utiliza el siguiente software:
-
PyQGIS: Bindings de Python para Quantum GIS. (Se requiere la versión 1.1 o superior)
-
PyQt4: Bindings de Python para Qt4.
-
QtSql: Es parte de Qt4, permite la conexión a PostgreSQL.
-
PostgreSQL: Sistema Manejador de Bases de Datos. (Se requiere la versión 8.3 o superior)
-
Postgis: Extensión espacial para PostgreSQL.
¿Cómo conseguir el código fuente?
El código fuente de TrasMiSIG está disponible de dos maneras, como archivo tar o directamente del repositorio Subversion.
El archivo tar puede descargarse en este enlace.
Para descargar desde el repositorio es necesario tener instalado un cliente Subversion, como por ejemplo svn en GNU/Linux o Tortoise SVN en Windows, y ejecutar la siguiente instrucción:
svn co svn://svn.tuxfamily.org/svnroot/tuxgis/geotux/tags/trasmisig/1.0 trasmisig
Esto descarga la aplicación en el directorio trasmisig. Por defecto solamente se cuenta con permisos de lectura en el repositorio, si piensas contribuir con alguna funcionalidad extra (cualquier aporte es bienvenido) puedes registrarte en Tuxfamily y avisarme para darte permisos de escritura.
Se puede ver la estructura del repositorio desde la dirección:
Instalación
Prerequisitos
Para instalar las dependencias en Ubuntu puedes seguir estos pasos:
1. Agregar al archivo /etc/apt/sources.list las siguientes líneas:
deb http://ppa.launchpad.net/qgis/unstable/ubuntu jaunty main
2. Actualizar la información en los repositorios: sudo apt-get update.
3. Instalar dependencias (en una misma línea):
sudo apt-get install pyqt4-dev-tools python python-qt4 qt4-designer
4. Fijar variables de entorno:
export PYTHONPATH="/usr/share/qgis/python"
En Windows puedes usar el instalador OSGeo4W y marcar los paquetes que se mencionan en estas instrucciones: http://wiki.qgis.org/qgiswiki/OsGeo4wSetup
Una vez instalado el software fijar las variables de entorno:
set PATH=C:/OSGeo4W/apps/qgis/bin;%PATH%
TrasMiSIG
Después de instalar las dependencias se prosigue con la instalación de TrasMiSIG: Base de datos y aplicación.
-
Instalar la base de datos TrasMiSIG:
-
En la terminal de PostgreSQL se crea el usuario al que se asignará la base de datos:
-
Se crea la base de datos “trasmisig” con el siguiente comando:
-
Descargar el archivo SQL con la estructura y los datos de TrasMiSIG:
Para Ubuntu (codificación LATIN1) en este enlace, para Windows (codificación WIN1252) en este enlace. Descomprimir el zip descargado.
-
Para importar el archivo SQL obtenido a la base de datos “trasmisig” creada en un paso anterior, se ejecuta el siguiente comando:
-
Ahora se debe instalar la aplicación.
- Construir la aplicación:
Para instalar la base de datos “trasmisig” se debe contar con PostgreSQL y su extensión espacial PostGIS.
createuser -S -d -r -l -i -P usuariocreateuser.exe -S -d -r -l -i -P -U postgres (En Windows)
Donde, -S: No es superusuario, -d: Puede crear BD, -r: Puede crear roles, -l: Puede loguearse, -i: Hereda de roles superiores, -P: Fijar el password.
Se escribe la contraseña “usuario” para el usuario llamado “usuario”.
createdb trasmisig -O usuario -h localhost -E LATIN1
createdb.exe -O usuario -h localhost -E WIN1252 -U postgres trasmisig (En Windows)
Donde -O: Usuario al que pertenece la base de datos, -h: Servidor, -E: Codificación.
Con respecto a la codificación, dependiendo de la configuración de PostgreSQL se utilizará una u otra, para Windows puede que sea necesario definir la WIN1252, mientras que en GNU/Linux (partiendo de una buena configuración de PostgreSQL) se usa sin problemas la LATIN1.
psql trasmisig < /home/tuxman/trasmisig_pyqgis_latin1.sql
psql -U postgres trasmisig < d:\trasmisig_pyqgis_win1252.sql (En Windows)
-
Para construir la aplicación en GNU/Linux se ejecuta make desde el directorio raíz del código fuente.
En Windows se ejecuta el archivo make.bat
Así se obtienen los archivos de recursos y de interfaz de usuario necesarios.
-
-
Ejecutar la aplicación:
-
Para ejecutar TrasMiSIG en GNU/Linux se ejecuta en la terminal desde el directorio raiz de la aplicación: ./TrasMiSIG.py En Windows debe ejecutarse “python TrasMiSIG.py” desde la consola.
-
¿Cómo se usa?
Al ejecutar TrasMiSIG aparece la interfaz mostrando información espacial básica (ciudad de Bogotá y red de transporte masivo compuesta por estaciones y segmentos de ruta). Se disponen en la parte central, algunos botones para manipular y consultar el mapa.

Definir los parámetros del viaje:
Para definir el viaje a realizar se deben ingresar los siguientes parámetros en la parte superior de la ventana:
-
Estación de Origen: Corresponde a la estación del sistema desde la cual inicia el viaje.
-
Estación de Destino: Corresponde a la estación del sistema donde finaliza el viaje.
-
Día: Día de la semana en que se efectúa el viaje.
-
Hora: Hora del día en la cual se parte de la estación de origen.

Para definir la estación de origen y la estación de destino se tienen dos opciones:
-
Seleccionar las estaciones en las listas desplegables ubicadas en la parte superior de la interfaz.
-
Utilizar la herramienta Seleccionar Estación que permite interactuar con el mapa a través de un click sobre la estación de interés.
El día y la hora del viaje se definen en las listas desplegables de la parte superior de la interfaz de la aplicación. La hora está en el formato 24h (por ejemplo, 18:00 equivale a 6:00pm).
Una vez definidos los parámetros del viaje, se debe dar click en el botón Calcular Rutas.
Despliegue de resultados:
La aplicación desplegará en el mapa el viaje seleccionado y en la parte inferior un reporte detallado que contiene la siguiente información de la ruta:
-
Ruta: Nombre de la ruta del sistema de transporte que pasa por las estaciones de origen y destino.
-
Tiempo: Tiempo que tarda el viaje en minutos.
-
Paradas: Número de paradas intermedias que debe realizar el bus del sistema.
-
Servicio: Tipo de servicio al que pertenece la ruta. Puede ser Expreso (si la ruta tiene paradas que optimizan el tiempo del viaje) o Corriente (si la ruta se detiene en todas las estaciones comprendidas entre las estaciones de origen y destino).
-
Origen: Nombre de la estación de origen del viaje.
-
Destino: Nombre de la estación de destino del viaje.

En el reporte aparece seleccionada por defecto la primera ruta (de color azul oscuro), desplegando sus paradas (puntos amarillos) y su recorrido (línea roja) en el mapa.

Acercándose un poco en el mapa, se muestran las etiquetas de las estaciones por las que pasa la ruta, facilitando la lectura del recorrido.

Si se quiere consultar otro viaje, se debe dar click en el botón Ingresar nueva ruta y volver a definir los parámetros.
Posibles mejoras
-
Transmilenio posee un conjunto de buses alimentadores que permiten ampliar el área de influencia del sistema. En su versión 1.0, TrasMiSIG no tiene en cuenta las rutas alimentadores debido a la complejidad que le agregan a la aplicación, sin embargo, constituye una de las posibles mejoras a realizar.
-
En ciertas ocasiones tomar más de una ruta puede disminuir el tiempo de viaje manteniendo el mismo costo. La implementación de este escenario, constituiría otra mejora a la aplicación.
Nota
Los datos empleados en TrasMiSIG son ficticios y no corresponden completamente a la realidad, pues se crearon para llevar a cabo las pruebas de la aplicación.
Referencias consultadas:
-
Equipo de desarrollo de Quantum GIS, 2009. Quantum GIS, Geographic Information System API Documentation. Open Source Geospatial Foundation Project. Documento electrónico: http://doc.qgis.org/
-
Carrillo, Germán. Aplicación TRAS-MI-SIG: Cálculo de rutas con Postgres/PostGIS y la librería de desarrollo SharpMap. 2008. Documento electrónico: http://geotux.tuxfamily.org
comments
No descarto tener algún día TrasMiSIG como aplicación web (aunque no es prioridad), en ese caso tendría que ajustar un poco en PostgreSQL la forma de almacenar temporalmente las rutas a resaltar en el mapa.
Tienes razón en recomendar Spatialite para trabajos específicos de escritorio, es una alternativa a tener muy en cuenta, sin embargo, por el hecho de buscar ser simple, Sqlite no tiene característica s que necesita TrasMiSIG y que si me da PostgreSQL, en concreto, el lenguaje PL/PgSQL (o un equivalente). PL/PgSQL realiza buena parte del trabajo: encuentra los servicios candidatos, calcula tiempos, calcula número de paradas y crea las vistas.
Es cierto que estas tareas pueden hacerse desde Python pero inundaría el código fuente con sentencias SQL y quiero mantenerlo simple.
laptop:~/trasmisig_v1.0$ ./TrasMiSIG.py
Traceback (most recent call last):
File "./TrasMiSIG.py", line 88, in
main( sys.argv )
File "./TrasMiSIG.py", line 71, in main
miVisor = Visor()
File "/home/diego/trasmisig_v1.0/logica_trasmisi g.py", line 142, in __init__
self.mapTip = QgsMapTip()
NameError: global name 'QgsMapTip' is not defined
Gracias por tu ayuda
Asegúrate que en el archivo /etc/apt/sources.list se encuentren los repositorios que menciono en el paso 1 de la instalación de TrasMiSIG. Una vez hecho esto ejecuta: sudo apt-get update para actualizar los paquetes. Con esto deberías tener QGis 1.1. listo para instalar.
Para evitar este tipo de problemas he agregado una validación de la versión de QGis antes que arranque TrasMiSIG, puedes descargar la última versión de TrasMiSIG ejecutando:
svn co svn://svn.tuxfamily.org/svnroot/tuxgis/geotux/trunk/trasmisig trasmisig
Saludos.
RSS feed for comments to this post