pgr_withPointsCostMatrix - propuesto

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.

  • No están oficialmente en la versión actual.
  • Es probable que oficialmente formen parte del próximo lanzamiento:
    • Las funciones hacen uso de ANY-INTEGER y ANY-NUMERICAL
    • Es posible que el nombre no cambie. (Pero todavía puede)
    • Es posible que la firma no cambie. (Pero todavía puede)
    • Es posible que la funcionalidad no cambie. (Pero todavía puede)
    • Se han hecho pruebas de pgTap. Pero tal vez necesite más.
    • Es posible que la documentación necesite un refinamiento.
_images/boost-inside.jpeg

Adentro: Boost Graph

Disponibilidad

  • Version 2.2.0
    • Nueva función propuesta

Descripción

  • TBD

Firmas

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

La firma mínima:
  • Es para un grafo dirigido.
  • Ambos lados de conducción se establecen como b. Así que llegar/partir hacia/desde el o los puntos, puede ser en cualquier dirección.
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)

Firma completa

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
  • Devolver una matriz de costes simétrica
  • Uso del valor predeterminado side en la consulta points_sql
  • Usando el valor predeterminado driving_side
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ámetros

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
(opcional) Valor en [“b”, “r”, “l”, NULL] que indica si el lado de conducción es:
  • A la derecha o a la izquierda o
  • Si no importa con “b” o NULL.
  • Si la columna no presente “b” es considerada

Devuelve SET OF (start_vid, end_vid, agg_cost)

Columna Tipo Descripción
start_vid BIGINT Identificador del vértice inicial. Se utiliza cuando hay varias vetrices iniciales en la consulta.
end_vid BIGINT Identificador del vértice final. Se utiliza cuando hay varios vértices finales en la consulta.
agg_cost FLOAT Coste agregado de start_vid a end_vid.

Consulta interna

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)

  • Cuando es negativo: la arista (source, target) no existe, por lo tanto no es parte del grafo.
reverse_cost ANY-NUMERICAL -1

Peso de la arista (target, source),

  • En caso negativo: la arista (target, source) no existe, por lo tanto no es parte del grafo.

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.

  • Si la columna está presente, no puede ser NULL.
  • Si la columna no está presente, se proporcionará automáticamente un identificador secuencial.
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:

  • A la derecha, a la izquierda del borde o
  • Si no importa con “b” o NULL.
  • Si la columna no presente “b” es considerada

Donde:

ANY-INTEGER:smallint, int, bigint
ANY-NUMERICAL:smallint, int, bigint, real, float

Ejemplos Adicionales

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)