Supported versions:
pgr_extractVertices – Experimental¶
pgr_extractVertices
— Extrae la información de vértices en función del origen y el destino.
Advertencia
Posible bloqueo del servidor
Estas funciones pueden crear un bloqueo del servidor
Advertencia
Funciones experimentales
No son oficialmente de la versión actual.
Es probable que oficialmente no formen parte de la siguiente versión:
Las funciones no podrían hacer uso de ANY-INTEGER ni ANY-NUMERICAL
El nombre puede cambiar.
La firma (declaración de funciones) podría cambiar.
La funcionalidad puede cambiar.
Las pruebas de pgTap pueden estar ausentes.
Posiblemente necesite codificación c/c++.
Puede haber carencia de documentación.
Hay documentación que, en dado caso, podría ser necesario reescribir.
Ejemplos de documentación que puede ser necesario generar automáticamente.
Puede ser necesaria más retroalimentación por parte de la comunidad.
Puede depender de una función propuesta de pgRouting.
Podría depender de una función obsoleta de pgRouting
Disponibilidad
Versión 3.0.0
Nueva función experimental
Descripción¶
Esta es una función auxiliar para extraer la información de vértices del conjunto de aristas de un grafo.
Cuando se proporciona el identificador de arista, también se calcularán las aristas de entrada y salida
Firmas¶
pgr_extractVertices(Edges SQL [, dryrun])
RETURNS SETOF (id, in_edges, out_edges, x, y, geom)
- Ejemplo
Extraer la información del vértice
SELECT * FROM pgr_extractVertices(
'SELECT id, the_geom AS geom
FROM edge_table');
id | in_edges | out_edges | x | y | geom
----+----------+-----------+----------------+-----+--------------------------------------------
1 | | {6} | 0 | 2 | 010100000000000000000000000000000000000040
2 | | {17} | 0.5 | 3.5 | 0101000000000000000000E03F0000000000000C40
3 | {6} | {7} | 1 | 2 | 0101000000000000000000F03F0000000000000040
4 | {17} | | 1.999999999999 | 3.5 | 010100000068EEFFFFFFFFFF3F0000000000000C40
5 | | {1} | 2 | 0 | 010100000000000000000000400000000000000000
6 | {1} | {2,4} | 2 | 1 | 01010000000000000000000040000000000000F03F
7 | {4,7} | {8,10} | 2 | 2 | 010100000000000000000000400000000000000040
8 | {10} | {12,14} | 2 | 3 | 010100000000000000000000400000000000000840
9 | {14} | | 2 | 4 | 010100000000000000000000400000000000001040
10 | {2} | {3,5} | 3 | 1 | 01010000000000000000000840000000000000F03F
11 | {5,8} | {9,11} | 3 | 2 | 010100000000000000000008400000000000000040
12 | {11,12} | {13} | 3 | 3 | 010100000000000000000008400000000000000840
13 | | {18} | 3.5 | 2.3 | 01010000000000000000000C406666666666660240
14 | {18} | | 3.5 | 4 | 01010000000000000000000C400000000000001040
15 | {3} | {16} | 4 | 1 | 01010000000000000000001040000000000000F03F
16 | {9,16} | {15} | 4 | 2 | 010100000000000000000010400000000000000040
17 | {13,15} | | 4 | 3 | 010100000000000000000010400000000000000840
(17 rows)
Parámetros¶
Parámetro |
Tipo |
Descripción |
---|---|---|
Edges SQL |
|
El conjunto de aristas del grafo. Es una Inner Query (Consulta interna) como se describe a continuación. |
dryrun |
|
No procese y reciba un AVISO de la consulta resultante. |
Consulta interna¶
Cuando se conoce la geometría de línea
Columna |
Tipo |
Descripción |
---|---|---|
id |
|
(Opcional) identificador de la arista. |
geom |
|
Geometría LINESTRING de la arista. |
Esta consulta interna tiene prioridad sobre las dos consultas internas siguientes, por lo que se omiten otras columnas cuando aparece la columna “”geom””.
Columnas ignoradas:
startpoint
endpoint
source
target
Cuando se conoce la geometría de vértices
Para utilizar esta consulta interna, la columna geom
no debe formar parte del conjunto de columnas.
Columna |
Tipo |
Descripción |
---|---|---|
id |
|
(Opcional) identificador de la arista. |
startpoint |
|
Geometría POINT del vértice inicial. |
endpoint |
|
Geometría POINT del vértice final. |
Esta consulta interna tiene prioridad sobre la siguiente consulta interna, por lo que se omiten otras columnas cuando aparecen las columnas startpoint
y endpoint
.
Columnas ignoradas:
source
target
Cuando se conocen identificadores de vértices
Para utilizar esta consulta interna, las columnas geom
, startpoint
y endpoint
no deben formar parte del conjunto de columnas.
Columna |
Tipo |
Descripción |
---|---|---|
id |
|
(Opcional) identificador de la arista. |
origen |
|
Identificador del primer punto final en el vértice de la arista. |
objetivo |
|
Identificador del segundo punto final en el vértice de la arista. |
Columnas de Resultados¶
Devuelve un conjunto de (id, in_edges, out_edges, x, y, geom)
Columna |
Tipo |
Descripción |
---|---|---|
id |
|
Identificador del primer punto final en el vértice de la arista. |
in_edges |
|
|
out_edges |
|
|
x |
|
|
y |
|
|
geom |
|
|
Ejemplos Adicionales¶
- Ejemplo 1
Ejecución de Dryrun
Para obtener la consulta generada que se usa para obtener la información de vértices, utilice dryrun := true
.
Los resultados se pueden usar como código base para realizar un refinamiento basado en las necesidades de desarrollo de back-end.
SELECT * FROM pgr_extractVertices(
'SELECT id, the_geom AS geom FROM edge_table',
dryrun := true);
NOTICE:
WITH
main_sql AS (
SELECT id, the_geom AS geom FROM edge_table
),
the_out AS (
SELECT id::BIGINT AS out_edge, ST_StartPoint(geom) AS geom
FROM main_sql
),
agg_out AS (
SELECT array_agg(out_edge ORDER BY out_edge) AS out_edges, ST_x(geom) AS x, ST_Y(geom) AS y, geom
FROM the_out
GROUP BY geom
),
the_in AS (
SELECT id::BIGINT AS in_edge, ST_EndPoint(geom) AS geom
FROM main_sql
),
agg_in AS (
SELECT array_agg(in_edge ORDER BY in_edge) AS in_edges, ST_x(geom) AS x, ST_Y(geom) AS y, geom
FROM the_in
GROUP BY geom
),
the_points AS (
SELECT in_edges, out_edges, coalesce(agg_out.geom, agg_in.geom) AS geom
FROM agg_out
FULL OUTER JOIN agg_in USING (x, y)
)
SELECT row_number() over(ORDER BY ST_X(geom), ST_Y(geom)) AS id, in_edges, out_edges, ST_X(geom), ST_Y(geom), geom
FROM the_points;
id | in_edges | out_edges | x | y | geom
----+----------+-----------+---+---+------
(0 rows)
- Ejemplo 2
Creación de una topología de ruteo
Asegurarse de que la base de datos no tiene el
vertices_table
DROP TABLE IF EXISTS vertices_table; NOTICE: table "vertices_table" does not exist, skipping DROP TABLE
Limpieza de las columnas de la topología de ruteo que se creará
UPDATE edge_table SET source = NULL, target = NULL, x1 = NULL, y1 = NULL, x2 = NULL, y2 = NULL; UPDATE 18
Creación de la tabla de vértices
SELECT * INTO vertices_table FROM pgr_extractVertices('SELECT id, the_geom AS geom FROM edge_table'); SELECT 17
Inspección de la tabla de vértices
SELECT * FROM vertices_table; id | in_edges | out_edges | x | y | geom ----+----------+-----------+----------------+-----+-------------------------------------------- 1 | | {6} | 0 | 2 | 010100000000000000000000000000000000000040 2 | | {17} | 0.5 | 3.5 | 0101000000000000000000E03F0000000000000C40 3 | {6} | {7} | 1 | 2 | 0101000000000000000000F03F0000000000000040 4 | {17} | | 1.999999999999 | 3.5 | 010100000068EEFFFFFFFFFF3F0000000000000C40 5 | | {1} | 2 | 0 | 010100000000000000000000400000000000000000 6 | {1} | {2,4} | 2 | 1 | 01010000000000000000000040000000000000F03F 7 | {4,7} | {8,10} | 2 | 2 | 010100000000000000000000400000000000000040 8 | {10} | {12,14} | 2 | 3 | 010100000000000000000000400000000000000840 9 | {14} | | 2 | 4 | 010100000000000000000000400000000000001040 10 | {2} | {3,5} | 3 | 1 | 01010000000000000000000840000000000000F03F 11 | {5,8} | {9,11} | 3 | 2 | 010100000000000000000008400000000000000040 12 | {11,12} | {13} | 3 | 3 | 010100000000000000000008400000000000000840 13 | | {18} | 3.5 | 2.3 | 01010000000000000000000C406666666666660240 14 | {18} | | 3.5 | 4 | 01010000000000000000000C400000000000001040 15 | {3} | {16} | 4 | 1 | 01010000000000000000001040000000000000F03F 16 | {9,16} | {15} | 4 | 2 | 010100000000000000000010400000000000000040 17 | {13,15} | | 4 | 3 | 010100000000000000000010400000000000000840 (17 rows)
Creación de la topología de ruteo en la tabla de aristas
Actualización de la información de
source
WITH out_going AS ( SELECT id AS vid, unnest(out_edges) AS eid, x, y FROM vertices_table ) UPDATE edge_table SET source = vid, x1 = x, y1 = y FROM out_going WHERE id = eid; UPDATE 18
Actualización de la información de
target
WITH in_coming AS ( SELECT id AS vid, unnest(in_edges) AS eid, x, y FROM vertices_table ) UPDATE edge_table SET target = vid, x2 = x, y2 = y FROM in_coming WHERE id = eid; UPDATE 18
Inspección de la topología de ruteo
SELECT id, source, target, x1, y1, x2, y2 FROM edge_table; id | source | target | x1 | y1 | x2 | y2 ----+--------+--------+-----+-----+----------------+----- 6 | 1 | 3 | 0 | 2 | 1 | 2 17 | 2 | 4 | 0.5 | 3.5 | 1.999999999999 | 3.5 1 | 5 | 6 | 2 | 0 | 2 | 1 4 | 6 | 7 | 2 | 1 | 2 | 2 7 | 3 | 7 | 1 | 2 | 2 | 2 10 | 7 | 8 | 2 | 2 | 2 | 3 14 | 8 | 9 | 2 | 3 | 2 | 4 2 | 6 | 10 | 2 | 1 | 3 | 1 5 | 10 | 11 | 3 | 1 | 3 | 2 8 | 7 | 11 | 2 | 2 | 3 | 2 11 | 11 | 12 | 3 | 2 | 3 | 3 12 | 8 | 12 | 2 | 3 | 3 | 3 18 | 13 | 14 | 3.5 | 2.3 | 3.5 | 4 3 | 10 | 15 | 3 | 1 | 4 | 1 9 | 11 | 16 | 3 | 2 | 4 | 2 16 | 15 | 16 | 4 | 1 | 4 | 2 13 | 12 | 17 | 3 | 3 | 4 | 3 15 | 16 | 17 | 4 | 2 | 4 | 3 (18 rows)
Ver también¶
Topología - Familia de Funciones para obtener una visión general de una topología para algoritmos de ruteo.
pgr_createVerticesTable para crear una topología basada en la geometría.
Índices y tablas