pgr_withPointsCostMatrix
- Calcula la ruta más corta y devuelve solo el costo agregado de las rutas más cortas encontradas, para la combinación de puntos dados.
Advertencia
Funciones propuestas para el próximo lanzamineto.
Disponibilidad
Resumen
pgr_withPointsCostMatrix(edges_sql, points_sql, start_vids [, directed] [, driving_side])
RETURNS SET OF (start_vid, end_vid, agg_cost)
Nota
No hay identificador de details, a diferencia de los otros miembros de la familia de funciones withPoints.
Uso de valores predeterminados
pgr_withPointsCostMatrix(edges_sql, points_sql, start_vid)
RETURNS SET OF (start_vid, end_vid, agg_cost)
Ejemplo: | Matriz de costos para puntos \(\{1, 6\}\) y vértices \(\{3, 6\}\) en un grafo dirigido |
---|
SELECT * FROM pgr_withPointsCostMatrix(
'SELECT id, source, target, cost, reverse_cost FROM edge_table ORDER BY id',
'SELECT pid, edge_id, fraction from pointsOfInterest',
array[-1, 3, 6, -6]);
start_vid | end_vid | agg_cost
-----------+---------+----------
-6 | -1 | 1.3
-6 | 3 | 4.3
-6 | 6 | 1.3
-1 | -6 | 1.3
-1 | 3 | 5.6
-1 | 6 | 2.6
3 | -6 | 1.7
3 | -1 | 1.6
3 | 6 | 1
6 | -6 | 1.3
6 | -1 | 2.6
6 | 3 | 3
(12 rows)
pgr_withPointsCostMatrix(edges_sql, points_sql, start_vids,
directed:=true, driving_side:='b')
RETURNS SET OF (start_vid, end_vid, agg_cost)
Ejemplo: | Matriz de costos para puntos \(\{1, 6\}\) y vértices \(\{3, 6\}\) en un grafo no dirigido |
---|
SELECT * FROM pgr_withPointsCostMatrix(
'SELECT id, source, target, cost, reverse_cost FROM edge_table ORDER BY id',
'SELECT pid, edge_id, fraction from pointsOfInterest',
array[-1, 3, 6, -6], directed := false);
start_vid | end_vid | agg_cost
-----------+---------+----------
-6 | -1 | 1.3
-6 | 3 | 1.7
-6 | 6 | 1.3
-1 | -6 | 1.3
-1 | 3 | 1.6
-1 | 6 | 2.6
3 | -6 | 1.7
3 | -1 | 1.6
3 | 6 | 1
6 | -6 | 1.3
6 | -1 | 2.6
6 | 3 | 1
(12 rows)
Parámetro | Tipo | Descripción |
---|---|---|
edges_sql | TEXT |
Consulta de aristas SQL como se describió anteriormente. |
points_sql | TEXT |
Consulta SQL de puntos como se describe arriba. |
start_vids | ARRAY[ANY-INTEGER] |
Arreglo de identificadores de vértices iniciales. Cuando es negativo: es el pid de un punto. |
dirigido | BOOLEAN |
(opcional). En caso de false el grafo se considera como No Dirigido. El valor predeterminado es true que considera el grafo como Dirigido. |
driving_side | CHAR |
|
Devuelve SET OF (start_vid, end_vid, agg_cost)
Columna | Tipo | Descripción |
---|---|---|
start_vid | BIGINT |
Identifier of the starting vertex. |
end_vid | BIGINT |
Identifier of the ending vertex. |
agg_cost | FLOAT |
Coste agregado de start_vid a end_vid . |
Columna | Tipo | Valores predeterminados | Descripción |
---|---|---|---|
id | ANY-INTEGER |
Identificador de la arista. | |
origen | ANY-INTEGER |
Identificador del primer punto final en el vértice de la arista. | |
objetivo | ANY-INTEGER |
Identificador del segundo punto final en el vértice de la arista. | |
cost | ANY-NUMERICAL |
Peso de la arista (source, target)
|
|
reverse_cost | ANY-NUMERICAL |
-1 | Peso de la arista (target, source),
|
Donde:
ANY-INTEGER: | SMALLINT, INTEGER, BIGINT |
---|---|
ANY-NUMERICAL: | SMALLINT, INTEGER, BIGINT, REAL, FLOAT |
Descripción de la consulta SSQL de Puntos
points_sql: | Una consulta SQL, que debe regresar un conjunto de filas con las siguientes columnas: |
---|
Columna | Tipo | Descripción |
---|---|---|
pid | ANY-INTEGER |
(opcional) Identificador del punto.
|
edge_id | ANY-INTEGER |
Identificador de la arista «más cercano» al punto. |
fraction | ANY-NUMERICAL |
El valor en <0,1> que indica la posición relativa desde el primer punto final de la arista. |
side | CHAR |
(opcional) Valor en [“b”, “r”, “l”, NULL] que indica si el punto es:
|
Donde:
ANY-INTEGER: | smallint, int, bigint |
---|---|
ANY-NUMERICAL: | smallint, int, bigint, real, float |
Ejemplo: | pgr_TSP usando pgr_withPointsCostMatrix para puntos \(\{1, 6\}\) y vértices \(\{3, 6\}\) en un grafo no dirigido |
---|
SELECT * FROM pgr_TSP(
$$
SELECT * FROM pgr_withPointsCostMatrix(
'SELECT id, source, target, cost, reverse_cost FROM edge_table ORDER BY id',
'SELECT pid, edge_id, fraction from pointsOfInterest',
array[-1, 3, 6, -6], directed := false);
$$,
randomize := false
);
seq | node | cost | agg_cost
-----+------+------+----------
1 | -6 | 1.3 | 0
2 | -1 | 1.6 | 1.3
3 | 3 | 1 | 2.9
4 | 6 | 1.3 | 3.9
5 | -6 | 0 | 5.2
(5 rows)
Índices y tablas