Bueno Hola buenas tardes a todos Bienvenidos a este nuevo webinar organizado por por un Girona Antes que nada debo comentaros que el webinar se está grabando y que es imprescindible que todos los asistentes tengáis silenciado el micrófono y ya apagada la cámara si tenéis alguna pregunta o comentario podéis hacerlo por escrito a través del chat Mi nombre es rosa olivella y soy gestora de proyectos en el servicio de psique y teletección el site de la universitat de Girona el site es uno de los socios de la asociación uniciencia internacional una red mundial de universidades que tiene como objetivo mejorar las competencias de Los profesionales de la tecnologías de la información geográfica a partir de programas formativos a distancia pues es en este contexto que desde el sitio de la Universidad de Girona somos los responsables en España de organizar el programa donde Girona de formación online de máster y posgrados en sí Y del que la coordinadora académica el máster United Girona es un programa totalmente a distancia y que cuenta con un primer curso común y un segundo curso de especialización cuenta con dos especializaciones que son la de análisis espacial y deje informática y programación en Sí para llevar a cabo el programa que es 100% online disponemos de una plataforma de learning basada en moodle y un equipo de profesionales de las tic que aportan sus conocimientos a través de materiales teóricos prácticos y el apoyo al estudiante el programa además dispone de una coordinadora de estudiantes Laura Olivas que también está presente en este webinar y que la tenéis disponible en el chat ella es quien hace un seguimiento personalizado de los estudiantes a lo largo de todo su paso por por Girona y que es seguramente la cara o las palabras más conocidas que muchos de vosotros tenéis en vuestro paso por univis Pues bien el webinar que vamos a dar paso en breve es especial ya que es el décimo que llevamos a cabo en 2016 nos decidimos a realizar webinars pensando en complementar la formación de nuestros estudiantes con contenidos complementarios o colaboraciones externas y después de estas 10 ediciones nos hemos dado cuenta que las propuestas no solo eran de interés para ellos sino también para el público en general o que está conectado con las geotic por lo que si queréis recuperar los anteriores webinars lo podéis hacer A través de nuestro canal de vídeo para llevar a cabo este décimo webinar pues Contamos con un compañero Tony Hernández ambientólogo informático de formación Toni es desarrollador de aplicaciones webmap en el sicte y también es tutor del módulo de bases de datos espaciales en el máster bajo el título de cálculo de rutas óptimas con precio routing en este webinar Tony nos va a dar una visión amplia del proceso necesario para diseñar una aplicación web para el cálculo de rutas óptimas enseguida daré paso a Tony Pero antes quisiera comentar que su exposición tendrá una duración aproximada de unos 30 minutos y que os recuerdo que si queréis ya a lo largo de toda la sesión podéis dejar vuestras preguntas por escrito en el chat eso sí no será hasta finalizar la charla que las comentaremos para que tome las pueda responder finalmente os recuerdo que el webinar se está grabando y que lo podréis tener disponible para consultar Poco después de finalizarlo ahora sí os dejo con Tony su presentación cuando quieras Tony Hola Gracias Rosa bienvenidos al webinar se me oye bien no pero bien muy bien Bueno pues aquí lo que veis ahora en pantalla es un poco el guión que vamos a seguir a lo largo del webinar el objetivo es el objetivo final es hacer lógicamente consultas de tipo routing para que nos retornen la ruta óptima entre dos puntos pero antes de poder llegar a ese escenario tenemos que preparar a la cartografía para que permita hacer rutina por lo tanto en este webinar pues bueno lo he planteado Pues un poco para tener la visión de todo el proceso empezaremos obteniendo una cartografía de Open streetmap como no Y para ello utilizaremos pues una herramienta un Api llamado ver pass happy cuando tengamos esa cartografía todavía no estaremos en condiciones de hacer operaciones de routing Antes tenemos que llevar a cabo una transformación con esa cartografía y le tenemos que dar un formato especial que es un formato de grafo explicaré brevemente lo que es un grafo y para esa transformación que tendremos que hacer en la para obtener la cartografía en formatografo utilizaremos otra herramienta en este caso será osm tipo quiero decir que todo lo que vamos a utilizar utilizar a lo largo del webinar son herramientas de libre de distribución de acuerdo y finalmente una vez cuando tengamos en la cartografía preparada la importaremos a una base de datos y luego Y así estaremos en condiciones de llevar a cabo esas consultas para obtener la ruta óptima una pregunta Rosa tengo que activar la cámara no sé si lo he hecho no lo he hecho no lo has hecho si la activas pues te vemos en pequeño pero te podemos ver O sea que es mejor Muy bien pues perfecto muy bien vale Ahora sí como decía obtendremos una cartografía la prepararemos para poder llevar a cabo operaciones de rute y luego la importaremos a una base de datos una base de datos con capacidad postres y que es una extensión de posis que nos permite llevar a cabo operaciones de routing y luego comentaremos las limitaciones básicamente Hay una limitación que es que bueno responderemos a esa pregunta que luego más adelante entenderéis a qué me refiero esa pregunta de solo de nodo a nodo vale veremos Por qué se produce eso y cómo solucionarlo Muy bien pues entrando ya en materia vamos a ver cómo obtener una cartografía de Open streetmap como os decía Al principio para esta descarga de la cartografía vamos a utilizar lápiz y la ventaja de escape respecto de otras formas de Descargar información de Open Street porque no sé si lo sabéis Pero podemos Descargar información de Open Stream a partir de webs de terceros Como por ejemplo yo fabrik pero son descargas Pues que por lo general requieren son descargas de grandes extensiones no si no recuerdo más es por países o no sé si incluso por continentes con lo cual nos puede venir bien una superficie tan grande pero lo normal para algunos proyectos es requerir una cartografía menos extensa y en el lado opuesto también se pueden descargar datos de Open stemap desde la web de Open steam pero solo hasta un límite de 50. 000 nodos de 50. 000 nodos puede parecer mucho pero teniendo en cuenta que el nodo es cada vértice utilizado en la digitalización pues 50 nodos puede ser menos que la superficie que ocupe un barrio en una gran ciudad de acuerdo en cambio está aquí o que pasa sapie lo que permite es a través de una URL como esta que podéis ver aquí en pantalla a partir de esta url podemos descargar los datos de nuestra zona de interés y no solo los datos de la zona de interés sino aquellos datos que cumplan Los criterios que nosotros queremos de acuerdo en este caso esta URL lo que está solicitando es toda la información toda la lata de tipo nodo es decir todos los vértices que se encuentran entre estas dos coordenadas y además y aquí está la clave este carácter de aquí este menor que lo que hace es solicitar no solo los nodos sino todas aquellas entidades cartográficas que utilizan algunos de esos nodos de acuerdo como el nodo es la mínima unidad de digitalización si estamos solicitando los nodos y todos aquellos elementos que utilizan los nodos en realidad lo que estamos haciendo es descargándonos toda la información dentro de esas coordenadas que para nuestro caso se avanzo que es vamos a descargar esta URL esta URL sirve para descargar toda la cartografía de menorca de acuerdo si queréis saber más sobre o ver más rápido pues aquí tenéis el enlace muy bien copiando esta dirección esta URL en el navegador pues automáticamente se iniciará la descarga de un fichero con la cartografía de menorca esta cartografía vendrá por defecto bueno por defecto no vendrá en formato o sm que es un formato de texto plano con lo cual Pues bueno toda la cartografía de menorca suelen creo que son unos 207 208 gigas megas Perdón megas de acuerdo Yo no lo voy a descargar porque no que ya tengo la información descargada en mi máquina pero ya os digo copiando esa dirección en el navegador os descargaréis en pocos segundos la cartografía de menorca vale lo siguiente y aquí voy a abrir un paréntesis muy rápido es convertir esta cartografía que nos hemos descargado en formato usm que como os digo es un formato de texto plano pues lo vamos a convertir a un formato binario y para ello vamos a utilizar otra herramienta en este caso es osmbert que como os podéis imaginar con el nombre que tiene pues sirve para convertir una cartografía de Opel estimado en distintos formatos y aquí bueno ejecutando esta orden desde un terminal de comandos y esto sí lo voy a hacer en directo para que veáis el tiempo de respuesta que tiene me voy a la carpeta de descargas aquí yo ya tengo la cartografía descargada anteriormente voy a abrir un terminal de comandos y aquí pues voy a ejecutar esa consulta que veis en la diapositiva anterior le doy al enter y en pocos segundos pues ahí ya tenemos el archivo como veis la compresión es bastante importante hemos pasado de 2005 205 megas a 7,8 megas de acuerdo Muy bien pues aquí puedo cerrar el paréntesis y seguimos Ya nos hemos descargado la cartografía la tenemos la tenemos en formato binario lo siguiente es darle a esa cartografía una estructura de grafo para poder como os decía al principio llevar a cabo consultas de rutina os comentaba al principio que teníamos que estructurar la cartografía en formato de grafo y que deberíamos lo que es un grafo Bueno lo que veis ahora en pantalla es una representación gráfica de un grafo como podéis ver pues sirve para medir la conectividad de una red una red puede ser un callejero puede ser una red eléctrica una red de tuberías un circuito eléctrico cualquier tipo de red y como veis consta de nodos que son esos Círculos que son los puntos de conexión y de arcos serían los ejes de las calles si estuviéramos hablando de un grafo de callejero de acuerdo cada arco tiene un coste ese coste pues puede ser a una longitud una unidad de tiempo a una unidad acústica podrían ser decibelios pueden ser unidades si de algún modo logramos medir Las barreras arquitectónicas podría ser un coste asociado a barreras arquitectónicas y siempre cuando vayamos a obtener una ruta óptima estaremos calculando la ruta óptima es decir la ruta de menor coste si ese coste son unidades métricas estaremos obteniendo la ruta más corta si es una unidad de tiempo estaremos obteniendo la ruta más larga si son unidades de Barreras arquitectónicas estaremos obteniendo la ruta con menor con menor con menor cantidad de Barreras arquitectónicas como si estamos ante una ruta que presenta desnivel podríamos obtener la ruta con el menor desnivel acumulado de acuerdo O sea que el concepto de ruta óptima lo debemos interpretar siempre asociado a un coste si son metros será ruta corta si son unidades de tiempo será será ruta rápida etcétera y una cosa más antes de pasar esta diapositiva Ahí os lo he puesto en verde esa flecha verde hay dos tipos en realidad hay más tipos de grafo desde el punto de vista matemático Pero para lo que nos interesa a nosotros vamos a distinguir únicamente entre dos tipos de grafos los grafos dirigidos y los grafos no dirigidos los grafos dirigidos y ellos lo he puesto en verde son los que el coste entre movernos de un nodo a otro depende del sentido no es lo mismo ir del nodo 45 al nodo 47 que a la inversa es decir que ir del nodo 47 a 45 esto por ejemplo os podéis imaginar si el coste lo tenemos asociado a un desnivel No será lo mismo subir que bajar será mucho más rápido bajar en principio que subir de acuerdo por lo tanto vamos a tener presente que existen estos dos tipos de grafos los dirigidos y los no dirigidos de acuerdo para calcular rutas a pie pues Normalmente se utilizan arcos no dirigidos tanto podemos ir en una dirección como en otra si nos desplazamos en vehículo Pues quizá no sea lo mismo pasar por una calle o una calle puede ser de dirección única en ese caso pues el coste en la dirección prohibida sería un costo infinito de ese modo Se evitaría a toda Costa pasar en esa dirección prohibida de acuerdo vale pues como os decía esto es la representación gráfica de un grafo aquí lo que he hecho ha sido sobreponer el grafo anterior Aunque callejero para que veáis como Los nodos representan esos puntos de conexión entre calles y los arcos pues como decía antes son las calles en sí mismas a la izquierda tenéis la representación gráfica igual a la diapositiva anterior y luego allí en la esquina superior os he marcado una parte del grafo con un rectángulo rojo y a la derecha podéis ver una representación del grafo en formato tabular de acuerdo es lo mismo Sencillamente en forma de tabla que como os podéis imaginar es este formato tabular el que vamos a utilizar para importar el grafo a la base de datos de acuerdo Muy bien pues para convertir la cartografía en un grafo vamos a utilizar esta herramienta o ese me tocó que sirve básicamente para dos con dos tiene dos finalidades por un lado permite generar con mucha facilidad un servicio de rutina y luego os Lo pondré en directo para que lo veáis a partir de una cartografía en formato de PDF que ya la tenemos y ya hemos convertido menorca a ese formato y como os decía permite a poner en marcha un servicio de routing en entorno web Pero además también permite crear un grafo compatible con una base de datos postres de acuerdo esta herramienta tiene un archivo de configuración que es osmpuero.
com este es un fichero el texto plano y lo podemos modificar para darle a esta herramienta un comportamiento distinto del que tiene por defecto de acuerdo vamos a hacer un par de cambios o dos grupos de cambios en primer lugar vamos a modificar este archivo porque inicialmente o sm tupo está optimizado para los desplazados para calcular rutas rápidas pensadas en vehículo motorizado de acuerdo por lo tanto al crear el grafo si no modificamos este archivo vamos a crear un grafo solo con las calles que permiten el paso de vehículos con lo cual tendremos un grafo más reducido nos incluirán las calles peatonales a las calles con escaleras tampoco se incluirán los carriles bici únicamente por defecto se incluyen los los arcos hablando en el lenguaje de grafo que permiten el paso de vehículos de acuerdo Pues bien para los cambios que vamos a hacer en este fichero es vamos a las líneas que veis en pantalla ya se encuentran en ese archivo de configuración pero están comentadas lo único que hay que hacer es descomentarlas de acuerdo estas líneas van con una almohadilla al inicio de la línea lo único que hay que hacer es eliminar esa almohadilla automáticamente las líneas quedan desconectadas y para que veáis la diferencia que hay al desconectar estas líneas ahí en la parte derecha de la diapositiva os he puesto un par de imágenes en azul lo que serían los arcos por defecto de acuerdo es un grafo mucho más sencillo que por ahí son los arcos por los que puede pasar un coche y debajo todos los arcos de acuerdo tanto los peatonales como los que tienen permiten el acceso a bicicletas como lo desde vehículos como veis la diferencia entre grapas pues es es importante hay que tenerla en cuenta muy bien y el segundo grupo de cambios que vamos a hacer Pues igual que antes es desconectar estas líneas en este caso al desconectar estas líneas lo que hacemos Es decirle asm tipo que nos cree el grafo compatible con osis si no les comentamos estas líneas pues Sencillamente no no vamos a poder disponer de ese grafo de acuerdo muy bien Y esta es la orden voy a ejecutarla en un momento la voy a ejecutar No pero esta es la orden que nos permitirá a partir del archivo menorca punto PDF crear el grafo compatible con postres decir que hay otras herramientas Además de que permiten crear grafos incluso podemos utilizar las funciones de postres pero ninguna de las otras herramientas o también existe otra herramienta que casi se me olvida o sm tuvo pgsql Pero estas otras herramientas la verdad es que no funcionan también y además la ventaja de osm topo es que está desarrollada en Java con lo cual es multiplataforma está disponible pues para cualquier sistema operativo lo único necesario es disponer de un intérprete de Java de acuerdo Bueno pues luego luego ejecutaré esta orden para que veáis también el tiempo de respuesta que tiene pero ya os avanzo que la orden anterior genera como os decía dos resultados por un lado pone en marcha un servicio web nos crea ya un entorno una página web con la cartografía que nos hemos descargado preparada ya para hacer el cálculo de rutas óptimas Y en segundo lugar nos Crea una carpeta esa carpeta usm con todos los archivos al que veis ahí y en especial el que nos interesa a nosotros pues es el que os he marcado ahí en rojo que es un archivo con extensiones sql que luego vamos a poder importar a nuestra base de datos de acuerdo muy bien pues voy a ejecutar El Comando anterior aquí en un terminal de comandos en este caso voy a acceder a la carpeta donde tengo descargado la herramienta osm tipo aprovecho para decir que hoy se me topó es un archivo que se puede esta herramienta se descarga directamente de la web y no hace falta instalar nada de acuerdo bien pues accedo a carpeta ejecuto El Comando ahí se está generando el buffer y en apenas unos segundos tendremos ya el cráter creado y el servicio web en marcha vale ya ha finalizado y aquí no sé si lo apreciáis bien pues nos indica la dirección en la que está iniciado el servicio voy a copiar esa dirección la voy a poner en mi servidor ya tenemos a un servicio web en marcha de acuerdo aquí aparecen un par de círculos que son el origen y el destino le damos a calcular ruta y ahí tenemos ya un servicio rutina en marcha ahora que estamos viendo esto voy a aprovechar para mostraros o para introducirlos en esa limitación que os comentaba al principio voy a soltar por ejemplo este punto rojo aquí y no sé si habéis percibido Cómo se ha desplazado automáticamente de acuerdo si os fijáis y con el destino pues pasaría Exactamente lo mismo en este caso no se ha notado mucho Aquí sí veis claro qué está pasando aquí pues que estamos soltando esos puntos el inicio y el final de nuestra ruta nos estamos soltando en un espacio en el que no hay ningún nodo cercano con lo cual se está haciendo una operación de Snap y esos puntos están asignando al nodo más cercano de acuerdo porque este cálculo de rutas óptimas funciona de nodo a nodo de acuerdo si no hay un nodo en esa zona Pues esta aplicación ya está pensada para que se ajuste al nodo más cercano de acuerdo muy bien esto por un lado es uno de los resultados que obtenemos con esta herramienta el otro resultado vamos a verlo ahora aquí se ha creado esta carpeta usn y dentro de la carpeta Pues todos estos archivos en concreto el que nos interesa es este de acuerdo y ahora voy a importar este archivo Bueno a ver si me estoy olvidando algo voy a importar el archivo a una base de datos Aquí he creado una base de datos me he dado nombre de rutina y voy a abrir el archivo que os acabo de mostrar este es bueno le doy lo cargo En hearning que es una inteligencia gráfica para gestionar bases de datos postres con postres y como veis este archivo es un archivo de texto que contiene un conjunto de instrucciones en sql Aquí vemos por ejemplo primero si existe la tabla la elimina luego Aquí hay una sentencia create Table que lo que hace es crear una tabla a continuación se añade una columna de tipo geométrico y aquí pues hay una serie de sentencias sin ser que van insertando pues esos elementos a nuestro brazo de acuerdo tanto los nodos como los arcos con su coste asociado de acuerdo vale pues aquí tenemos a ejecutar y automáticamente se crea la tabla que veis aquí con el brazo ya importado nuestra base de datos muy bien Qué es lo siguiente Bueno pues ahora por fin después de este proceso en el que hemos descargado la cartografía la hemos convertido en formato binario para luego convertirla grafo y finalmente y cortarla a la base de datos Pues ahora ya podemos ejecutar una consulta sql para que nos retorne la ruta óptima de menor coste entre dos modos de acuerdo Y esta es la Bueno mejor Bueno voy a ejecutar una consulta como esta en la base de datos Pero esto aquí eso es la estructura esto aquí el nodo no Esa es la estructura de la consulta de acuerdo Yo voy a abrir un archivo en el que ya tengo algunas consultas preparadas para agilizar un poco el tema Aquí tengo una caja de ejemplos vale muy bien aquí tengo varias consultas vale Esta es equivalente a la que veáis en la diapositiva lo único que perdón y esto así vale bueno me he saltado algo creo que aquí vuelvo aquí de acuerdo antes de llevar a cabo esta consulta os voy a explicar un poco la estructura de la consulta de acuerdo a como podéis ver es una consulta de tipos Select y que utiliza una función una función psdr diestra esta función utiliza algoritmo de extra creado por matemático del mismo nombre si no recuerdo mal y en este enlace que veis en pantalla podéis acceder a la descripción de este algoritmo de acuerdo por si queréis desarrollar vuestra propia implementación porque no O por si queréis saber cómo funciona de acuerdo vale pues esta consulta como digo utiliza esta función Ya esta función le pasamos tres parámetros uno dos bueno cuatro tres y cuatro el primero este de aquí es una consulta que lo que hace es obtener el grafo es decir el primer parámetro indica el grafo el grafo que se debe utilizar para calcular la ruta óptima de acuerdo y ese grajo se define por un identificador para para cada arco de un nodo origen un nodo final y un coste de acuerdo primer parámetro Define el gráfico el segundo parámetro el nodo de origen el tercer parámetro el nodo de destino y el cuarto parámetro indica si el grafo es dirigido o no en este caso Fast indica que no es un grafo dirigido por lo tanto solo se debe utilizar una columna de coste porque es lo mismo ir de ave que debe a si el grafo fuera dirigido pues este parámetro false sería tú y aquí Además del coste deberíamos indicar otra columna con el coste en la dirección contraria de acuerdo vale Vale pues Ahora sí que he comentado Así que quizás demasiado rápido la estructura de la consulta vamos a ejecutar esas consultas en la base de datos donde tenemos el brazo que hemos importado anteriormente Muy bien pues aquí es la misma estructura fijaros que aquí lo que hago es obtener ese grafo puedo ejecutar únicamente esta parte de la consulta y aquí vemos pues el grafo en formato tabular Este es el grafo que se va a utilizar muy bien desde el nodot 2000 y pico son nodos que yo antes Me he preparado para que se vea la diferencia entre una ruta corta o una ruta rápida puedo ejecutar selecciona la consulta al ejecuto y esto retorna igual que antes veíamos un grafo en forma tabular aquí lo que obtenemos es una ruta óptima en formato tabular nos dice el orden de la secuencia primero pasamos del nodo empezamos en el nodo 2000 05 por ejemplo pasamos por el arco identificado ahí con un coste tal el siguiente paso paso número 2 del siguiente nodo pasando por este arco y con este coste y aquí se van sumando los costes acumulados de acuerdo aquí aparecen costes muy bajos porque este es el coste que genera la herramienta osm tu post son unidades de tiempo de acuerdo es el tiempo previsto en recorrer ese arco por lo tanto como son unidades de tiempo como os decía antes lo que obtendremos son rutas rápidas de acuerdo vale vale muy bien sabemos que esto es una ruta rápida pero no la podemos Representar en un mapa porque aquí no tenemos ninguna geometría Si queremos representar la ruta en un mapa tenemos que modificar ligeramente la consulta anterior para hacer un join con la tabla grafo esa tabla si contiene una geometría vale la ruta Perdón la consulta que tenéis ahora en pantalla seleccionada es la misma que antes pero haciendo ese Joy aquí al hacer el join se suman más columnas y una de esas columnas es la que contiene la geometría dándole ahí yo puedo ver cuál es la ruta óptima entre esos dos nodos tenemos aquí la isla de menorca y en concreto pues al ir del nodo 2. 2005 al 8.