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.
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