Versiones no soportadas:2.6 2.5 2.4 2.3 2.2
pgr_withPointsCost
¶
pgr_withPointsCost
- Calcula el camino más corto y devuelve sólo el coste agregado del camino más corto encontrado, para la combinación de puntos dada.
Disponibilidad
Versión 4.0.0
Función promovida a oficial.
Versión 3.2.0
Nuevas firmas propuesta:
pgr_withPointsCost(Combinaciones)
Version 2.2.0
Nueva función propuesta.
Descripción¶
Modificar el grafo para incluir los puntos definidos por points_sql. Utilizando el algoritmo de Dijkstra, devolver sólo el coste agregado del camino más corto encontrado.
- Las principales características son:
No devuelve una ruta.
Devuelve la suma de los costes de la ruta más corta para la combinación de pares de vértices en el grafo modificado.
Los vértices del grafo son:
positivo cuando pertenece a edges_sql
negativo cuando pertenece a points_sql
El proceso se realiza sólo en aristas con costos positivos.
Los valores se devuelven cuando hay una ruta.
Los valores devueltos tienen la forma de un conjunto de (start_vid, end_vid, agg_cost).
Cuando el vértice inicial y el vértice final son iguales, no hay camino.
El agg_cost en los valores no incluidos (v, v) es 0
Cuando el vértice inicial y el vértice final son diferentes y no hay ruta.
El agg_cost en los valores no incluidos (u, v) es
Si los valores devueltos se almacenan en una tabla, el índice único sería el par: (start_vid, end_vid).
Para los grafos no dirigidos, los resultados son simétricos.
El agg_cost de (u, v) es el mismo que para (v, u).
Para fines de optimización, se omite cualquier valor duplicado en start_vids o end_vids .
Los valores regresados se ordenan:
start_vid ascendente
end_vid ascendente
Tiempo de ejecución:
Firmas¶
Resumen
[directed, driving_side]
(start_pid, end_pid, agg_cost)
Nota
No hay identificador de details, a diferencia de los otros miembros de la familia de funciones withPoints.
Uno a Uno¶
[directed, driving_side]
(start_pid, end_pid, agg_cost)
- Ejemplo:
Del punto
al punto con valores por defecto
SELECT * FROM pgr_withPointsCost(
'SELECT id, source, target, cost, reverse_cost FROM edges ORDER BY id',
'SELECT pid, edge_id, fraction, side from pointsOfInterest',
-1, 10);
start_pid | end_pid | agg_cost
-----------+---------+----------
-1 | 10 | 5.6
(1 row)
Uno a Muchos¶
[directed, driving_side]
(start_pid, end_pid, agg_cost)
- Ejemplo:
Desde el punto
al punto y al vértice en un grafo no dirigido
SELECT * FROM pgr_withPointsCost(
'SELECT id, source, target, cost, reverse_cost FROM edges ORDER BY id',
'SELECT pid, edge_id, fraction, side from pointsOfInterest',
-1, ARRAY[-3, 7],
directed => false);
start_pid | end_pid | agg_cost
-----------+---------+----------
-1 | -3 | 3.2
-1 | 7 | 1.6
(2 rows)
Muchos a Uno¶
[directed, driving_side]
(start_pid, end_pid, agg_cost)
- Ejemplo:
Desde el punto
y el vértice al punto
SELECT * FROM pgr_withPointsCost(
'SELECT id, source, target, cost, reverse_cost FROM edges ORDER BY id',
'SELECT pid, edge_id, fraction, side from pointsOfInterest',
ARRAY[-1, 6], -3);
start_pid | end_pid | agg_cost
-----------+---------+----------
-1 | -3 | 3.2
6 | -3 | 2.6
(2 rows)
Muchos a Muchos¶
[directed, driving_side]
(start_pid, end_pid, agg_cost)
- Ejemplo:
Del punto
y vértice al punto y vértice
SELECT * FROM pgr_withPointsCost(
'SELECT id, source, target, cost, reverse_cost FROM edges ORDER BY id',
'SELECT pid, edge_id, fraction, side from pointsOfInterest',
ARRAY[-1, 6], ARRAY[-3, 1]);
start_pid | end_pid | agg_cost
-----------+---------+----------
-1 | -3 | 3.2
-1 | 1 | 3.6
6 | -3 | 2.6
6 | 1 | 3
(4 rows)
Combinaciones¶
[directed, driving_side]
(start_pid, end_pid, agg_cost)
- Ejemplo:
Dos combinaciones
Desde el punto
SELECT * FROM pgr_withPointsCost(
'SELECT id, source, target, cost, reverse_cost FROM edges ORDER BY id',
'SELECT pid, edge_id, fraction, side from pointsOfInterest',
'SELECT * FROM (VALUES (-1, 10), (6, -3)) AS combinations(source, target)',
driving_side => 'r');
start_pid | end_pid | agg_cost
-----------+---------+----------
-1 | 10 | 6.4
6 | -3 | 2.6
(2 rows)
Parámetros¶
Columna |
Tipo |
Descripción |
---|---|---|
|
SQL de aristas como se describe a continuación |
|
|
SQL de puntos como se describe abajo |
|
|
SQL de combinaciones como se describe a abajo |
|
salida |
|
Identificador del vértice inicial de la ruta. Valor negativo es para identificador de punto. |
salidas |
|
Arreglo de identificadores de vértices iniciales. Valores negativos son para identificadores de puntos. |
destino |
|
Identificador del vértice final de la ruta. Valor negativo es para identificador de punto. |
destinos |
|
Arreglo de identificadores de vértices finales. Valores negativos son para identificadores de puntos. |
Parámetros opcionales¶
Columna |
Tipo |
x Defecto |
Descripción |
---|---|---|---|
|
|
|
|
Parámetros opcionales para Con puntos¶
Parámetro |
Tipo |
x Defecto |
Descripción |
---|---|---|---|
|
|
|
Valor en [
|
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
SQL Combinaciones¶
Parámetro |
Tipo |
Descripción |
---|---|---|
|
ENTEROS |
Identificador del vértice de partida. |
|
ENTEROS |
Identificador del vértice de llegada. |
Donde:
- ENTEROS:
SMALLINT
,INTEGER
,BIGINT
Columnas de resultados¶
Columna |
Tipo |
Descripción |
---|---|---|
|
|
Identificador del vértice o punto inicial.
|
|
|
Identificador del primer vértice o punto.
|
|
|
Costo afregado desde |
Ejemplos Adicionales¶
Usar pgr_findCloseEdges en el SQL de puntos.¶
Encontrar el costo de las rutas desde el vértice
SELECT * FROM pgr_withPointsCost(
$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$,
1, ARRAY[-1, -2]);
start_pid | end_pid | agg_cost
-----------+---------+----------
1 | -2 | 2.9
1 | -1 | 6.8
(2 rows)
Punto
corresponde a la arista más cercana al punto (2.9, 1.8).Punto
corresponde a la segunda arista más cercana al punto (2.9, 1.8).Estar cercano al grafo no significa tener la ruta más corta.
Topología de manejo del lado derecho¶
Desde el punto
SELECT * FROM pgr_withPointsCost(
'SELECT id, source, target, cost, reverse_cost FROM edges ORDER BY id',
'SELECT pid, edge_id, fraction, side from pointsOfInterest',
ARRAY[5, -1], ARRAY[-2, -3, -6, 10, 11],
driving_side => 'r');
start_pid | end_pid | agg_cost
-----------+---------+----------
-1 | -6 | 2.1
-1 | -3 | 4
-1 | -2 | 4.8
-1 | 10 | 6.4
-1 | 11 | 3.4
5 | -6 | 1.7
5 | -3 | 3.6
5 | -2 | 4.4
5 | 10 | 6
5 | 11 | 3
(10 rows)
Topología de manejo del lado izquierdo¶
Desde el punto
SELECT * FROM pgr_withPointsCost(
'SELECT id, source, target, cost, reverse_cost FROM edges ORDER BY id',
'SELECT pid, edge_id, fraction, side from pointsOfInterest',
ARRAY[5, -1], ARRAY[-2, -3, -6, 10, 11],
driving_side => 'l');
start_pid | end_pid | agg_cost
-----------+---------+----------
-1 | -6 | 1.3
-1 | -3 | 3.2
-1 | -2 | 5.2
-1 | 10 | 5.6
-1 | 11 | 2.6
5 | -6 | 1.7
5 | -3 | 3.6
5 | -2 | 5.6
5 | 10 | 6
5 | 11 | 3
(10 rows)
No importa el lado de manejo¶
Desde el punto
SELECT * FROM pgr_withPointsCost(
'SELECT id, source, target, cost, reverse_cost FROM edges ORDER BY id',
'SELECT pid, edge_id, fraction, side from pointsOfInterest',
ARRAY[5, -1], ARRAY[-2, -3, -6, 10, 11]);
start_pid | end_pid | agg_cost
-----------+---------+----------
-1 | -6 | 1.3
-1 | -3 | 3.2
-1 | -2 | 4
-1 | 10 | 5.6
-1 | 11 | 2.6
5 | -6 | 1.7
5 | -3 | 3.6
5 | -2 | 4.4
5 | 10 | 6
5 | 11 | 3
(10 rows)
Ver también¶
Índices y tablas