pgr_analyzeOneWay

pgr_analyzeOneWay — Analiza las calles de sentido unidireccional e identifica los segmentos volteados.

Esta función analiza las calles unidireccionales en un gráfico e identifica cualquier segmentos invertido.

Disponibilidad

  • Versión 2.0.0

    • Función oficial

Descripción

El análisis de segmentos que tienen un solo sentido es bastante simple, pero a la vez ser una herramienta poderosa para identificar algunos problemas potenciales que son creados al establecer la dirección de un segmento de la manera equivocada. Un nodo es un source si tiene bordes que salen de ese nodo y no hay bordes que entren a ese nodo. Por el contrario, un nodo es un`sink` si todos los bordes entran al nodo pero ninguno sale de ese nodo. Para un nodo source es lógicamente imposible existir porque ningún vehículo puede salir del nodo o si algún vehículo logró entrar en el nodo. Asimismo, si tuvieras un nodo sink tienes un número infinito de vehículos que se van acumulando en este nodo porque no pueden salir de el.

Así que ¿por qué nos importa si no es factibles? Si la dirección de un borde se revirtió por error podríamos generar exactamente en estas condiciones. Pensar en una carretera dividida y en el carril que va al norte un segmento o varios segmentos fueron introducidos al revés, o tal vez esto sucedió en una glorieta. El resultado sería potencialmente un nodo source y/o a sink node.

Así contando el número de aristas entrantes y salientes de cada nodo podemos identificar los nodos source y sink, así que usted puede mirar esas áreas de su red para hacer reparaciones o informar del problema a su proveedor de datos.

Pre-requisitos

La tabla de aristas a analizar debe contener una columna origen y una columna destino rellenas con identificadores de los vértices de los segmentos y la correspondiente tabla de vértices <edge_table>_vertices_pgr que almacena la información de los vértices.

Firmas

pgr_analyzeOneWay(geom_table, s_in_rules, s_out_rules, t_in_rules, t_out_rules, [options])
opcionales: [oneway, source, target, two_way_if_null]
RETURNS TEXT

Parámetros

edge_table:

text La tabla de la red. (puede contener el nombre del esquema)

s_in_rules:

text[] reglas de entrada del nodo inicial

s_out_rules:

text[] reglas de salida del nodo inicial

t_in_rules:

text[] reglas de entrada del nodo final

t_out_rules:

text[] reglas de salida del nodo final

oneway:

text El nombre de la columna del sentido. El valor por defecto es oneway.

source:

id``Nombre de columna de origen de la tabla de red. El valor predeterminado es``source.

target:

text El nombre de la columna del destino del segmento. El valor por defecto es target.

two_way_if_null:

boolean bandera para tratar los valores NULL de oneway como bidireccional. Valor predeterminado es``true``.

Nota

Es ampliamente recomendable usar la notación nombrada . Ver ejemplos en: pgr_createVerticesTable o pgr_createTopology.

La función devuelve:

  • OK Cuando el análisis ha terminado.

    • Utiliza la tabla de los vértices: <edge_table>_vertices_pgr.

    • Se llena completamente las columnas de la tabla de vértices ein y eout.

  • FAIL cuando el análisis no se completó debido a un error.

    • No se encuentra en la tabla de los vértices.

    • Una columna de la tabla de red requerida no se encuentra o no es del tipo apropiado.

    • Los nombres de origen, destino o oneway son las mismos.

Las reglas se definen como un conjunto de textos que si encajan con el valor de oneway se contara como true para las condiciones de el origen o destino in o out .

La tabla de vértices

Los vértices pueden ser creados con pgr_createVerticesTable o pgr_createTopology

La estructura de la tabla de los vértices es:

id:

bigint identificador del vértice.

cnt:

integer Número de vértices en edge_table que hacen referencia a este vértice. Consulte pgr_analyzeGgraph.

chk:

integer Indicador de que el vértice podría tener un problema. Consulte pgr_analyzeGraph.

ein:

integer número de vértices en la edge_table que hacen referencia a este vértice como entrante.

eout:

integer número de vértices en la edge_table que hacen referencia a este vértice como saliente.

the_geom:

geometry Valor de la geometría POINT del vértice.

Ejemplos Adicionales

ALTER TABLE edges ADD COLUMN dir TEXT;
ALTER TABLE
SELECT  pgr_createTopology('edges', 0.001, 'geom');
NOTICE:  PROCESSING:
NOTICE:  pgr_createTopology('edges', 0.001, 'geom', 'id', 'source', 'target', rows_where := 'true', clean := f)
NOTICE:  Performing checks, please wait .....
NOTICE:  Creating Topology, Please wait...
NOTICE:  -------------> TOPOLOGY CREATED FOR  0 edges
NOTICE:  Rows with NULL geometry or NULL id: 0
NOTICE:  Vertices table for table public.edges is: public.edges_vertices_pgr
NOTICE:  ----------------------------------------------
 pgr_createtopology
--------------------
 OK
(1 row)

UPDATE edges SET
dir = CASE WHEN (cost>0 AND reverse_cost>0) THEN 'B'   /* both ways */
           WHEN (cost>0 AND reverse_cost<0) THEN 'FT'  /* direction of the LINESSTRING */
           WHEN (cost<0 AND reverse_cost>0) THEN 'TF'  /* reverse direction of the LINESTRING */
           ELSE '' END;
UPDATE 18
/* unknown */
	SELECT pgr_analyzeOneWay('edges',
        ARRAY['', 'B', 'TF'],
        ARRAY['', 'B', 'FT'],
        ARRAY['', 'B', 'FT'],
        ARRAY['', 'B', 'TF'],
        oneway:='dir');
NOTICE:  PROCESSING:
NOTICE:  pgr_analyzeOneway('edges','{"",B,TF}','{"",B,FT}','{"",B,FT}','{"",B,TF}','dir','source','target',t)
NOTICE:  Analyzing graph for one way street errors.
NOTICE:  Analysis 25% complete ...
NOTICE:  Analysis 50% complete ...
NOTICE:  Analysis 75% complete ...
NOTICE:  Analysis 100% complete ...
NOTICE:  Found 0 potential problems in directionality
 pgr_analyzeoneway
-------------------
 OK
(1 row)

Ver también

Índices y tablas