Ernesto Cuadros Vargas (E2)
Alex Cuadros Vargas (E2)
Luis Diaz Basurco (E4)
Christian López del Alámo (E4)
Christian López del Alámo (E4)
Edwin Huarhua Chambi (E4)
Manuel Bellido Oviedo (E4)
1. Universidad Católica San Pablo
Proyecto PIBAP 03-295 Contrato #040
Informe Componente 1
Periodo 1 de Marzo- 30 de Junio 2009
Ernesto Cuadros Vargas (E2) {ecuadros@gmail.com}
Alex Cuadros Vargas (E2) {alex.jcv@gmail.com}
Luis Diaz Basurco (E4) {l.diaz@gmail.com}
Christian López del Alámo (E4) {criloal23@gmail.com}
Christian Portilla Pauca (E4) {xhrist@xhrist.co.cc}
Edwin Huarhua Chambi (E4) {ehuarhua@gmail.com}
Manuel Bellido Oviedo (E4) {manubellido@gmail.com}
18 de junio de 2009
3. Introducción
En el desarrollo de la plataforma de software que brindará información de
rutas que conecten dos puntos dados de una ciudad se considerará que las posi-
bles rutas de conexión conforman un grafo donde las aristas son las calles y
los nodos las esquinas incluyendo también como nodos importantes los puntos
de origen y destino. La ruta incluirá tanto desplazamientos a pié como con ve-
hículos motorizados de transporte público y privado respetando criterios
especícos. Esto obliga a considerar diferentes tipos de grafos como: grafos no
dirigidos en el caso que el desplazamiento sea realizado a pie, y dirigidos en
el caso que se use un vehículo de transporte. Puesto que la elección de la ruta
depende del tiempo, número de trasbordos, costo, etc se trabajar pesos que sern
variables en el tiempo de acuerdo a las condiciones.
En esta primera parte se trabajará bajo supuestos estables. La informacíon
necesaria que incluyen el catastro de vías y de líneas de transporte público para
la obtención del grafo a tratar, se suponen disponibles independiente de la ciudad
en donde se quiera resolver el problema de conexión. Este trabajo incluirá la
suciente exibilidad para adaptarse a cambios de condiciones y de operación
que se incluirán en una segunda parte de este proyecto donde el abordaje tomará
en cuenta consideraciones estocásticas que surgen en el problema real de ruta
más corta.
Cabe mencionar que existen diferentes sistemas que implementan variadas
soluciones al problema de la ruta más corta disponibles para diferentes ciudades
del mundo. Estos sistemas son generalmente disponibilizados por la empresa de
transportes contratista encargada del transporte público de la ciudad. Entre es-
tos sistemas, algunos de los que proveen una mayor información son los ofrecidos
por Massachussets Bay Transportation Authority (http://www.mbta.com/) del
estado de Massachussets en los Estados Unidos de América, Transport of Lon-
don (http://www.t.gov.uk/) de la ciudad de Londres en Inglaterra y Verkehrs-
und Tarifverbund Stuttgart (http://www.vvs.de/) de la ciudad de Stuttgart en
Alemania. Este último en particular es capaz de calcular rutas que incluyan
trayectos a pié, en taxi, y los diferentes sistemas de transporte urbano (metro,
ómnibus, tranvía, etc.).
Estos sistemas lidian con cronogramas de circulación jos para todas las
líneas de transporte. Por esta raízón algoritmos exactos de búsqueda de rutas
pueden ser aplicados [Gallo y Pallottino, 1988; Cherkassky et al. 1996]. Existen
investigaciones especícas en este respecto que evalúan las diferentes técnicas
2
4. de cálculo de rutas más cortas para el caso particular de redes de transporte
público y privado. Las más relevantes en este contexto son las presentadas por
Zhan y Noon [Zhan, 1997; Zhann y Noon 1998; Zhann y Noon 2000]. Los autores
en un inicio evalúan un conjunto de tres algoritmos de cálculo de la ruta más
corta [Zhan,1997], los cuáles se demostró que ofrecían los mejores resultados
en redes viales reales [Cherkassky et al. 1996], especicamente 1) el algoritmo
de crecimiento de grafos implementado con dos colas [Pallottino 1984], 2) el
algoritmo de Dijkstra [1959] implementado con cubos (buckets) aproximados
[Goldberg y Silverstein, 1995] y 3) el algoritmo de Dijkstra implementado con
buckets dobles [Cherkassky et al. 1996]. En su evaluación, Zhan resume estos tres
algoritmos y demuestran las estructuras de datos y procedimientos relacionados
a ellos.
En un segundo trabajo Zhan y Noon [1998] tratan el problema especíco
de la aplicación de algoritmos de rutas más cortas en redes viales reales. Es
dicho trabajo los autores prueban diferentes algoritmos en una variedad de re-
des viales reales lo que conlleva a la identicación de algoritmos ideales para
realizar este cálculo. Posteriormente un estudio comparativo entre algoritmos
de establecimiento de etiquetas frente a algoritmos de corrección de etiquetas,
en problemas de cálculo de rutas más cortas entre dos nodos de una red, fue
realizado [Zhan y Noon 2000]. En este estudio también se utilizó redes viales
reales y se comparó especicamente el algoritmo de Dijkstra implementado con
cubos (buckets) aproximados [Goldberg y Silverstein, 1995] y el algoritmo de
crecimiento de grafos implementado con dos colas [Pallottino 1984]. Trabajos
centrados en el cálculo de rutas más cortas en redes viales especícos para
escenarios temporales (por ej. simulación en el tiempo) también han sido desar-
rollados [Kaufman y Smith, 1993; Horn, 2000; Horn, 2006].
A pesar de ser un tema bien documentado, como mencionado anteriormente,
estos algoritmos exactos pueden ser aplicados en situaciones donde el cronogra-
ma de circulación de las empresas de transporte público es jo. Actualmente
esta no es la situación en las ciudades del país. Por lo tanto una alternativa que
permita incluir la exibilidad necesaria, relajar e introducir fácilmente restric-
ciones de acuerdo a los cambios estructurales del sistema de transporte (tales
como la implementación de servicios de transporte público organizados). Esto
se puede lograr atacando el problema como un cálculo estocástico de rutas más
cortas.
Nuestro propósito en el presente trabajo es desarrollar una técnica más e-
ciente que las existentes en términos de exibilidad y de tiempo de procesamien-
to. Así mismo, los trabajos existentes al respecto presentan resultados teóricos
y no incluyen su evaluación en redes viales reales como en el caso de algoritmos
exactos. Por lo tanto, pretendemos también realizar esta evaluación.
3
5. Capítulo 1
Preliminares
En esta primera parte introducimos los conceptos básicos necesarios para el
desarrollo y entendimiento de los resultados obtenidos hasta el momento.
1.1. Teoría básica de grafos
Grafos
Para cualquer conjunto V, denotaremos por V (2) el conjunto de todos los
pares ordenados o no ordenados de elementos de V.
Un grafo es un par (V, A) en donde V es un conjunto arbitrário y A es un
subconjunto de V (2) . Los elementos de V son llamados vértices o nodos y los de
A son llamadas aristas.
Para nes del presente estudio el conjunto V es nito.
La denición de grafo implica que a toda arista e ∈ A del grafo se le puede
asociar una pareja ordenada (u, v) o desordenada {u, v} de nodos u, v del grafo.
Se dene el grado de entrada de v ∈ V como el número de aristas que inciden
en v .
De forma paralela se dene el grado de salida de v como el número de aristas
que emergen de v .
El grado de v es la suma de los grados de entrada y salida de v . Así el grado
de un grafo es el máximo grado de sus vértices.
Caminos
Camino desde un vértice u∈V a un vérticev ∈ V es una sucesión {v0 ; v1 ; . . . ; vk }
de vértices de G = (V ; A) tal que v0 = u; vk = v ; (vi ; vi+1 ) ∈ A, para todo
i = 0..k .
La longitud de un camino {v0 ; v1 ; ...; vk } es el número k de aristas que lo
forman.
Se denomina camino simple a un camino en el que todos sus vértices son
distintos.
Un ciclo es un camino simple {v0 ; v1 ; . . . ; vk } tal que v0 = vk .
4
6. Grafo acclico es un grafo sin ciclos.
Subgrafos
Se dice que G = (V ; A ) es un subgrafo de G = (V ; A) si V ⊆ V y A ⊆ A.
El subgrafo inducido por V ⊆ V es un subgrafo G = (V ; A ) tal que
A = {(u; v) ∈ A : u; v ∈ V }.
Conexidad
Antes de denir cuando un grafo es conexo recordemos que un vértice alcan-
zable desde un vértice u es cualquier vértice v para el que existe un camino de
u a v.
Un grafo (fuertemente) conexo es un grafo (dirigido) G = (V ; A) en el que
u; v ∈ V , v es alcanzable desde u. Se denominan componentes (fuertemente)
conexas de un grafo (dirigido) a las clases de equivalencia de vértices según la
relación ser mutuamente alcanzable.
Un grafo completo es un grafo G = (V ; A) en el que ∀u; v ∈ V ; u = v;
(u; v) ∈ A
Isomorsmo de grafos
Dos grafos G = (V ; A); G = (V ; A ) son isomorfos si existe una biyección
f :V →V tal que (u; v) ∈ A si y solo si (f (u); f (v)) ∈ A
Grafos etiquetados
Se denomina grafo etiquetado a un grafo G = (V ; A) acompañado de una
función f : A → E, donde E es un conjunto cuyas componentes se denominan
etiquetas.
Grafo ponderado es un grafo etiquetado con números reales (E = R)
árboles
Se dene un bosque como un grafo no dirigido aciclico.
Un árbol es un grafo en el que existe único nodo desde el que se puede acceder
a todos los demás y cada nodo tiene único predecesor, excepto el primero, que
no tiene ninguno. También podemos denir un árbol como:
Un grafo conexo y sin ciclos.
Un grafo sin ciclos y con n−1 aristas, siendo n el némero de vértices.
Grado de un nodo en un árbol es el número de subárboles de aquel nodo.
Denominamos hojas en un árbol a los nodos nales. Un árbol de máximo alcance
es aquel que obtenemos en un grafo conexo y sin ciclos.
Por otro lado, se denominará árbol de mínima expansión es el árbol de
máximo alcance cuyo valor es mínimo, es decir, la suma de sus aristas es mínima.
Dentro de los tipos de árboles a considerar en el presente trabajo se tiene:
Un árbol libre que viene a ser un grafo no dirigido acíclico conexo.
Un árbol de recubrimiento de un grafo no dirigido G = (V ; A) es un a¯bol
libre T = (V A ) tal que V =V y A ⊆ A.
5
7. Un árbol enraizado es un a¯bol libre con un vértice distinguido denominado
raíz. La raíz de un árbol A se denota como raiz(A), o simplemente A si
no hay confusión.
Theorem 1 Si G es un grafo con M 2 vértices, entonces los siguientes
proposiciones son equivalentes:
1. G es un árbol libre.
2. G es conexo y tiene M − 1 aristas.
3. Cualquier par de vértices están conectados por un único camino.
4. Si se añade una arista a G se crea un ciclo.
Sea A un árbol enraizado en el vértice r y sea v un vértice de A. Sea C el
único camino de r a v:
1. Se dice que un vértice u es antecesor o predecesor de v, siu est en C. En
este caso también se dice que v es descendiente o sucesor u,
2. Si (u; v) es la última arista de C, se dice que u es el (único) padre de v
y se denota como u = p(v). Así mismo, se dice que v es un hijo de u. El
conjunto de hijos de un vértice v se denota como hijos(v).
3. Dos vértices v ,v de A son hermanos, si p(v ) = p(v).
4. Se dice que un vértice v es una hoja si hijos(v) = nodos internos son
aquellos vértices que no son hojas.
5. La profundidad de v en A es la longitud del camino C desde la raíz hasta
v.
6. Altura de A, h(A), es la profundidad de la hoja de mxima profundidad.
7. El grado de un vértice v se dene como la talla de hijos(v).
Un a¯bol ordenado es un a¯bol enraizado en el que los hijos de cada vértice
esta« ordenados.
1.2. Algoritmos sobre grafos
1.2.1. Algoritmo de Dijkstra del camino mínimo
Esencialmente el algoritmo Dijkstra del camino mínimo es un algoritmo para
la determinación del camino más corto dado un vértice origen al resto de vér-
tices en un grafo dirigido y con pesos en cada arista. La idea subyacente en este
algoritmo consiste en explorar todos los caminos más cortos que parten del vér-
tice origen y que llevan a todos los demás vértices; cuando se obtiene el camino
más corto desde el vértice origen, al resto de vértices que componen el grafo, el
algoritmo se detiene.
6
8. Algoritmo
Teniendo un grafo dirigido ponderado de N nodos no aislados, sea x el nodo
inicial, un vector D de tamaño N guardar al nal del algoritmo las distancias
desde x al resto de los nodos.
1. Inicializar todas las distancias en D con un valor innito relativo ya que
son desconocidas al principio, exceptuando la de x que se debe colocar en
0 debido a que la distancia de x a x sera 0.
2. Sea a=x (tomamos a como nodo actual).
3. Recorremos todos los nodos adyacentes de a menos los nodos marcados,
llamaremos a estos vi .
4. Si la distancia desde x hasta vi guardada en D es mayor que la distancia
desde x hasta a sumada a la distancia desde a hasta vi ; esta se substituye
con la segunda nombrada, esto es: si (D1 Da + d(a, vi )) entonces Di =
Da + d(a, vi )
5. Marcamos como completo el nodo a.
6. Tomamos como próximo nodo actual el de menor valor en D (puede hac-
erse almacenando los valores en una cola de prioridad) y volvemos al paso
3 mientras existan nodos no marcados.
Una vez terminado al algoritmo, D estar completamente lleno.
Complejidad
Orden de complejidad del algoritmo: O(|V |2 + |E|) = O(|V |2 ) sin utilizar
cola de prioridad, O((|E| + |V |)log|V |) utilizando cola de prioridad (por ejemplo
un montículo). Podemos estimar la complejidad computacional del algoritmo
de Dijkstra (en términos de sumas y comparaciones). El algoritmo realiza a lo
más n−1 iteraciones, ya que en cada iteración se añade un vértice al conjunto
distinguido. Para estimar el número total de operaciones basta estimar el número
de operaciones que se llevan a cabo en cada iteración. Podemos identicar el
vértice con la menor etiqueta entre los que no están en Sk realizando n−1
comparaciones o menos. Despus hacemos una suma y una comparación para
actualizar la etiqueta de cada uno de los vértices que no están en Sk . Por tanto,
en cada iteración se realizan a lo sumo 2(n − 1) operaciones, ya que no puede
haber más de n − 1 etiquetas por actualizar en cada iteración. Como no se
realizan más de n−1 iteraciones, cada una de las cuales supone a lo más 2(n−1)
operaciones, llegamos al siguiente teorema.
Theorem 2 El Algoritmo de Dijkstra realiza O(n2 ) operaciones (sumas y com-
paraciones) para determinar la longitud del camino más corto entre dos vértices
de un grafo ponderado simple, conexo y no dirigido con n vértices.
7
9. Pseudocódigo
Estructura de datos auxiliar: Q = Estructura de datos Cola de prioridad (se
puede implementar con un montículo)
DIJKSTRA (Grafo G, nodo-fuente s )
// inicializamos todos los nodos del grafo. La distancia de
// cada nodo es infinita y los padres son NULL
Para cada u en V[G] hacer distancia[u] = INFINITO
padre[u] = NULL
fpara
distancia[s] = 0
// encolamos el nodo-fuente s
Encolar (cola, grafo)
mientras cola no es vaca hacer
// OJO: Se extrae el nodo que tiene distancia mínima y se
// conserva la condici'on de Cola de prioridad
u = extraer-minimo(cola)
para cada v en adyacencia[u] hacer
si distancia[v] distancia[u] + peso (u, v) do
distancia[v] = distancia[u] + peso (u, v)
padre[v] = u
fsi
Pseudocódigo sin cola de prioridad
funcion Dijkstra (Grafo G, nodo-salida s)
// Usaremos un vector para guardar las distancias del nodo salida al
// resto. Inicializamos el vector con distancias iniciales
// boleano visto[n]
// vector de boleanos para controlar los vertices
// de los que ya tenemos la distancia minima
para cada w en V[G] hacer
Si (no existe arista entre s y w) entonces
distancia[w]=Infinito // marcar la casilla con un -1 por ejemplo
Sino
distancia[w] = peso (s, w)
fsi
fpara
distancia[s] = 0
visto[s] = cierto
// n es el numero de vertices que tiene el Grafo
mientras (no-esten-vistos-todos) hacer
vertice = coger-el-minimo-del-vector distancia y que no este visto;
visto[vertice] = cierto;
para cada w ? sucesores (G, vertice) hacer
si distancia[w]distancia[vertice]+peso (vertice, w) entonces
8
10. distancia[w] = distancia[vertice]+peso (vertice, w)
fsi
fpara
fmientras
finfuncion
Al nal tenemos en el vector distancia en cada posición la distancia mínima
del vértice salida a otro vértice cualquiera.
1.2.2. Algoritmo de Kruskal
El algoritmo de Kruskal es un algoritmo de la teoría de grafos para encontrar
un a¯bol recubridor mínimo en un grafo conexo y ponderado. Es decir, busca
un subconjunto de aristas que, formando un a¯bol, incluyen todos los vértices
y donde el valor total de todas las aristas del a¯bol es el mínimo. Si el grafo no
es conexo, entonces busca un bosque expandido mínimo (un a¯bol expandido
mínimo para cada componente conexa).
1. Se marca la arista con menor valor. Si hay más de una, se elige cualquiera
de ellas.
2. De las aristas restantes, se marca la que tenga menor valor, si hay más de
una, se elige cualquiera de ellas.
3. Repetir el paso 2 siempre que la arista elegida no forme un ciclo con las
ya marcadas.
4. El proceso termina cuando tenemos todos los nodos del grafo en alguna
de las aristas marcadas, es decir, cuando tenemos marcados n−1 arcos,
siendo n el número de nodos del grafo.
Pseudocódigo
Entrada: Un grafo ponderado conexo con todos sus pesos diferentes.
Salida: Las aristas de un a¯bol generador minimal.
i = 1;
N = tamagno del grafo de Entrada en numero de vertices;
mientras (i N) hacer
escoger la arista de peso minimo A de entre todas las que no han sido escogidas;
si A no forma ciclo con las que ya forman parte de la Salida entonces
agnadir A a la Salida;
i = i + 1;
fsi
fmientras
Por lo tanto, como podemos ver, el algoritmo de Kruskal va generando difer-
entes bosques con las aristas que va seleccionando y posteriormente se van unien-
do hasta formar el a¯bol de expansin mínimo. Complejidad del algoritmo m el
9
11. número de aristas del grafo y n el número de vértices, el algoritmo de Kruskal
muestra una complejidad O(mlogm) o, equivalentemente, O(mlogn), cuando se
ejecuta sobre estructuras de datos simples. Los tiempos de ejecución son equiv-
alentes porque: ”m es a lo sumo n2 y logn2 = 2logn es O(logn). ïgnorando los
vértices aislados, los cuales forman su propia componente del a¯bol de expansin
mínimo, n?2m, as que log n es O(logm).
Se puede conseguir esta complejidad de la siguiente manera: primero se or-
denan las aristas por su peso usando una ordenacin por comparación con una
complejidad del orden de O(mlogm); esto permite que el paso .eliminar una
arista de peso mínimo de C se ejecute en tiempo constante. Lo siguiente es us-
ar una estructura de datos sobre conjuntos disjuntos para controlar qu vértices
están en que componentes. Es necesario hacer orden de O(m) operaciones ya que
por cada arista hay dos operaciones de búsqueda y posiblemente una unión de
conjuntos. Incluso una estructura de datos sobre conjuntos disjuntos simple con
uniones por rangos puede ejecutar las operaciones mencionadas en O(mlogn).
Por tanto, la complejidad total es del orden de O(mlogm) = O(mlogn). Con
la condición de que las aristas están ordenadas o puedan ser ordenadas en un
tiempo lineal (por ejemplo, mediante el ordenamiento por cuentas o con el or-
denamiento Radix), el algoritmo puede usar estructuras de datos de conjuntos
disjuntos más complejas para ejecutarse en tiempos del orden de O(m?(n)),
donde ? es la inversa (tiene un crecimiento extremadamente lento) de la función
de Ackermann.
1.2.3. Algoritmo de Prim
El algoritmo de Prim permite hallar el a¯bol minimal de cualquier grafo
ponderado. Hay que seguir los siguientes pasos:
1. Se marca un nodo cualquiera, ser el nodo de partida.
2. Seleccionamos la arista de menor valor incidente en el nodo marcado an-
teriormente, y marcamos el otro nodo en el que incide.
3. Repetir el paso 2 siempre que la arista elegida enlace un nodo marcado y
otro que no lo es.
4. El proceso termina cuando tenemos todos los nodos del grafo marcados.
Pseudocódigo
Entrada: Un grafo ponderado conexo con todos sus pesos diferentes.
Salida: Las aristas de un a¯bol generador minimal.
i = 1;
N = tamagno del grafo de Entrada en numero de vertices;
mientras (i N) hacer
escoger la arista de peso mínimo A de entre todas las que aún no han sido escogidas y son in
si la Salida aún esta vacía, es decir, que estamos en la primera iteracion entonces
10
12. escoge la arista A de menor peso;
fsi
si A no forma ciclo con las que ya forman parte de la Salida entonces
agnadir A a la Salida;
i := i + 1;
fsi
fmientras
En este caso podemos observar que el algoritmo de Prim a cada iteración
va formando un a¯bol que va creciendo hasta completar el a¯bol de expansin
mínimo del grafo de entrada.
1.3. Algoritmos
1.3.1. Dijkstra: Camino mas corto
Este algoritmo resuelve el problema de encontrar la ruta mas corta entre un
nodo origen y un nodo destino en un grafo G = (V, E), siendo E el conjunto de
aristas con peso no negativo, asumimos que w(u, v) ≥ 0
Algorithm 1 Dijkstra(G,w,s)
Require: n ≥ 0 ∨ x = 0
Ensure: y = xn
INITIALIZE-SINGLE-SOURCE(G,s)
n←φ
Q ← V [G]
while N = 0 do
u ← EXT RACT − M IN {Q}
S ← S(U )
for all each vertex v Adj[u] do
RELAX(u, v, w)
end for
end while
1.3.2. Floyd-Warshall: Todos los caminos mínimos
El algoritmo de Floyd-Warshall calcula los caminos mínimos que existan
entre todos los pares de nodos de un Grafo dirigido G = (V, E). Donde V es el
conjunto de VAlgortices y E son el conjunto de Aristas. La complejidad de este
algoritmo es Θ(V 3 ) y se asume que no existen ciclos de costo negativo.
Asumiendo que los vértices de G son V = {1, 2, 3, ..., n} consideremos un
subconjunto {1, 2, 3, ...k} de vértices para algún k . Para cualquier par de vér-
tices u, v ∈ V , consideremos todos los caminos desde i hacia j cuyos vértices
intermedios son sacados de {1, 2, 3, ...k}, y sea p el camino de costo mínimo
11
13. de todos ellos (p es un camino simple). El algoritmo Floyd-Warshall explota la
relación de p y el camino mínimo entre i y j con todos los vértices intermedios
en el conjunto {1, 2, 3, ...k−1}. Ésta relación depende en que k sea o no el vértice
intermedio del camino p de la siguiente manera:
(k) wij if k = 0
dij = (k−1) (k−1) (k−1)
min(dij , dik + dkj ) if k ≥ 1
El seudo-código para el algoritmo de Warshall es el siguiente:
Algorithm 2 FLOYD-WARSHALL(w)
n ← f ilas(w)
D(0) ← W
for k ← 1 to n do
for i ← 1 to n do
for j ← 1 to n do
d(k)ij ← min(d(k−1)ij , d(k−1)ik + d(k−1)kj )
end for
end for
end for
return D(n)
12
14. 1.3.3. Desempeño de los algoritmos de busqueda
13
15. 1.4. Editor de Grafo
1.4.1. Introducción
Este editor esta basado en el api de google Maps la cual nos permite hacer
una interfaz de usuario para poder desplazarnos por mapas del mundo, hacer
edición sobre los mismos, asimismo como manipular información relativa a los
mapas de google Maps, también se ha hecho uso de YUI Yahoo User Interface
un framework de programación en javascript que nos permite interacción Ajax
entre nuestra interfaz y el servidor remoto mediante el cual se procesa solicitudes
de información de tipo variado como puede ser paginas Web, imágenes, y todo
tipo de información que nos sea útil.
Editor Grafo
14
17. 1.4.2. Características del editor
El editor del grafo nos permite hacer la edición de nodos de modo sencillo,
sus principales características son:
Creación de Nodos del grafo mediante la interfaz
Almacenamiento de información del nodo del grafo.
Modicación del nodo mediante la interfaz.
Almacenamiento de cambios de la información del nodo del grafo.
Eliminación de nodo de grafo.
Creación de aristas del grafo mediante la interfaz.
Almacenamiento de información del arista del grafo.
Almacenamiento de cambios de la información del nodo del grafo.
Navegación en el mapa por medio de el mouse.
Agrandar o disminuir la proporción del mapa.
Desplazamiento en el mapa por medio del localizador.
Ver los tipos de mapas como son satelital , en relieve y mixto.
Nos muestra información del punto central del mapa para ubicar coorde-
nadas del mismo.
Se puede hacer la carga de información mediante una archivo especico
para la carga de información en el mapa.
1.4.3. Funcionalidad del editor
El modo de funcionamiento es sencillo y de facil interacción con el usuario:
Edición de nodos:
En la edición de los nodos podemos crear un nodo al hacer clic sobre el
mapa, inmediatamente se cargara la información en el archivo saved.txt y en el
archivo nodes.txt, además de generar grácamente el nodo correspondiente en
el mapa.
16
18. Borrado de un nodo, esta tarea se logra haciendo doble clic encima de un nodo
en particular, en ese momento se sucede el cambio en la información registrada
en los archivos de nodos y aristas tanto como en el archivo de información global
del grafo saved.txt.
Modicación del nodo, al arrastrar el nodo con el mouse la interfaz hará
el desplazamiento del nodo en la interfaz asimismo como la modicación de
la información relacionada con el nodo en particular, tomando en cuenta el
desplazamiento de las aristas asimismo como el nodo.
17
19. Edición de Aristas:
Creación de aristas, para poder crear una arista la condición minima de
creación de aristas es que por lo menos haya una arista creada, sin la misma la
consecución de la creación de la misma no sera posible, por tanto para crear una
arista hacemos clic en un nodo y luego procedemos a hacer clic sobre otro nodo
para poder generar gracamente nuestra arista, luego la información relativa a
la arista generada será almacenada.
El borrado de una arista es consecuencia del borrado de un nodo ante el bor-
rado de un nodo se borraran las aristas correspondientes al mismo así como la
información relacionada a la arista.
La modicación de una arista es dada según la modicación que se de en un
nodo en particular puesto que la arista es dependiente de un nodo en especi-
co, por tanto al ser modicado su localización del nodo será posteriormente
modicada la arista.
Desplazamiento en el mapa:
El desplazamiento en el mapa puede ser hecho en función del solo uso del
mouse o del uso del mouse mas el desplazador del mapa conjuntamente con la
acción del mouse, para poder desplazarse en el mapa debemos arrastrar con el
mouse el mapa hacia la locación que deseamos ver o haciendo uso del desplazador
podemos hacer clic encima de los indicadores de dirección y desplazarnos hacia
una locación que deseemos ver.
18
20. Vistas de los mapas:
En el mapa tenemos distintos tipos de vista, para poder hacer uso de las
mismas solo debemos hacer clic en los botones de la izquierda superior derecha
y esperar la carga de la respectiva vista.
Carga de información en el mapa:
Para hacer la carga de información del mapa, tenemos que hacer click en
el boton LoadFile mediante el cual cargara un dialogo en el cual accedemos
19
21. al cuadro de dialogo abrir y seleccionamos un archivo que tenga un formato
adecuado para hacer la carga de información y procedemos a hacer click en el
boton cargar. Dependiendo de la velocidad de conexión se dara a continuación
la carga de información del grafo en el mapa.
20
23. 1.4.4. Formato de archivo de Editor Grafo
Para poder hacer uso correcto de las características de nuestro editor de
grafo tenemos que tener un formato adecuado el cual es el que a continuación
se detalla:
En la parte inicial colocamos toda la información de los nodos siguiendo
la norma básica de tener un identicador por Ej.: id1 luego la latitud y a
continuación la longitud.
Seguidamente se coloca para hacer la diferencia de la información que
viene a continuación:
Se coloca información de los edges un identicador de edge por Ej. edge1
luego ideticador de nodo inicial posterior a este un identicador de nodo nal.
22