6 votos

¿Cómo funciona assign_vertex_id() en pgRouting?

Estoy intentando seguir este tutorial,

http://www.pgrouting.org/docs/foss4g2008/ch06.html

pero en el paso con assign_vertex_id() muestra un error para ejecutar la consulta SQL:

Error SQL:

ERROR:  column "’ways’" does not exist
LINE 1: SELECT assign_vertex_id(’ways’, 0.00001, ’the_geom’, ’gid’);
                            ^
In statement:
SELECT assign_vertex_id(’ways’, 0.00001, ’the_geom’, ’gid’);

No he encontrado documentación ni foros sobre cómo debería funcionar assign_vertex_id().

Lo único que sé es que el primer parámetro debe ser un nombre_tabla y no un nombre de columna.

14voto

axk Puntos 2147

Recuerde que assign_vertex_id es sólo un procedimiento PLPGSQL para que puedas leer el código fácilmente y si realmente lo necesitas, puedes crear tu propia versión de assign_vertex_id y hacer "printf debugging" a través de "RAISE NOTICE".

Qué assign_vertex_id hace, dada una tabla de geometrías, es rellenar el source y target de esta tabla de forma que las geometrías conectadas compartan los identificadores de vértice.

A diagram of 4 simple geometries

Considerando las geometrías descritas en el diagrama, es decir:

Name        | Geometry                             | Source     | Target
-------------------------------------------------------------------------
A           | LINESTRING((1,3),(2,3))              |            |
B           | LINESTRING((2,3),(3,3))              |            |
C           | LINESTRING((2,3),(2,2),(4,2),(4,4))  |            |
D           | LINESTRING((1,3),(1,1),(3,1),(3,3))  |            |

assign_vertex_id calculará, para cada nodo inicial y final de A-D, los vértices y rellenará las referencias de origen y destino.

Obsérvese que aunque (1,1) es un PUNTO en la geometría LINESTRING de D no se puede utilizar para el enrutamiento porque no es un nodo terminal.

Esto significa que este diagrama presenta 4 nodos (a saber, (1,3), (2,3), (3,3) y (4,4)). assign_vertex_id numera los vértices basándose en una secuencia, por lo que se numerarán del 1 al 4.

Al asignar nodos origen y destino para las aristas A-D, assign_vertex_id tomará los nodos inicial y final de uno en uno, es decir

  • Para el borde A El nodo inicial es (1,3) que no esté ya en la tabla de vértices. Le asignamos el id de vértice 1 y lo añadimos a la tabla de vértices.
  • Para el borde A El nodo final es (2,3) que no esté ya en la tabla de vértices. Añádelo con el id de vértice 2.
  • Para el borde B El nodo de inicio es (2,3) ya en la tabla de vértices. Por lo tanto, el valor de origen de la arista B es 2 (es decir, el objetivo de A está conectado al origen de B).

Si continúas con el algoritmo anterior, obtendrás:

tabla de vértices ( vértices_tmp ):

Id       | Geometry
--------------------------------
1        | POINT(1,3)
2        | POINT(2,3)
3        | POINT(3,3)
4        | POINT(4,4)

tabla de bordes:

Name        | Geometry                             | Source     | Target
-------------------------------------------------------------------------
A           | LINESTRING((1,3),(2,3))              |    1       |    2
B           | LINESTRING((2,3),(3,3))              |    2       |    3
C           | LINESTRING((2,3),(2,2),(4,2),(4,4))  |    2       |    4
D           | LINESTRING((1,3),(1,1),(3,1),(3,3))  |    1       |    3

5voto

tobes Puntos 19
ERROR:  column "’ways’" does not exist

te dice que no hay ninguna columna llamada 'maneras'. Eso es porque se llama maneras (sin ').

Su pregunta debería ser:

SELECT assign_vertex_id("ways", 0.00001, "the_geom", "gid");

" no es igual a ' en PostGIS.

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X