Aplicación Móvil para La Información de Rutas
Aplicación Móvil para La Información de Rutas
Aplicación Móvil para La Información de Rutas
T ESIS
Presenta: Asesor:
Ángel Hernández Joaquín Dr. Ivo Humberto Pineda
Torres
Febrero 2016
Declaración de Autoría
Yo, Ángel Hernández Joaquín, declaro que esta tesis titulada, «Aplicación Móvil Para la
Información de Rutas y Movilización de Pasajeros en la Ciudad» y el trabajo presentado
en el son míos. Confirmo que:
Cuando cualquier parte de esta tesis haya sido presentado para un grado o cual-
quier otra calificación en esta Universidad o cualquier otra institución, esto se ha
manifestado claramente.
Dónde he citado del trabajo de los demás, la fuente siempre se da. Con la excep-
ción de estas citas, esta tesis es enteramente mi propio trabajo.
Firma:
Fecha:
III
«Podemos enumerar muchas figuras importantes que no tenían talento pero que conquistaron
su mérito y se trasformaron en genios, lo consiguieron superando dificultades.»
V
BENEMÉRITA UNIVERSIDAD AUTÓNOMA DE PUEBLA
Resumen
Facultad de Ciencias de la Computación
El transporte es una de las necesidades para todo aquel que requiera trasladarse, ya
sea para fines personales o para llegar a su centro de labores, en diversas ocasiones no
se conoce ningún transporte, las mejores opciones respecto a costos y tiempo, lo cual
puede significar perdidas en tiempo y dinero. Los dispositivos móviles gracias a sus
funcionalidades cada vez toman mayor importancia para muchas de las actividades
que se hacen todos los días, en especial los dispositivos Android, la plataforma predo-
minante del mercado. Se desarrolló una aplicación móvil para la plataforma android
que dada una ubicación y un destino muestra las posibles alternativas que el usuario
puede elegir para llegar a su destino. El plan para desarrollar esta aplicación, tendrá
cuatro etapas: recolección de datos, análisis y diseño, implementación y pruebas. Cada
una de estas pretende cumplir los objetivos planteados en cada etapa. Con el uso del
transporte público se busca reducir el congestionamiento vehicular, reducción de ga-
ses resultado de quema de combustibles fósiles, costos monetarios, e incluso generar
algunos empleos como en la sección del mantenimiento
VII
Agradecimientos
A mi asesor: Dr. Ivo Humberto Pineda Torres, por todo el apoyo y los conocimien-
tos transmitidos.
A todos los amigos y colegas que han, de alguna manera, influenciado el desarrollo
de esta tesís. Entre ellos puedo mencionar a Ernesto Lira Huerta, Salvador Sánchez
Juárez y Karina Tentle Morales.
IX
Índice general
Resumen VII
Agradecimientos IX
1. Introducción 1
1.1. Antecedentes del problema . . . . . . . . . . . . . . . . . . . . . . . . . . 1
1.2. Justificacion . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2
1.3. Objetivos Generales y Específicos del Trabajo. . . . . . . . . . . . . . . . . 2
4. Implementación 33
4.1. Interfaz Web . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 33
4.1.1. Estructuración del proyecto . . . . . . . . . . . . . . . . . . . . . . 33
4.1.2. Módulos del sitio . . . . . . . . . . . . . . . . . . . . . . . . . . . . 33
4.1.3. Registro y Acceso . . . . . . . . . . . . . . . . . . . . . . . . . . . . 34
4.1.4. Creación de una clave API . . . . . . . . . . . . . . . . . . . . . . . 34
4.1.5. Administración de Usuarios . . . . . . . . . . . . . . . . . . . . . . 35
4.1.6. Administación de Ciudades . . . . . . . . . . . . . . . . . . . . . . 36
XI
4.1.7. Administación de Rutas . . . . . . . . . . . . . . . . . . . . . . . . 37
4.2. Servicio Web . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 40
4.2.1. Esquema de comunicación . . . . . . . . . . . . . . . . . . . . . . 40
4.2.2. Implementación del servicio . . . . . . . . . . . . . . . . . . . . . 42
4.3. Aplicación Móvil . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 42
4.3.1. Estructura del proyecto . . . . . . . . . . . . . . . . . . . . . . . . 42
4.3.2. Comunicación con el Servicio Web . . . . . . . . . . . . . . . . . . 43
4.3.3. Geolocalización y ubicación . . . . . . . . . . . . . . . . . . . . . . 43
4.3.4. Algoritmo de Búsqueda de Rutas . . . . . . . . . . . . . . . . . . . 44
5. Resultados 51
5.1. Pruebas Aplicación Web . . . . . . . . . . . . . . . . . . . . . . . . . . . . 51
5.1.1. Alta de una Ruta en el Sistema Web . . . . . . . . . . . . . . . . . 51
5.1.2. Modificación de una Ruta en el Sistema Web . . . . . . . . . . . . 52
5.2. Pruebas la Aplicación Móvil . . . . . . . . . . . . . . . . . . . . . . . . . . 53
5.2.1. Instalación y Actualización de la Aplicación Móvil . . . . . . . . 53
5.2.2. Agregar Sitios Personalizados . . . . . . . . . . . . . . . . . . . . . 55
5.2.3. Pruebas para Búsqueda de Rutas . . . . . . . . . . . . . . . . . . . 55
5.2.4. Muestra de alternativas . . . . . . . . . . . . . . . . . . . . . . . . 56
5.3. Comparación . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 57
6. Conclusiones 59
Bibliografía 61
XII
Índice de figuras
XIII
Índice de cuadros
XV
Lista de Abreviaturas
XVII
Dedicado a mis padres: Rodrigo Hernández Fernández y Tomasa
Joaquín Alberto; Ustedes que en todo momento siempre han
estado alentándome a terminar mis metas, apoyado en cada uno
de mis pasos y me han hecho ser lo que soy ahora, porque sin
ustedes, definitivamente no lo hubiese logrado. . .
XIX
Capítulo 1
Introducción
1
2 Capítulo 1. Introducción
con la consiguiente demanda por parte de los consumidores. Tal es la importancia que
están teniendo estos dispositivos en la sociedad actual, que las organizaciones provee-
doras de formación se han visto en la necesidad de producir contenidos específicamen-
te dirigidos a los dispositivos móviles puesto que se trata de un mercado con millones
de usuarios y en constante crecimiento. Podemos mencionar aplicaciones enfocadas a
la salud y el bienestar como lo son planificadores de rutinas de ejercicio, bitácoras para
pacientes médicos, dietas, monitores peso, entre otros.
1.2. Justificacion
El beneficio que obtendremos al tener un sistema con el que podemos administrar
toda la información de las rutas de una ciudad y ademas que se pueda extraer lo mas
relevante para nosotros en un momento determinado, es de gran importancia para rea-
lizar nuestra movilización en la ciudad utilizando el transporte público. Otro punto in-
teresante es aprovechar los recursos de computo que actualmente se tienen en nuestros
dispositivos móviles, ya que actualmente tienen gran capacidad de almacenamiento,
memoria y procesamiento.
Otros trabajos que vale la pena mencionar están mas enfocadas a la planificación
de rutas, trabajos como La Mejor Planificación ruta para Sistemas de transporte públi-
co (Liu 2002), Modelo matemático de Algoritmos de Planificacióón de la mejor para
sistemas Transporte Público (Chao-Lin Liu y Hsieh 2001), Diseño y optimización de
rutas y frecuencias en el transporte colectivo urbano, modelos y algoritmos (Antonio
Mauttone 2003) ya que tener una buena infraestructura puede hacer mas eficiente la
carga y traslado de personas a través de una red de transporte, mas adelante se tocará
el impacto sobre la distribución de rutas en el sistema de transporte.
Existe una propuesta de solución en tiempo real que ayuda a los usuarios a encon-
trar la optima combinación de rutas en un sistema de transporte masivo de pasajeros
basado en buses, TransMilenio (TM) en Bogotá Colombia. La solución considera algu-
nos datos extra para determinar la ruta más corta, tales como niveles de ocupación,
horarios, tiempos estocásticos . El problema es modelado con un grafo con arcos no
negativos y para determinar la ruta mas corta de una estación a otra desarrollaron una
solución basada en el trabajo de Aproximación al Problema de Ruta más Corta con
Trasbordo (Suárez-Sánchez 2005), tal que pueda ser implementada en un dispositivo
móvil. (Sonia Vivas 2006)
3
4 Capítulo 2. Estado del Arte
modelo. El autor abordó el problema de TransMilenio, teniendo en cuenta que los obje-
tivos de la minimización del tiempo y de los cambios de autobús. Su algoritmo requiere
una gráfo ponderado sin ciclos negativos, los nodos de inicio y destino y las restriccio-
nes de tiempo para los bordes, por lo que el grafo dinámico (los arcos son o no válidos
en función del tiempo). Además se pide al usuario final para un número máximo de
autobuses a cambiar que él está dispuesto a hacer, vamos a llamarlo M. El algoritmo
funciona como el original, pero que almacena todas las soluciones posibles para cada
nodo, y antes de almacenar una solución, revisa la restricciones de tiempo, por lo que
la solución sólo será almacenada si todos los bordes están activos en el momento de
la consulta. El algoritmo devuelve un conjunto de soluciones para cada nodo, a fin de
encontrar las rutas de acceso es necesario (como en el algoritmo original) dar marcha
atrás cada ruta que comienza en el nodo de destino. Con estos caminos, el autor utiliza
el índice M para elegir los que son válidos, de acuerdo con el índice, y él devuelve la
ruta con menos tiempo, el que es válido de acuerdo con el índice, y que tiene el menor
número de cambios de autobús. (Suárez-Sánchez 2005)
Otro conjunto importante son los sitios que permiten obtener información sobre el
transporte público, para lo que nos concierne para la ciudad de Puebla el sitio “Ruta
Directa” provee a través de Mapa de Google como llegar a tu destino, dando un punto
de origen a un punto destino, la aplicación se encargará de mostrar el o los distintos
autobuses que se pueden tomar, una vez seleccionado en el mapa se resaltará las rutas
que toman los distintos autobuses. Otras opciones interesantes son la de “Rutas por
punto” y “Puntos de Interés”, la primera dado un punto mostrara las rutas más cer-
canas en al menos unos cien metros, la siguiente como su nombre lo indica mostrara
Capítulo 2. Estado del Arte 5
los puntos de interés más cercanos en el mapa dado un punto en el mapa. La página
dispone este servicio para diez ciudades de México, una de Argentina, una de Estados
Unidos y una de Perú. Este servicio cuenta con aplicación móvil para Android.
Existe otra parecida a la alternativa anterior conocida como “Busca tu Ruta”, esta
tiene la particularidad que nos sugiere donde tomar el punto de partida y donde hacer
nuestro descenso del autobús, es más de una ruta, se nos indicará donde hacer nuestro
trasborde de autobús.
3.1. Infraestructura
3.1.1. Herramientas de Modelado
Se describirán cada una de las herramientas (lenguajes de programación, entornos
de desarrollo y plataformas) que se usaron para el desarrollo del proyecto.
Star UML
Para crear diagramas del Lenguaje de Modelado Unificado (UML) se utilizo la he-
rramienta Dia para la creación de los distintos diagramas. Dia es un programa para
dibujar diagramas de estructura. Se puede utilizar para dibujar diferentes tipos de dia-
gramas.
Justinmind Prototyper
Justinmind Prototyper es una herramienta de creación de prototipos de software.
Se capacidades que se encuentran típicamente en herramientas como lo son arrastrar
y colocación, redimensionamiento, formateo, la exportación e importación de widgets.
Además, tiene características para crear anotaciones en los widgets y la definición de
las interacciones, como enlaces, animaciones, vinculación condicional, cálculos, simu-
lando controles de pestañas, mostrar u ocultar elementos y simulación de base de datos.
El programa crea prototipos de alta calidad un paso antes de la primera versión de una
aplicación móvil o página web. El prototipo se puede utilizar para mostrar carretes y
propósitos de prueba. Justinmind Prototyper se puede utilizar para crear prototipos y
simulaciones de software sin ningún tipo de codificación, lo que permite a los no pro-
gramadores estar involucrados en el proyecto.
Puede ser utilizado para la pruebas remotas utilizando Justinmind Usernote, que
permite a los usuarios navegar por el prototipo de forma remota. Los usuarios también
pueden crear comentarios sobre elementos específicos en el prototipo con el fin de dar
su opinión. La aplicación también es compatible con la integración de las herramientas
de análisis como Google Analytics, WebTrends, ClickTale, UserTesting y otros para lle-
var a cabo pruebas remotas en tiempo real.
7
8 Capítulo 3. Análisis del Sistema
Entre las partes del programa están un editor de código PHP, con diversas ayudas
a la vez que escribes, un editor de proyectos o archivos, que deben estar subidos en
algún servidor web con soporte para PHP, y un sistema para hacer debug en PHP y
depurar las aplicaciones web en PHP de una manera extremadamente sencilla.
La versión de PHP es la 5.5.31 y para MySQL, que soportará nuestra base de datos
es la versión 5.0. Estas son las versiones mínimas requeridas para el sistema.
contabiliza cuando un mapa se inicializa en una página web. La interacción del usua-
rio con el mapa una vez que este se haya cargado (por ejemplo, desplazarse por el
mapa, ampliar el mapa o cambiar de mapa de carretera a mapa de satélite) no tiene
ningún efecto sobre los límites de uso. Estos límites solo se aplican a los sitios que ha-
yan excedido el límite durante más de 90 días consecutivos debido a los aumentos de
trafico a corto plazo.
El uso del API de Google Maps requiere el acceso mediante una clave de API. Utili-
zar una clave de API nos permite controlar cómo utiliza tu aplicación el API de Google
Maps y nos aseguramos de que Google puede ponerse en contacto contigo con respecto
a tu aplicación si fuese necesario.
Para fines los fines de elaboración de este trabajo solo se requerirá la licencia gra-
tuita, pero si en un momento dado llegase a aumentar considerablemente la demanda
del sitio, será necesario obtener adquirir un limite adicional o una licencia para el API
de Google Maps for Business. Ambas opciones permiten ampliar el limite de carga que
podemos hacer.
3.1.4. Bootstrap
Bootstrap es el framework de HTML, CSS y JavaScript más popular para el desa-
rrollo de sitios web responsivos. Esta hecho para hacer mas rápido y fácil el desarrollo
web del front-end, para desarrolladores de todos los niveles, dispositivos de todas las
formas y proyectos de todos los tamaños.
En diseño de software front-end es la parte del software dedicada a interactuar con
los usuarios de la aplicación y el back-end es la encargada de procesar la entrada de
datos del front-end. Esta separación ayuda a mantener las diferentes partes del sistema
separadas.
Existen varias formas diferentes de empezar con Bootstrap, cada una orientada a un
tipo de público en función de su nivel técnico. La forma más facil es descargar el código
CSS y JavaScript compilado de su pagina oficial o de alguna plantilla personalizada.
El desarrollo del sitio web se utilizó la plantilla basada en Bootrap SPOT Theme, es
una de las diferentes plantillas gratuitas que ofrece en http://www.blacktie.co
3.1.5. XAMPP
XAMPP es un servidor independiente de plataforma, software libre, que consiste
principalmente en la base de datos MySQL, el servidor web Apache y los intérpretes
para lenguajes de script: PHP y Perl. El nombre proviene del acrónimo de X (para cual-
quiera de los diferentes sistemas operativos), Apache, MySQL, PHP, Perl. Este paquete
de software nos ayudará a realizar el diseño del primer sistema del cual se estará con-
formado este trabajo.
que proporcione las bases bajo las cuales se va a desarrollar. En esta sección y en las
siguientes se detallarán los procesos de ingeniería de software, análisis y diseño que
implican el desarrollo de una aplicación de software. Se detallaran los procesos y prin-
cipios de análisis y diseño del software que sustentan al proyecto.
Desarrollar una aplicación móvil que muestre las alternativas de rutas de trans-
porte publico en la ciudad.
Desarrollar un servicio que pueda proveer los datos de cada una de las rutas
existentes.
Desarrollo de una plataforma web que pueda ser utilizada para crear y modificar
información para cada una de las rutas
La aplicación principal debe tener características tales que se cumpla con el obje-
tivo del proyecto, esto es, que la aplicación este orientada a los usuarios para que
pueda ser aplicado al área del problema.
Para el desarrollo de esta solución, tanto web como móvil, se contemplaron cuatro
etapas, en primer lugar tenemos el desarrollo de un prototipo para tener un panorama
de la apariencia de nuestro sistema y a su vez obtener los datos de cada una de las
rutas, los cuales serán base indispensable para resolver el problema. El modelado de
la aplicación se modelara la interacción del usuario con la aplicación de un Lenguaje
Unificado y con casos de uso. Se identificaran los casos necesarios, tales como: registro,
autenticidad, captura, visualización de información. A partir de los casos de uso identi-
ficados se realizará un modelo de análisis en el cual se presentara en tres capas: capa de
Capítulo 3. Análisis del Sistema 11
interfaz con el usuario, capa lógica y de control, por último la capa de almacenamiento
y comunicación; dentro de estas tres capas se modelaran nuestras clases, en las cuales
se mencionaran los atributos y métodos que se tendrán. Posteriormente se realizara un
diagrama de clases refinado, en este caso se refina lo que se haya hecho en el modelo
de análisis. Una vez definido estos elementos se podrán implementar nuestro sistema,
tomando en cuenta que ya se tendrá un modelo y será más fácil poder modificar o
incrementar determinadas funciones.
El modulo principal esta compuesto por un mapa en el cual se marcarán dos pun-
tos: el punto de origen, del cual partirá el usuario, el siguiente será el destino al cual
usuario desea trasladarse. Una vez que estos dos pasos sean completados se determi-
nará una solución aproximada a la optima. Como ayuda adicional se mostrara una
ventana emergente que nos mostrará los detalles de la solución encontrada.
Capítulo 3. Análisis del Sistema 13
Registro
14 Capítulo 3. Análisis del Sistema
Acceso
Administración de mapas
Administración de rutas
Administración de usuarios
Nuestro primer componente son las entidades las cuales representan los compo-
nentes de nuestro sistema, los cuales soportan las tablas de la base de datos. En la
figura básicamente se representan los atributos y métodos para accesar a cada uno de
los atributos del objeto. El control y el enlace a base de datos están fuertemente ligados,
así que se incluyen en una sola capa. Tenemos una clase especial para auxiliarnos a
la conexión al servidor donde esta alojada nuestra base de datos. Tendremos la clase
ControlGeneral que sera auxiliar en cargar las configuraciones globales, cada instancia
de esta sera necesaria para cargar el enlace a funciones de base de datos y las entidades
del sistema.
La capa de servicios, nos sirve como auxiliar para realizar la comunicación con la
capa de control, pues para el control de nuestras vistas se debe hacer bajo peticiones
asíncronas por medio de AJAX. El FrontEnd, como ya se menciono anteriormente se en-
carga del control de la interfaz de usuario, esto es mediante HTML5, Bootstrap, JQuery
y JavaScript. Por otro lado el BackEnd se controla con PHP.
Para nuestra aplicación móvil contamos con cuatro capas principales: vistas, logica
y control, base de datos y servicios. La primera se encarga de mostrar al usuario la inter-
faz, la segunda se encarga de controlar y validar cada uno de los elementos que entran
al sistema, la tercera se encarga de acceder a la información existente en base de datos
y la ultima se encarga de comunicarse con el servidor para realizar actualizaciones en
la información.
24 Capítulo 3. Análisis del Sistema
Existen otros paquetes que debemos mencionar, tales como las objetos, componen-
tes y comunes. El primero contiene todos los elementos que representan a algún ele-
mento de nuestro sistema, componentes contiene elementos gráficos que son utilizados
frecuentemente por la capa de vistas. Nuestro ultimo paquete contiene clases y méto-
dos estáticos que son utilizados con frecuencia por todas las otras capas.
Todas las clases de la capa de vistas están relacionadas con la interfaz de usuario,
podemos destacar que tendremos dos clases principales: La pantalla que mostrará las
características de nuestra aplicación y la de inicio, la cual contiene todas las vistas de
nuestra interfaz y que se pueden seleccionar accediendo desde este menú, inicialmente
muestra el mapa de la ciudad. De manera general, cada capa se describe a continuación
Registro de Camiones
Registro de Rutas
Registro de Puntos
Registro de Caminos
Con el fin de facilitar el manejo de los datos y las tablas, cada tabla tendrá por lo
menos un campo que contiene un identificador único para ese registro, un campo para
identificar quién ingresó los datos y otro campo para registrar cuándo se los ingresó. En
la mayoría de los casos, estos campos están ocultos al usuario y el sistema los actualiza
de manera automática. El administrador tendrá acceso a esta información con el fin de
tomar medidas hacia los problemas que puedan surgir.
Después de identificar los grupos, se definió un identificador único para cada tabla,
posteriormente los atributos, posteriormente, las relaciones entre clases, posteriormen-
te que se tenía todo esto, se aplicó hasta la cuarta forma normal para tener un diseño
óptimo de las tablas.
La tabla 3.13 se llevan los registros de los accesos al sistema que realizan los usuarios
registrados.
La tabla 3.17 tiene cada uno de los puntos de control para una ruta, estos son im-
portantes para describir el camino de una ruta
La tabla 3.18 tiene cada uno de los puntos que describen el trayecto de una ruta.
Cliente Tipo 1: Representa el equipo con el que los usuarios interactuarán en el siste-
ma web
Capítulo 3. Análisis del Sistema 31
Las interfaces de comunicación previstas para los nodos, basadas en Servicios Web,
estos posibilitan plantear múltiples escenarios de distribución y permiten el planteo de
una infraestructura multiplataforma.
Capítulo 4
Implementación
Core: Aquí están todas las funciones de Validación, Entidades y conexión a la base de
datos.
33
34 Capítulo 4. Implementación
Para obtener una clave es necesario tener una cuenta de Google. Con esta se debe
acceder Consola de Desarrollador y crear un nuevo proyecto. Se selecciona el proyecto
creado y accedemos a la sección de “APIs y Autenticación”, luego el apartado “Cre-
denciales”.
El API de Google Maps ofrece un servicio de direcciones con el cual podemos obte-
ner trayectos en bicicleta, a pie, transporte publico y automovil. En México hasta 2015,
en particular en particular a la ciudad de Puebla, no existe información relacionada a
rutas para el servicio de direcciones de Google. Así que se decidió explotar la informa-
ción proporcionada por la dada por automóvil. En primera no podemos hacerlo con
el servicio de puntos de camino ya que nos limita a 8 puntos por petición y a 10 pe-
ticiones por segundo (Google-Inc 2015b). Lo que se hizo es hacer solicitudes por cada
segmento, es decir solicitudes entre par de puntos del camino.
38 Capítulo 4. Implementación
Algorithm 4.1 Algoritmo para obtener el camino de una ruta a travéz de una secuencia
de puntos
function CALC R UTA(posicion,limite)
posicion ← posicion > 0AN DBandCalcular?posicion − 1 : posicion
BandCalcular = f alse
if posicion < limite then
delay ← 1000 + (ListaP untos.length ∗ 250)
request.origen(ListaP untos[posicion])
request.destino(ListaP untos[posicion + 1])
request.M odoV iaje(DRIV IN G)
Respuesta ← directionsService.route(request, delay)
RenderizarSegmento(respuesta)
calcRuta(posicion + 1, limite)
else
BandCalcular ← f alse
end if
end function
En el algoritmo 4.1 podemos observar como se solicitan los segmentos de ruta por
intervalos de tiempo, este intervalo irá creciendo en 0,25 segundos conforme el nume-
ro de puntos que vayamos definiendo crezca. Posteriormente enviamos la solicitud en
la variable request y la respuesta que obtendremos es el segmento de trafico, el cual
mostraremos en el mapa y guardaremos el segmento.
El calculo entre dos puntos nos es mismo que el de un espacio euclidiano, ya que
uno de los postulados de Euclides afirma lo siguiente; Dados dos puntos, se puede
trazar una recta (1 sĺa dimensión y sóla dirección) que los une. (Munkres 1999) Por
lo tanto la linea debe ser recta, no curva. Existe otro tipo de geometría que se adapta
a la que necesitamos, esta se denomina Geometría Elíptica. Esta no acepta el quinto
postulado de Euclides, cambiándolo por otro el cual nos dice que por un punto exterior
a una recta no pasa ninguna recta paralela a ella. Para la geometría no euclidiana sus
rectas son rectas cerradas conocidas como geodésicas. Para este tipo de geometría la
Capítulo 4. Implementación 39
suma de los angulos interiores es mayor que 180◦ (Lee 1997). El ejemplo de ella es
globo terráqueo.
Teniendo esto en cuenta una manera de calcular distancias en la superficie de una
esfera es usando fórmula del haversine o semiverseno. Se implemento el método que
esta basado en la La fórmula del semiverseno, existen dos versiones: la versión para
distancias cortas (se describe en la ecuación 4.1) y otra para distancias más grandes
(MobileReference 2009). Como las distancias entre puntos de la ruta son pequeñas se
opto por usar la ecuación para distancias cortas, ademas de representar el radio R de
la tierra en metros.
s !
φ2 − φ1 ∆λ
2 2
∆σ = 2 arcsin sin + cos φ1 cos φ2 sin R (4.1)
2 2
El envió de información se hace mediante AJAX, con formato JSON. Posteriormente
en el BackEnd se hace la transformación al objeto correspondiente. La estructura queda
de la siguiente manera
1 e = {
2 IdNodo: 0,
3 IdCamino: 1,
4 Latitud: 99.1455,
5 Longitud: 24.9194,
6 IdCiudad: 1,
7 DistanciaRecorrida: 120
8 }
Una vez que hayamos cargado todos los elementos que conforman a nuestra ruta
debemos agregar la información que hemos definido en el formulario y los puntos de
control de la ruta para posibles modificaciones a que se requieran a la ruta. Deberemos
agregar toda la informacion en un objeto JSON con la siguiente estructura
1 Object = {
2 tipo: 4,
3 Ruta : JSON.stringify({
4 Descripcion: Descripcion,
5 Precio: Precio,
6 Estatus: 1,
7 IdCamion: Camion,
8 IdLogin: GetIdUsuarioActual()
9 }),
10 Puntos: ListaPuntosControl,
11 Camino: DesCamino
12 }
http://www.cityroute.96.lt/core/include/services/Service.php?json
La variable json debe contener ciertas atributos para que pueda hacerse correcta-
mente la comunicación y dependerá de los datos que queramos solicitar. Esto quiere
decir no todos los campos son obligatorios para determinada consulta, salvo por la va-
riable key que es una clave hexadecimal para poder realizar solicitudes, date que debe
tener el formato especificado de fecha, y tipo que nos indica que tipo de dato se obten-
drá de la consulta representado por un numero entero, todos estos deben ir siempre en
cada una de nuestras solicitudes.
Todas las respuestas que de el servicio serán en formato JSON del tipo arreglo.
1 json = {
2 "key": "key",
3 "date": "yyyy-MM-dd HH:mm:ss",
4 "tipo": "0",
5 "city": "0",
6 "start": "0",
7 "end": "0",
8 "route": "0",
9 }
A continuación se listan cada uno de los diferentes casos de consulta que es posible
especificar para nuestro servicio.
Si deseamos obtener la colección de las distintas ciudades basta con enviar los
atributos obligatorios con tipo = 0.
Para obtener los objetos tipo nodo debemos establecer tipo = 2, establecer el Id
de alguna ciudad en city y para start y end debemos establecer el intervalo que
queremos recuperar.
Capítulo 4. Implementación 41
1 [
2 {"Id":"1",
3 "Latitud":"19.08238",
4 "Longitud":"-98.18061",
5 "IdCiudad":"1"},
6 ]
Paquete Descripción
Contiene a las vistas y a la logica de presentación
cityroute
de las mismas
Contiene componentes de las vistas que son comunes
cityroute.components
y se reutilizan en diferentes instancias
Contiene elementos que auxilian en el acceso a base
cityroute.database
de datos
Contiene las clases que controlan la lógica mas extensa,
cityroute.logic
como lo es la actualización y búsqueda de rutas
Contiene a nuestras entidades utilizadas para representar
cityroute.objetos
los objetos de nuestro sistema
Contiene funciones diversas que son comunes en otros
cityroute.util
paquetes
Contiene una clase que se encarga de la obtencion de
cityroute.webservices
datos desde el servicio web
Para poder calcular la distancia entre dos puntos hay que tener en cuenta que la Tie-
rra no es plana, básicamente se complica por que en el cálculo de la distancia entre am-
bas posiciones debemos contemplar la curvatura terrestre, esto ya se detallo en la sec-
ción anterior de este capitulo cuando tratamos de medir la distancia de un punto a otro
en una ruta. Las distancias a un punto a otro dentro de la ciudad son "muy"pequeñas
comparadas con el radio de la Tierra, por lo que podemos utilizar una aproximación
de la tierra plana, esto se refleja en que triángulos pequeños sobre la superficie de la
44 Capítulo 4. Implementación
esfera suman casi 180, triángulos de mayor tamaño claramente suman más de 180 esto
lo podemos apreciar en la figura 4.6. Si nuestros puntos están a una distancia razona-
ble del otro, es decir, no atraviesan la mitad del mundo ni la linea de cambio de fecha,
podemos simplemente calcular la distancia como si la tierra fuese plana. Como lo que
deseamos es ordenar valores , ni siquiera tenemos que sacar la raíz cuadrada, podemos
simplemente añadir los cuadrados de las diferencias a nuestra consulta.
Para hacer tratable nuestro problema se propuso dividir el problema en dos y bus-
car en extremos opuestos, esto es, hacer una búsqueda tanto en el origen como en el
destino de las rutas más cercanas. ¿Por qué usar esta manera de resolver el problema?
Para realizar búsqueda en Anchura o Profundidad, requeriríamos hacer una búsqueda
mucho más exhaustiva, ademas de que en anchura su espacio de búsqueda es muy
grande y en profundidad el algoritmo no es optimo ni completo, en cambio si hace-
mos una búsqueda bidireccional las debilidades de los algoritmos antes mencionados
se reducen significativamente. Si limitamos la profundidad, en este caso estará acotada
hasta un máximo de 2 la complejidad se convierte en lineal, el resultado que obtendre-
mos es que generaremos un nuevo árbol acotado a una profundidad máxima de dos y
el cual tiene las posibles rutas a tomar. En la tabla 4.2 se hace una comparativa entre los
distintos algoritmos de búsqueda.
Primero
Primero Profun- Profun- Bidire-
Costo en
Citerio en didad didad ccional
Uniforme Profun-
Anchura Limitada Iterativa (si aplica)
didad
Tiempo bd bd bm bl bd bd/2
Espacio bd bd bm bl bd bd/2
¿Optimo? Sí Sí No No Sí Sí
¿Completo? Sí Sí No Sí, si l > d Sí Sí
b es el factor de ramificación; d es la profundidad de la solución más superficial; m
es la máxima profundidad del arbol de búsqueda; l es el límite de profundidad.
Para la búsqueda bidireccional la idea es explorar al mismo tiempo del estado ini-
cial hacia la meta que de la meta hacia el estado inicial hasta que se encuentren en un
estado. También cuando tenemos un factor de arborescencia igual en ambos sentidos se
pueden conseguir buenos ahorros (Morales-Manzanares 2014) (Stuart J. Russell 1995).
Esto aplicado a nuestra solución es buscar las rutas mas cercanas dada la ubicación
(origen y destino) e ir construyendo nuestro árbol de alternativas, en seguida se com-
pará si hay elementos en común en este nivel, se agregará el elemento a una lista de
elementos en común, si por lo menos existen 2 alternativas que cumplan la condición
de pertenencia se terminará la búsqueda, hasta aquí es el primer nivel de búsqueda.
De lo contrario procederemos a hacer una búsqueda de las rutas que se interconecten
46 Capítulo 4. Implementación
con cada uno de las alternativas del árbol generado a partir del origen, sin olvidar de
seguir agregando elementos a nuestro árbol de alternativas, volvemos a buscar los ele-
mentos en común entre los dos arboles y se agregan al nodo padre correspondiente
(Esto corresponderá al trasborde de una ruta a otra). Una vez que hemos terminado de
analizar cada una de las opciones de búsqueda, terminamos el proceso ya que hemos
alcanzado el tope de profundidad y terminamos devolviendo nuestro árbol de alterna-
tivas y nuestrá lista de candidatos.
Otro de los objetivos de la aplicación es sugerir los puntos mas adecuados para
abordar, trasbordar (si aplica) y llegada. La idea es que a partir del árbol ya podado se
extienda cada una de las alternativas, es decir si inicialmente tenemos dos rutas, para
cada una de estas se extienda la secuencia con sus alternativas. En este punto podemos
clasificar las alternativas en 2 tipos: aquellas que solo es una ruta y las que se debe ha-
cer un trasborde de ruta.
Para el caso en el que tenemos una sola ruta el procedimiento es sencillo: del par
de ubicaciones y dada la ruta obtendremos los segmentos de ruta mas cercanos a cada
posición y de estos obtener el mas cercano a nuestra posición. Recordemos que el atri-
buto Id del objeto CaminoDetalle nos proporciona el orden de la ruta y el sentido en el
cual circula, entonces verificamos que la distancia sea positiva, esto nos indica que hay
una secuencia que nos lleva directamente a nuestro destino, ademas verificamos que la
Capítulo 4. Implementación 47
combianción tenga una distancia menor para recorrer. Una vez determinada la combi-
nación adecuada se procede a calcular la longitud y costo monetario del recorrido, este
se agrega a la lista de alternativas.
Algorithm 4.4 Sub parte del algoritmo 4.3 para alternativas con dos rutas
if e.size() = 3 then
p1 ← listaOrdenada.obtener(e[1]);
p1 ← listaOrdenada.obtener(e[2]);
if origenCercano.Id>0 AND destinoCercano.Id>0 then
p1 ← GetElementosCaminoCercanos(e[1], P untosCercanos[0], Origen)
listaOrdenada.Insertar(e[1], p1);
end if
if origenCercano.Id>0 AND destinoCercano.Id>0 then
p2 ← GetElementosCaminoCercanos(e[2], P untosCercanos[1], Destino)
listaOrdenada.Insertar(e[1], p1);
end if
cambio ← GetCaminoEntreRutas(e[2], e[1];
origenCercano ← p1.get(0);
CaminoDetalledestinoCercano ← p2.get(0);
CaminoDetallecambioCercano ← cambio.get(0);
CaminoDetallecambioCercano2 ← cambio.get(0);
for c2 : p2 do
for c3 : cambio do
distancia ← c2.Id − c3.Id
if distancia >1 then
if c2.Id-cambioCercano.Id >distancia OR c2.Id - cambioCercano.Id <0
then
cambioCercano ← c1; destinoCercano ← c2;
end if
end if
end for
end for
cambioCercano2 ← cambioCercano;
cambioCercano ← GetElementoCaminoRuta(e[1], cambioCercano.Id;
for ( doCaminoDetalle c1: p1)
distCambio ← cambioCercano.GetId() − c1.GetId();
if ( thendistCambio>1)
if ( thencambioCercano.GetId()-origenCercano.GetId()>distCambio)
origenCercano ← c1;
end if
end if
end for
if destinoCercano.GetId()-cambioCercano2.GetId()>0 then
distancia1 ← GetDistanciaRecorrida(e[1], origenCercano.Id, cambioCercano.Id;
cambioCercano ← cambioCercano2;
distancia2 ← GetDistanciaRecorrida(e[2], cambioCercano.Id, destinoCercano.Id;
elem ← newDetalleM apa();
elem.ListaRutas ← e[1], e[2];
elem.P asos ← origenCercano, destinoCercano;
elem.Longitud ← distancia;
elem.Descipcion ← GetN ombreRuta(e[1]), GetN ombreRuta(e[1]);
dm.add(elem);
end if
end if
Capítulo 5
Resultados
El objetivo de este capitulo es demostrar la utilidad del sistema Web para adminis-
trar rutas y de la aplicación móvil. Para el sistema web se dará de alta una ruta y se
modificara en un momento dado. La aplicación movil por su lado se pobrará con dis-
tintos puntos de origen y destino, actualización de información, rango de búsqueda,
validación en distintos dispositivos, entre otros.
En algunas ocasiones el servicio envía una alerta con el mensaje OV ERQU ERY LIM IT ,
eso es que porque se ha excedido el numero máximo de solicitudes al servicio por in-
tervalo de tiempo. Es aconsejable dejar de marcar puntos durante algunos minutos ya
que si no se hace es probable que el servicio se nos deniegue parcial o definitivamente.
Cada vez que agreguemos una nueva ruta a nuestra base de datos podrá ser vista
y/o modificada mas adelante. La aplicación móvil deberá hacer uso de la funcionalidad
de descargar información de rutas, contenida en la sección de opciones.
51
52 Capítulo 5. Resultados
Se pueden hacer las modificaciones que se necesiten a cada ruta, incluso inhabilitar,
esto es útil si pensamos en que exista una modificación en la estructura de transporte
de la ciudad. Cada vez que realicemos una modificación debemos actualizar nuestra
aplicación en el apartado de opciones, actualizar información de rutas
Capítulo 5. Resultados 53
( A ) Mapa Inicial
( B ) Resultado
( A ) Pantalla Inicial
( B ) Menú de Navega-
ción
5.3. Comparación
Se repitieron las pruebas en diversos dispositivos y se midió el tiempo que le tomo
hacer la tarea. La carga inicial es la que se efectúa al inicio. La prueba 1 es aquella en
la que los dos puntos están relativamente cerca. La prueba 2 consiste en realizar un
traslado de un punto no popular a uno popular, con popular se da entender que es un
sitio de interés. La prueba 3 es un traslado entre puntos que son populares. La prueba 4
consiste en hacer la búsqueda en extremos de la ciudad. Los resultados se muestran en
la tabla 5.1, los tiempos se expresan en segundos. Cabe resaltar que estas cifras pueden
variar dependiendo de la carga en segundo plano del dispositivo
Conclusiones
59
Bibliografía
61
62 BIBLIOGRAFÍA
Fielding, Roy T. (2014). Hypertext Transfer Protocol (HTTP/1.1): Semantics and Content.
Inf. téc. RFC 7231. W3 Org.
Sucar, L.Enrique, Eduardo.F. Morales y J. Hoey, eds. (2011). Decision Theory Models for
Applications in Artificial Intelligence: Concepts and Solutions. USA: IGI Global. URL:
http : / / www . igi - global . com / book / decision - theory - models -
applications-artificial/45946.
Morales-Manzanares, Eduado (2014). Búsqueda Bidireccional. URL: https : / / ccc .
inaoep.mx/~emorales/Cursos/Busqueda/node19.html (visitado 01-11-2014).
Stuart J. Russell, Peter Norvig (1995). Artificial intelligence: A modern approach. Prentice-
Hall.
Cormen, Thomas H. y col. (2009). Introduction to Algorithms, Third Edition. 3rd. The MIT
Press. ISBN: 0262033844, 9780262033848.