pgr_withPointsCostMatrix
- propuesto¶
pgr_withPointsCostMatrix
- Calcula una matriz de costos usando pgr_withPoints - Propuesto.
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
Version 2.2.0
Nueva función propuesta
Descripción¶
Utilizando el algoritmo Dijkstra, calcula y devuelve una matriz de costes.
Algoritmo de Dijkstra, concebido por el informático holandés Edsger Dijkstra en 1956. Es un algoritmo de búsqueda en grafos que resuelve el problema de ruta más corta para un grafo con costos de aristas no negativos, produciendo la ruta más corta desde un vértice inicial a un vértice final . Esta implementación se puede utilizar con un grafos dirigidos y no dirigidos.
Las características principales son:
Se puede utilizar como entrada para pgr_TSP.
Usar directamente cuando la matriz resultante es simétrica y no hay valor \(\infty\).
Es responsabilidad dels usuario hacer que la matriz sea simétrica.
Mediante el uso de la media geométrica o armónica de los valores no simétricos.
Mediante el uso de max o min, los valores no simétricos.
Estableciendo el triángulo superior para que sea la imagen reflejada del triángulo inferior.
Estableciendo el triángulo inferior para que sea la imagen reflejada del triángulo superior.
También es responsabilidad de los usuarios para fijar un valor \(\infty\).
Cada función funciona como parte de la familia a la que pertenece.
No devuelve una ruta.
Devuelve la suma de los costos de la ruta más corta para la combinación de pares de nodos en el grafo.
El proceso se realiza sólo en aristas con costos positivos.
Los valores se devuelven cuando hay una ruta.
Cuando el vértice inicial y el vértice final son iguales, no hay camino.
El costo agregado de los valores no incluídos (v, v) es 0.
Cuando el vértice inicial y el vértice final son diferentes y no hay ruta.
El costo agregado de los valores no incluídos
(u, v)
es :math: infty.
Sea el caso, los valores devueltos se almacenan en una tabla:
El índice único es el par:
(start_vid, end_vid)
.
Dependiendo de la función y sus parámetros, los resultados pueden ser simétricos.
El costo agregado de (u, v) es el mismo que para (v, u).
Se omite cualquier valor duplicado en las salidas.
Los valores regresados se ordenan:
start_vid
ascendenteend_vid
ascendente
Firmas¶
Resumen
[directed, driving_side]
(start_vid, end_vid, agg_cost)
Nota
No hay identificador de details, a diferencia de los otros miembros de la familia de funciones withPoints.
- Ejemplo:
Matriz de costos para puntos \(\{1, 6\}\) y vértices \(\{10, 11\}\) en un grafo no dirigido
Devolver una matriz de costes simétrica
Uso del valor predeterminado
side
en la consulta SQL de puntosUsando el valor predeterminado
driving_side
SELECT * FROM pgr_withPointsCostMatrix(
'SELECT id, source, target, cost, reverse_cost FROM edges ORDER BY id',
'SELECT pid, edge_id, fraction from pointsOfInterest',
array[-1, 10, 11, -6], directed := false);
start_vid | end_vid | agg_cost
-----------+---------+----------
-6 | -1 | 1.3
-6 | 10 | 1.7
-6 | 11 | 1.3
-1 | -6 | 1.3
-1 | 10 | 1.6
-1 | 11 | 2.6
10 | -6 | 1.7
10 | -1 | 1.6
10 | 11 | 1
11 | -6 | 1.3
11 | -1 | 2.6
11 | 10 | 1
(12 rows)
Parámetros¶
Columna |
Tipo |
Descripción |
---|---|---|
|
SQL de aristas como se describe a continuación |
|
|
SQL de puntos como se describe abajo |
|
salidas |
|
Arreglo de identificadores de vértices iniciales. |
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
Columnas de resultados¶
Conjunto de (start_vid, end_vid, agg_cost)
Columna |
Tipo |
Descripción |
---|---|---|
|
|
Identificador del vértice de salida. |
|
|
Identificador del vértice final. |
|
|
Costo afregado desde |
Nota
Cuando las columnas del vértice inicial o del destino continen valores negativos, el identificador es para un Punto.
Ejemplos Adicionales¶
Usar pgr_findCloseEdges en el SQL de puntos.¶
Encontrar la matriz de costos de las rutas desde el vértice \(1\) y las dos ubicaciones más cercanas en el grafo al punto (2.9, 1.8).
SELECT * FROM pgr_withPointsCostMatrix(
$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[5, 10, -1, -2]);
start_vid | end_vid | agg_cost
-----------+---------+----------
-2 | -1 | 3.9
-2 | 5 | 2.9
-2 | 10 | 3.1
-1 | -2 | 0.3
-1 | 5 | 3.2
-1 | 10 | 3.2
5 | -2 | 2.9
5 | -1 | 6.8
5 | 10 | 6
10 | -2 | 1.1
10 | -1 | 0.8
10 | 5 | 2
(12 rows)
Punto \(-1\) corresponde a la arista más cercana al punto (2.9, 1.8).
Punto \(-2\) corresponde a la segunda arista más cercana al punto (2.9, 1.8).
Usar con pgr_TSP.¶
SELECT * FROM pgr_TSP(
$$
SELECT * FROM pgr_withPointsCostMatrix(
'SELECT id, source, target, cost, reverse_cost FROM edges ORDER BY id',
'SELECT pid, edge_id, fraction from pointsOfInterest',
array[-1, 10, 11, -6], directed := false);
$$
);
seq | node | cost | agg_cost
-----+------+------+----------
1 | -6 | 0 | 0
2 | -1 | 1.3 | 1.3
3 | 10 | 1.6 | 2.9
4 | 11 | 1 | 3.9
5 | -6 | 1.3 | 5.2
(5 rows)
Ver también¶
Índices y tablas