<br><br><div class="gmail_quote">El 26 de febrero de 2009 17:02, Ivan Garcia <span dir="ltr"><<a href="mailto:capiscuas@gmail.com">capiscuas@gmail.com</a>></span> escribió:<br><blockquote class="gmail_quote" style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;">
Hola José, <br><br>para compilar el osm2pgrouting sin problemas prueba esto<br><br>
modifica en src/stdafx.h:<br>de<br>
"#include <string>"<br>a<br>
"#include <string.h><br><br>y dale al make<br></blockquote><div><br>Muchas gracias por la información. He realizado el cambio y ha compilado a la primera. Ahora sólo me queda probarlo. <br></div><blockquote class="gmail_quote" style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;">
<br>Saludos, ya nos dirás como te ha ido. A mí de momento me funciona genial, he probado con el OSM de Valencia y me lo carga en la base de datos de Pgrouting (postgis) y entonces uso la función <br>
<br><span style="font-size: 10pt; font-family: "Courier New";">SELECT assign_vertex_id('edges', 0.0001, 'the_geom',
'gid'); </span>para crear los vértices de las intersecciones de las vías.</blockquote><div><br>Me gusta mucho como trabaja esta utilidad. Ahora las intersecciones si que son generadas perfectamente, sin tener que recurrir a herramientas externas (ej. OpenJump, GRASS, ArcInfo). El resultado es muy notable, y tiene en cuenta los pasos a distintos nivel,<br>
no computa elementos lineales no "rutables" (ríos, barrancos, ffcc,tram).<br>(ej:<a href="http://www.openstreetmap.org/?lat=38.37951&lon=-0.45314&zoom=16&layers=B000FTF"> http://www.openstreetmap.org/?lat=38.37951&lon=-0.45314&zoom=16&layers=B000FTF</a>)<br>
, asigna el coste en función de la dirección, lo mismo para el reverse_cost, genera los x1,y1,x2,y2 sólo. Vamos, que preparado para realizar cálculos de rutas optimas a la primera.<br><br>Sólo le veo una mini-pega, es que desaparece la columna del tipo de
vía, que es sustituida por class_id, que viene definida en el fichero
de configuración xml (mapconfig.xml).<br></div><blockquote class="gmail_quote" style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;"><br><br>Después ya puedo calcular mis rutas usando <br>
<br><span style="font-size: 10pt; font-family: Arial;"></span>
<p><span style="font-size: 10pt; font-family: Arial;"><span> </span></span><span style="font-size: 10pt; font-family: "Courier New";">DROP TABLE IF EXISTS dijsktra_result;</span></p>
<p style="text-indent: 0.5in;"><span style="font-size: 10pt; font-family: "Courier New";">CREATE TABLE dijsktra_result(gid int4) with oids;</span></p>
<p style="text-indent: 0.5in;"><span style="font-size: 10pt; font-family: "Courier New";">SELECT AddGeometryColumn('dijsktra_result',
'the_geom', '</span>4326<span style="font-size: 10pt; font-family: "Courier New";">', 'MULTILINESTRING', 2);</span></p>
<p style="text-indent: 0.5in;"><span style="font-size: 10pt; font-family: "Courier New";">INSERT INTO dijsktra_result(the_geom) </span></p>
<p><span style="font-size: 10pt; font-family: "Courier New";"><span> </span>SELECT the_geom FROM
dijkstra_sp('edges', 52, 35);</span></p>
<p><span style="font-size: 10pt; font-family: "Courier New";"> Donde 52 es el vértice de inicio y 35 es el vértice de llegada, son ejemplos.<br></span></p>Finalmente para visualizar esa ruta generado uso el uDIG para conectarme directamente a la BBDD y lo representa en colores muy chulo.</blockquote>
<div><br>Sí en uDig te parece chulo, te aseguro que con OpenJump, con la opción Capa -> Ejecutar consulta de almacén de datos -> tu query sql donde debes de formatear la columna geometria por st_aseWkb(<tu columna geométrica>) el resultado es sensacional. Reconozco que tengo debilidad por OpenJump, es muy didáctico.<br>
<br>En fin, que muchas gracias por la información. <br><br>Por último, he pensado realizar un mini-manual sobre este tema y colgarlo en la wiki de OSM para que todos tengamos un punto de partida. y mejorarlo y ampliarlo al gusto de todos. Cuando lo tenga lo comunicaré a la comunidad.<br>
Creo que ya sólo queda realizar salidas por internet con OpenLayer o MapServer. <br><br>Un saludo a todos.<br><br>J3M<br></div><blockquote class="gmail_quote" style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;">
<br>
<br>Saludos.<br>Iván.<br><br><div class="gmail_quote">2009/2/26 José Manuel Mira Martínez <span dir="ltr"><<a href="mailto:josema.mira@gmail.com" target="_blank">josema.mira@gmail.com</a>></span><div><div></div><div class="Wj3C7c">
<br><blockquote class="gmail_quote" style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;">
Hola a todos,<br><br><div class="gmail_quote">El 26 de febrero de 2009 0:16, Ivan Garcia <span dir="ltr"><<a href="mailto:capiscuas@gmail.com" target="_blank">capiscuas@gmail.com</a>></span> escribió:<div>
<br><blockquote class="gmail_quote" style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;">
Hola José, dices que has probado el programa osm2pgsql y tiene ciertas limitaciones,</blockquote></div><div><br>Matizo la frase. Tiene ciertas limitaciones para usar osm como tablas adecuadas para calcular rutas. Por lo demás es una estupenda herramienta para obtener de forma más o menos ordenada los datos de osm en la geodatabase Postgres-postgis.<br>
Para routing necesitas:<br>- nodos de inicio de linea y fin de línea en las intersecciones de calle<br>- tener bien definido el "oneway", al menos para obtener rutas que tengan en cuenta las direcciones, que es lo que hace el algoritmo shortest_path_shooting_star, que a su vez nos sirve para asignarle un coste inverso (reverse_cost) a las direcciones en un único sentido (y a las junction/roundabout)<br>
- opcionalmente una tabla de nodos un poco más explícita, con alias para nodos en cristiano, para que nos pueda llevar en vez del nodo 45 al 256, del Hotel xxxx (nodo 45) al restaurante XXXXXXXX (nodo 256), que es lo que hacemos con los navegadores de coche.<br>
- Por otra parte, y esto es algo que deberiamos pensar todos los 'osemeros' , pgrouting te permite asignar costes adicionales a las intersecciones, para indicar que no se tarda lo mismo, por ejemplo, continuar recto, que girar a la izquierda. Yo personalmente he pensado en utilizar los pocos semáforos de osm, pero tienen que estar ubicados en la intersección.¿creo?, pero no se como hacer para indicarle estos pesos de giro a izq. o dcha.<br>
- osm2pgsql genera una tabla de líneas, donde se encuentran las calles entre otras, pero también incluye los ríos y barrancos que los usuarios hemos puesto, y que yo sepa esto no interviene en un cálculo de rutas, a no ser que vayas en canoa.<br>
<br> <br></div><div><blockquote class="gmail_quote" style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;"><br><br>hace poco encontré el osm2pgrouting , pero no he tenido tiempo de probarlo, te sirve para aplicar las funciones de cálculo de rutas de pgrouting? <br>
</blockquote></div><div><br>Tienes razón, existe esta utilidad, pero he intentado compilarla en mi distro (Ubuntu 8.10) y no he podido. Me da muchos errores de compilación. Sin embargo, en la web de osm2pgrouting, los pasos para la compilación están ensayados en Ubuntu 8.04, por lo que no te puedo decir que hace o como.<br>
</div><div><blockquote class="gmail_quote" style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;"><br>Si es así, nos puedes ponder algunos pasitos de como hacerlo? </blockquote>
</div><div><br>
Ya te he respondido antes. No he podido compilar la utilidad. Pero te puedo decir lo que he hecho hasta ahora, que es bastante casero, pero al menos a mi me funciona en un 80 % para calcular rutas.<br><br>1. descargar zona de osm (por ej. con josm), o si nuestro proyecto es ambicioso todo el osm de España que existe en CloudMade o otras.<br>
2. aplicar osm2pgsql para generar la geodatabase. Nota: PostGIS debe de estas instalado previamente en la base de datos a utilizar<br>3. normalizar la tabla <nombre>_lines:<br><ul><li>añadir índices al osm_id, o mejor, renombrarlo a gid. Si no hacemos estos no podremos ver el resultado (mapa) en programas como Qgis que exigen un índice en la tabla geométrica.<br>
</li><li>opcionalmente:convertir oneway en un booleano, y poner true o yes a "true", y false o null a "false"<br></li><li>crear columnas: source, target, cost, reverse_cost, x1, y1, x2, y2</li></ul>4. En OpenJump cargo la tabla de PostGIS y creo el grafo: Herramientas -> Edición geométrica -> Convertir -> Crear grafo<br>
Creará 4 tablas, y me las llevo a PostGIS<br>5. En Postgres con todas esas tablas realizo los SQL necesarios (join, updates, create table, etc) para tenerlo todo en una sólo tabla.<br>6. Como me preocupa bastante el tema del coste por direcciones lo que hago es multiplicar por un valor (*1000) el valor del lenght de todas las filas cuyo valor oneway sea true, y lo mismo para las roundabout. En mi caso el length que utilizo es el de la UTM, pero, como ha dicho el compañero Martín Vales, me calentaré el coco para utilizarlo en geográficas (¡gracias Martín por la info¡)<br>
7. Luego sólo tengo que aplicar las SQL necesarias para el cálculo de coste. Os pongo unos ejemplos:<br>Dijkstra (sobre nodos):<br>SELECT * FROM shortest_path('SELECT gid as id, source, target, coste as cost FROM alicante',518, 3418, false, false); <br>
A* (sobre nodos):<br>SELECT * FROM shortest_path_astar('SELECT gid as id, source, target, reverse_cost AS reverse_cost, x1, y1, x2, y2 FROM alicante', 518, 3418, false, true);<br>Shooting star (sobre ejes):<br>SELECT * FROM shortest_path_shooting_star('SELECT gid as id, source, target, coste as cost, reverse_cost,x1,y1,x2,y2, null as rule, null as to_cost FROM alicante order by id',2571, 2634,true,true);<br>
<br>En las consultas utilizo muchos "WHERE" para evitar que el cálculo lo realice sobre river, trail, tram, etc.<br><br>Los resultados son satisfactorios siempre que no calcules rutas que necesiten cruzar autovías, autopistas por el problema ya comentado que el grafo incluye nodos en estos viales.<br>
<br>Sí alguien está interesado le puedo dar la tabla que he creado ("alicante") para realizar pruebas.<br><br>Quiero dejar claro que estas son mis experiencias, y que en ningún momento pretenden ser la "verdad" sobre el tema del cálculo de rutas en OSM. Ya me gustaría a mi saberlo todo. Aquí estamos para aprender.<br>
<br>Un saludo a todos<br><br>J3M<br><br><br></div><div><div></div><div><blockquote class="gmail_quote" style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;"><br><br>
Gracias.<br><br><div class="gmail_quote">
2009/2/25 José Manuel Mira Martínez <span dir="ltr"><<a href="mailto:josema.mira@gmail.com" target="_blank">josema.mira@gmail.com</a>></span><div><div></div><div><br>
<blockquote class="gmail_quote" style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;">Hola, pgrouting es una extensión para PostGIS que utiliza la librería libboost (que es la que realiza el cálculo de los grafos). Es una extensión que se renueva con cierta asiduidad, y lo más interesante es que propone formas de publicación de cartografía con el servidor de MapServer, o bien utilizando OpenLayer + MapServer, o OL+PHP.<br>
El llevar la cartografía de OSM a Postgres-PostGIS es bastante sencilla, puesto que existe una utilidad llamada osm2pgsql que crea cuatro tablas geográficas (nodos, polígonos, líneas y otra que no me acuerdo). <br>El problema es que estas tablas carecen de información de "ruteo", por lo que hay que utilizar herramientas externas, aunque la librería pgrouting tiene una función para crear el grafo, ésta no sirve para los datos de OSM, puesto que se necesita un nodo en cada intersección. Por ej. una calle cualquiera, que tenga 3 intersecciones, sólo tiene un nodo de inicio y otro final, cuando debe haber 2 tramos, cada uno con su par de nodo inicio-final.<br>
Además hay que corregir muchas cosas:<br>- normalizar "oneway"<br>- asignar costes: no sirve st_length(the_geom), puesto que calcula la longitud sobre la base de la SRID 4326 (geográfica), y a nosotros nos interesa en metros (23030 o 25830 por ejemplo). Yo utilizo la función anidada st_length(st_transform(the_geom, 23030)).<br>
<br>Últimamente he hecho unos cuantos pinitos creando el grafo con OpenJump, que tiene una herramienta excelente para generar intersecciones, crear nodos e indexarlos. Ahora bien, intersecta todo lo que encuentra, y eso a nosotros no nos interesa, por que por ejemplo no debe de generar un nodo en una ctra. que va por encima de una autopista, a distintos niveles.<br>
<br>En fin, este tema me apasiona, por lo que cualquier comentario será agradecido.<br><br>Un saludo a todos<br><br>j3m<br><br><div class="gmail_quote">2009/2/25 Martín Vales <span dir="ltr"><<a href="mailto:martin@opengeomap.org" target="_blank">martin@opengeomap.org</a>></span><div>
<div></div><div><br>
<blockquote class="gmail_quote" style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;">hi!<br>
<br>
¿Alguien ha probado esta extension de postgis para calcular rutas con<br>
datos masivos?<br>
<a href="http://pgrouting.postlbs.org/" target="_blank">http://pgrouting.postlbs.org/</a><br>
En las demos que ponen parece que va bien pero es muy poca cartografía.<br>
<br>
Internamente usa el famoso codigo fuente de los carteros que se comento<br>
por aqui por lo que he podido ver en lso fuentes.<br>
<br>
<br>
Un saludo.<br>
<br>
<br>
<br>
<br>
_______________________________________________<br>
Talk-es mailing list<br>
<a href="mailto:Talk-es@openstreetmap.org" target="_blank">Talk-es@openstreetmap.org</a><br>
<a href="http://lists.openstreetmap.org/listinfo/talk-es" target="_blank">http://lists.openstreetmap.org/listinfo/talk-es</a><br>
</blockquote></div></div></div><br>
<br>_______________________________________________<br>
Talk-es mailing list<br>
<a href="mailto:Talk-es@openstreetmap.org" target="_blank">Talk-es@openstreetmap.org</a><br>
<a href="http://lists.openstreetmap.org/listinfo/talk-es" target="_blank">http://lists.openstreetmap.org/listinfo/talk-es</a><br>
<br></blockquote></div></div></div><br>
<br>_______________________________________________<br>
Talk-es mailing list<br>
<a href="mailto:Talk-es@openstreetmap.org" target="_blank">Talk-es@openstreetmap.org</a><br>
<a href="http://lists.openstreetmap.org/listinfo/talk-es" target="_blank">http://lists.openstreetmap.org/listinfo/talk-es</a><br>
<br></blockquote></div></div></div><br>
<br>_______________________________________________<br>
Talk-es mailing list<br>
<a href="mailto:Talk-es@openstreetmap.org" target="_blank">Talk-es@openstreetmap.org</a><br>
<a href="http://lists.openstreetmap.org/listinfo/talk-es" target="_blank">http://lists.openstreetmap.org/listinfo/talk-es</a><br>
<br></blockquote></div></div></div><br>
<br>_______________________________________________<br>
Talk-es mailing list<br>
<a href="mailto:Talk-es@openstreetmap.org">Talk-es@openstreetmap.org</a><br>
<a href="http://lists.openstreetmap.org/listinfo/talk-es" target="_blank">http://lists.openstreetmap.org/listinfo/talk-es</a><br>
<br></blockquote></div><br>