pgr_withPointsDD
- Propuesto¶
pgr_withPointsDD
- Devuelve la distancia de conducción desde un punto de partida.
Advertencia
Funciones propuestas para la próxima versión mayor.
No están oficialmente en la versión actual.
Es probable que oficialmente formen parte del próximo lanzamiento:
Las funciones hacen uso de ENTEROS y FLOTANTES
Probablemente el nombre no cambie. (Pero todavía puede)
Es posible que la firma no cambie. (Pero todavía puede)
Probablemente la funcionalidad no cambie. (Pero todavía puede)
Se han hecho pruebas con pgTap. Pero tal vez se necesiten más.
Es posible que la documentación necesite un refinamiento.
Disponibilidad
Versión 3.6.0
Signature change:
driving_side
parameter changed from named optional to unnamed compulsory driving side.pgr_withPointsDD
(Vértice único)pgr_withPointsDD
(Vértices múltiples)
Estandarización de columnas de resultados a
(seq, depth, start_vid, pred, node, edge, cost, agg_cost)
pgr_withPointsDD
(Vértice único)Agregado las columnas
depth
,pred
ystart_vid
.
pgr_withPointsDD
(Vértices múltiples)Agregado las columnas
depth
ypred
.
Cuando
details
esfalse
:Only points that are visited are removed, that is, points reached within the distance are included
Firmas obsoletas
pgr_withpointsdd(text,text,bigint,double precision,boolean,character,boolean)
pgr_withpointsdd(text,text,anyarray,double precision,boolean,character,boolean,boolean)
Version 2.2.0
Nueva función propuesta
Descripción¶
Modifica el grafo para incluir puntos y utilizando el algoritmo Dijkstra, extrae todos los nodos y puntos que tienen costes menores o iguales que el valor de **distance**
desde el punto inicial. Las aristas extraídas conformarán el árbol de expansión correspondiente.
Firmas¶
[directed, details]
[directed, details, equicost]
(seq, depth, start_vid, pred, node, edge, cost, agg_cost)
Vértice único¶
[directed, details]
(seq, depth, start_vid, pred, node, edge, cost, agg_cost)
- Ejemplo:
Topología de manejo por el lado derecho desde el punto \(1\) con una distancia \(3.3\), detallada.
SELECT * FROM pgr_withPointsDD(
'SELECT id, source, target, cost, reverse_cost FROM edges ORDER BY id',
'SELECT pid, edge_id, fraction, side from pointsOfInterest',
-1, 3.3, 'r',
details => true);
seq | depth | start_vid | pred | node | edge | cost | agg_cost
-----+-------+-----------+------+------+------+------+----------
1 | 0 | -1 | -1 | -1 | -1 | 0 | 0
2 | 1 | -1 | -1 | 5 | 1 | 0.4 | 0.4
3 | 2 | -1 | 5 | 6 | 1 | 1 | 1.4
4 | 3 | -1 | 6 | -6 | 4 | 0.7 | 2.1
5 | 4 | -1 | -6 | 7 | 4 | 0.3 | 2.4
(5 rows)
Múltiples vértices¶
[directed, details, equicost]
(seq, depth, start_vid, pred, node, edge, cost, agg_cost)
- Ejemplo:
Desde el punto \(1\) y el vértice \(16\) dentro de una distancia de \(3.3\) con
equicost
en un grafo dirigido
SELECT * FROM pgr_withPointsDD(
'SELECT id, source, target, cost, reverse_cost FROM edges ORDER BY id',
'SELECT pid, edge_id, fraction, side from pointsOfInterest',
ARRAY[-1, 16], 3.3, 'l',
equicost => true);
seq | depth | start_vid | pred | node | edge | cost | agg_cost
-----+-------+-----------+------+------+------+------+----------
1 | 0 | -1 | -1 | -1 | -1 | 0 | 0
2 | 1 | -1 | -1 | 6 | 1 | 0.6 | 0.6
3 | 2 | -1 | 6 | 7 | 4 | 1 | 1.6
4 | 2 | -1 | 6 | 5 | 1 | 1 | 1.6
5 | 3 | -1 | 7 | 3 | 7 | 1 | 2.6
6 | 3 | -1 | 7 | 8 | 10 | 1 | 2.6
7 | 4 | -1 | 8 | -3 | 12 | 0.6 | 3.2
8 | 4 | -1 | 3 | -4 | 6 | 0.7 | 3.3
9 | 0 | 16 | 16 | 16 | -1 | 0 | 0
10 | 1 | 16 | 16 | 11 | 9 | 1 | 1
11 | 1 | 16 | 16 | 15 | 16 | 1 | 1
12 | 1 | 16 | 16 | 17 | 15 | 1 | 1
13 | 2 | 16 | 15 | 10 | 3 | 1 | 2
14 | 2 | 16 | 11 | 12 | 11 | 1 | 2
(14 rows)
Parámetros¶
Columna |
Tipo |
Descripción |
---|---|---|
|
SQL de aristas como se describe a continuación |
|
|
SQL de puntos como se describe abajo |
|
Raíz |
|
Identificador del vértice raíz del árbol.
|
Raíces |
|
Arreglo de identificadores de los vértices raíz.
|
distancia |
|
Límite superior para la inclusión del nodo en el resultado. |
Lado de manejo |
|
|
Donde:
- ENTEROS:
SMALLINT, INTEGER, BIGINT
Parámetros opcionales¶
Columna |
Tipo |
x Defecto |
Descripción |
---|---|---|---|
|
|
|
|
Parámetros opcionales para Con puntos¶
Parámetro |
Tipo |
x Defecto |
Descripción |
---|---|---|---|
|
|
|
|
Parámetros opcionales de distancia de manejo¶
Columna |
Tipo |
x Defecto |
Descripción |
---|---|---|---|
|
|
|
|
Consultas Internas¶
SQL aristas¶
Columna |
Tipo |
x Defecto |
Descripción |
---|---|---|---|
|
ENTEROS |
Identificador de la arista. |
|
|
ENTEROS |
Identificador del primer vértice de la arista. |
|
|
ENTEROS |
Identificador del segundo vértice de la arista. |
|
|
FLOTANTES |
Peso de la arista ( |
|
|
FLOTANTES |
-1 |
Peso de la arista (
|
Donde:
- ENTEROS:
SMALLINT
,INTEGER
,BIGINT
- FLOTANTES:
SMALLINT
,INTEGER
,BIGINT
,REAL
,FLOAT
SQL de puntos¶
Parámetro |
Tipo |
x Defecto |
Descripción |
---|---|---|---|
|
ENTEROS |
valor |
Identificador del punto.
|
|
ENTEROS |
Identificador de la arista «más cercana» al punto. |
|
|
FLOTANTES |
El valor en <0,1> que indica la posición relativa desde el primer punto de la arista. |
|
|
|
|
Valor en [
|
Donde:
- ENTEROS:
SMALLINT
,INTEGER
,BIGINT
- FLOTANTES:
SMALLINT
,INTEGER
,BIGINT
,REAL
,FLOAT
Columnas de resultados¶
Regresa el conjunto de (seq, depth, start_vid, pred, node, edge, cost, agg_cost)
Parámetro |
Tipo |
Descripción |
---|---|---|
|
|
Valor secuencial a partir de \(1\). |
|
|
Profundidad del
|
|
|
Identificador del vértice raíz. |
|
|
Presdecesor de
|
|
|
Identificador del |
|
|
Identificador del
|
|
|
Costo por recorrer |
|
|
Costo agregado desde |
Ejemplos Adicionales¶
Usar pgr_findCloseEdges en el SQL de puntos.¶
Encontrar la distancia de manejo de las dos ubicaciones más cercanas al grafo del punto (2.8, 1.8).
SELECT * FROM pgr_withPointsDD(
$e$ SELECT * FROM edges $e$,
$p$ SELECT edge_id, round(fraction::numeric, 2) AS fraction, side
FROM pgr_findCloseEdges(
$$SELECT id, geom FROM edges$$,
(SELECT ST_POINT(2.9, 1.8)),
0.5, cap => 2)
$p$,
ARRAY[-1, -2], 2.3, 'r',
details => true);
seq | depth | start_vid | pred | node | edge | cost | agg_cost
-----+-------+-----------+------+------+------+------+----------
1 | 0 | -2 | -2 | -2 | -1 | 0 | 0
2 | 1 | -2 | -2 | 11 | 8 | 0.1 | 0.1
3 | 2 | -2 | 11 | 16 | 9 | 1 | 1.1
4 | 2 | -2 | 11 | 12 | 11 | 1 | 1.1
5 | 2 | -2 | 11 | 7 | 8 | 1 | 1.1
6 | 3 | -2 | 12 | 17 | 13 | 1 | 2.1
7 | 3 | -2 | 16 | 15 | 16 | 1 | 2.1
8 | 3 | -2 | 7 | 8 | 10 | 1 | 2.1
9 | 3 | -2 | 7 | 6 | 4 | 1 | 2.1
10 | 3 | -2 | 7 | 3 | 7 | 1 | 2.1
11 | 0 | -1 | -1 | -1 | -1 | 0 | 0
12 | 1 | -1 | -1 | 11 | 5 | 0.2 | 0.2
13 | 2 | -1 | 11 | 7 | 8 | 1 | 1.2
14 | 2 | -1 | 11 | 16 | 9 | 1 | 1.2
15 | 2 | -1 | 11 | 12 | 11 | 1 | 1.2
16 | 3 | -1 | 7 | -2 | 8 | 0.9 | 2.1
17 | 3 | -1 | 7 | 3 | 7 | 1 | 2.2
18 | 3 | -1 | 7 | 6 | 4 | 1 | 2.2
19 | 3 | -1 | 7 | 8 | 10 | 1 | 2.2
20 | 3 | -1 | 16 | 15 | 16 | 1 | 2.2
21 | 3 | -1 | 12 | 17 | 13 | 1 | 2.2
(21 rows)
El punto \(-1\) corresponde a la arista más cercana al punto (2.9, 1.8).
El punto \(-2\) corresponde a la segunda arista más cercana al punto (2.9, 1.8).
Lado de manejo no importa¶
Desde el punto \(1\) dentro de una distancia de \(3.3\), sin importar el lado de manejo, detallada.
SELECT * FROM pgr_withPointsDD(
'SELECT id, source, target, cost, reverse_cost FROM edges ORDER BY id',
'SELECT pid, edge_id, fraction, side from pointsOfInterest',
-1, 3.3, 'b',
directed => false,
details => true);
seq | depth | start_vid | pred | node | edge | cost | agg_cost
-----+-------+-----------+------+------+------+------+----------
1 | 0 | -1 | -1 | -1 | -1 | 0 | 0
2 | 1 | -1 | -1 | 5 | 1 | 0.4 | 0.4
3 | 1 | -1 | -1 | 6 | 1 | 0.6 | 0.6
4 | 2 | -1 | 6 | -6 | 4 | 0.7 | 1.3
5 | 2 | -1 | 6 | 10 | 2 | 1 | 1.6
6 | 3 | -1 | -6 | 7 | 4 | 0.3 | 1.6
7 | 3 | -1 | 10 | -5 | 5 | 0.8 | 2.4
8 | 3 | -1 | 10 | 15 | 3 | 1 | 2.6
9 | 4 | -1 | 7 | 3 | 7 | 1 | 2.6
10 | 4 | -1 | 7 | 8 | 10 | 1 | 2.6
11 | 4 | -1 | 7 | 11 | 8 | 1 | 2.6
12 | 5 | -1 | 8 | -3 | 12 | 0.6 | 3.2
13 | 5 | -1 | 3 | -4 | 6 | 0.7 | 3.3
(13 rows)
Ver también¶
Índices y tablas