pgr_createTopology¶
pgr_createTopology
— Construye una topología de red basada en la información de geometría.
Disponibilidad
Versión 2.0.0
Renombrado desde la versión 1.x
Función oficial
Soporte
Descripción¶
La función devuelve:
OK
después de que se ha construido la topología de red y la tabla de vértices.FAIL
cuando el la red topológica no se no se completó debido a un error.
Firmas¶
varchar pgr_createTopology(text edge_table, double precision tolerance,
text the_geom:='the_geom', text id:='id',
text source:='source',text target:='target',
text rows_where:='true', boolean clean:=false)
Parámetros¶
La función de creación de topología requiere los siguientes parámetros:
- edge_table
text
La tabla de la red. (puede contener el nombre del esquema)- tolerancia
float8
ajuste tolerancia de bordes desconectados. (en la unidad de proyección)- the_geom
text
nombre de la columna de la geometría en la tabla de la red. El valor por defecto esthe_geom
- id
text``Nombre de la columna de la clave principal de la tabla de red. Valor por defecto es ``id
.- 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 nodo de llegada del segmento. El valor por defecto estarget
.- rows_where
text
Condición para SELECCIONAR un subconjunto de filas. El valor predeterminado estrue
para indicar todas las filas dondesource
otarget
tienen un valor nulo, de lo contrario se utiliza la condición.- limpio
boolean
Limpie cualquier topología previa. El valor predeterminado esfalse
.
Advertencia
La edge_table
se verán afectados
Los valores de la columna``source`` va a cambiar.
Cambian los valores de la columna``target``.
Un índice será creado, si no existe, para acelerar el proceso para las columnas siguientes:
id
the_geom
source
target
La función devuelve:
“” OK”” después de que se ha construido la topología de red.
Crea una tabla de vértices: <edge_table>_vertices_pgr.
Llena las columnas
id
ythe_geom
de la tabla de vértices.Llena las columnas los origen y destino de la tabla de borde haciendo referencia al
id
de la tabla de los vértices.
FAIL
cuando la topología de red no se construyó debido a un error:Una columna de la tabla de red requerida no se encuentra o no es del tipo apropiado.
La condición no está bien formada.
Los nombres de origen, destino o id son las mismos.
No pudo determinarse el SRID de la geometría.
La tabla de vértices
La tabla de vértices es un requerimiento de las funciones pgr_analyzeGraph y pgr_analyzeOneWay.
La estructura de la tabla de los vértices es:
- id
bigint
identificador del vértice.- cnt
integer
Número de vértices en the edge_table que referencian este vértice. Ver pgr_analyzeGraph.- chk
integer
Indicador de que el vértice podría tener un problema. Consulte pgr_analyzeGraph.- ein
integer
Número de vértices en edge_table que referencian a este vértice como (AS) entrante. Ver pgr_analyzeOneWay.- eout
integer
Número de vértices en edge_table que referencian este vértice como (AS) saliente. Ver pgr_analyzeOneWay.- the_geom
geometry
Valor de la geometría POINT del vértice.
Uso cuando las columnas de la tabla de borde coinciden con los valores por defecto:¶
La forma más sencilla de utilizar pgr_createTopology es:
SELECT pgr_createTopology('edge_table', 0.001);
NOTICE: PROCESSING:
NOTICE: pgr_createTopology('edge_table', 0.001, 'the_geom', 'id', 'source', 'target', rows_where := 'true', clean := f)
NOTICE: Performing checks, please wait .....
NOTICE: Creating Topology, Please wait...
NOTICE: -------------> TOPOLOGY CREATED FOR 18 edges
NOTICE: Rows with NULL geometry or NULL id: 0
NOTICE: Vertices table for table public.edge_table is: public.edge_table_vertices_pgr
NOTICE: ----------------------------------------------
pgr_createtopology
--------------------
OK
(1 row)
Cuando los argumentos se escriben en el orden descrito en los parámetros:
Obtenemos el mismo resultado que la forma más sencilla de utilizar la función.
SELECT pgr_createTopology('edge_table', 0.001,
'the_geom', 'id', 'source', 'target');
NOTICE: PROCESSING:
NOTICE: pgr_createTopology('edge_table', 0.001, 'the_geom', 'id', 'source', 'target', rows_where := 'true', clean := f)
NOTICE: Performing checks, please wait .....
NOTICE: Creating Topology, Please wait...
NOTICE: -------------> TOPOLOGY CREATED FOR 18 edges
NOTICE: Rows with NULL geometry or NULL id: 0
NOTICE: Vertices table for table public.edge_table is: public.edge_table_vertices_pgr
NOTICE: ----------------------------------------------
pgr_createtopology
--------------------
OK
(1 row)
Advertencia
id
de la tabla ege_table
se pasa a la función como la columna de geometría,the_geom
se pasa a la función como la columna id
.SELECT pgr_createTopology('edge_table', 0.001,
'id', 'the_geom');
NOTICE: PROCESSING:
NOTICE: pgr_createTopology('edge_table', 0.001, 'id', 'the_geom', 'source', 'target', rows_where := 'true', clean := f)
NOTICE: Performing checks, please wait .....
NOTICE: ----> PGR ERROR in pgr_createTopology: Wrong type of Column id:the_geom
NOTICE: Unexpected error raise_exception
pgr_createtopology
--------------------
FAIL
(1 row)
Cuando se utiliza la notación por nombre
Los parámetros definidos con un valor predeterminado se pueden omitir, siempre que el valor coincida con el valor predeterminado y el orden de los parámetros no importaría.
SELECT pgr_createTopology('edge_table', 0.001,
the_geom:='the_geom', id:='id', source:='source', target:='target');
pgr_createtopology
--------------------
OK
(1 row)
SELECT pgr_createTopology('edge_table', 0.001,
source:='source', id:='id', target:='target', the_geom:='the_geom');
pgr_createtopology
--------------------
OK
(1 row)
SELECT pgr_createTopology('edge_table', 0.001, source:='source');
pgr_createtopology
--------------------
OK
(1 row)
Seleccionar filas utilizando el parámetro rows_where
La selección de filas basadas en el id.
SELECT pgr_createTopology('edge_table', 0.001, rows_where:='id < 10');
pgr_createtopology
--------------------
OK
(1 row)
Selección de las filas en las que la geometría está cerca de la geometría de la fila con id = 5
.
SELECT pgr_createTopology('edge_table', 0.001,
rows_where:='the_geom && (SELECT st_buffer(the_geom, 0.05) FROM edge_table WHERE id=5)');
pgr_createtopology
--------------------
OK
(1 row)
Seleccionar las filas donde la geometría está cerca de la geometría de la fila con``gid`` =100 de la tabla othertable
.
CREATE TABLE otherTable AS (SELECT 100 AS gid, st_point(2.5, 2.5) AS other_geom);
SELECT 1
SELECT pgr_createTopology('edge_table', 0.001,
rows_where:='the_geom && (SELECT st_buffer(other_geom, 1) FROM otherTable WHERE gid=100)');
pgr_createtopology
--------------------
OK
(1 row)
Uso cuando las columnas de la tabla de borde NO COINCIDEN con los valores por defecto:¶
Para la siguiente tabla
CREATE TABLE mytable AS (SELECT id AS gid, the_geom AS mygeom, source AS src , target AS tgt FROM edge_table) ;
SELECT 18
Usando notación posicional:
Los argumentos deben darse en el orden descrito en los parámetros.
Tenga en cuenta que en este ejemplo se utiliza la marca clean. Así que recrea toda la tabla de vértices.
SELECT pgr_createTopology('mytable', 0.001, 'mygeom', 'gid', 'src', 'tgt', clean := TRUE);
pgr_createtopology
--------------------
OK
(1 row)
Advertencia
gid
de la tabla mytable
pasó a la función como (AS) la columna de geometría,mygeom
se pasa a la función como (AS) la columna id.SELECT pgr_createTopology('mytable', 0.001, 'gid', 'mygeom', 'src', 'tgt');
NOTICE: PROCESSING:
NOTICE: pgr_createTopology('mytable', 0.001, 'gid', 'mygeom', 'src', 'tgt', rows_where := 'true', clean := f)
NOTICE: Performing checks, please wait .....
NOTICE: ----> PGR ERROR in pgr_createTopology: Wrong type of Column id:mygeom
NOTICE: Unexpected error raise_exception
pgr_createtopology
--------------------
FAIL
(1 row)
Cuando se utiliza la notación por nombre
En este escenario omitir un parámetro crearía un error porque los valores predeterminados para los nombres de columna no coinciden con los nombres de columna de la tabla. El orden de los parámetros no importa:
SELECT pgr_createTopology('mytable', 0.001, the_geom:='mygeom', id:='gid', source:='src', target:='tgt');
pgr_createtopology
--------------------
OK
(1 row)
SELECT pgr_createTopology('mytable', 0.001, source:='src', id:='gid', target:='tgt', the_geom:='mygeom');
pgr_createtopology
--------------------
OK
(1 row)
Seleccionar filas utilizando el parámetro rows_where
Basado en id:
SELECT pgr_createTopology('mytable', 0.001, 'mygeom', 'gid', 'src', 'tgt', rows_where:='gid < 10');
pgr_createtopology
--------------------
OK
(1 row)
SELECT pgr_createTopology('mytable', 0.001, source:='src', id:='gid', target:='tgt', the_geom:='mygeom', rows_where:='gid < 10');
pgr_createtopology
--------------------
OK
(1 row)
SELECT pgr_createTopology('mytable', 0.001, 'mygeom', 'gid', 'src', 'tgt',
rows_where:='mygeom && (SELECT st_buffer(mygeom, 1) FROM mytable WHERE gid=5)');
pgr_createtopology
--------------------
OK
(1 row)
SELECT pgr_createTopology('mytable', 0.001, source:='src', id:='gid', target:='tgt', the_geom:='mygeom',
rows_where:='mygeom && (SELECT st_buffer(mygeom, 1) FROM mytable WHERE gid=5)');
pgr_createtopology
--------------------
OK
(1 row)
Seleccionar las filas donde la geometría está cerca de la geometría de la fila con``gid`` =100 de la tabla othertable
.
SELECT pgr_createTopology('mytable', 0.001, 'mygeom', 'gid', 'src', 'tgt',
rows_where:='mygeom && (SELECT st_buffer(other_geom, 1) FROM otherTable WHERE gid=100)');
pgr_createtopology
--------------------
OK
(1 row)
SELECT pgr_createTopology('mytable', 0.001, source:='src', id:='gid', target:='tgt', the_geom:='mygeom',
rows_where:='mygeom && (SELECT st_buffer(other_geom, 1) FROM otherTable WHERE gid=100)');
pgr_createtopology
--------------------
OK
(1 row)
Ejemplos Adicionales¶
- Ejemplo
Con salida completa
En este ejemplo se inicia una topología limpia, con 5 aristas y, a continuación, se incrementa al resto de los bordes.
SELECT pgr_createTopology('edge_table', 0.001, rows_where:='id < 6', clean := true);
NOTICE: PROCESSING:
NOTICE: pgr_createTopology('edge_table', 0.001, 'the_geom', 'id', 'source', 'target', rows_where := 'id < 6', clean := t)
NOTICE: Performing checks, please wait .....
NOTICE: Creating Topology, Please wait...
NOTICE: -------------> TOPOLOGY CREATED FOR 5 edges
NOTICE: Rows with NULL geometry or NULL id: 0
NOTICE: Vertices table for table public.edge_table is: public.edge_table_vertices_pgr
NOTICE: ----------------------------------------------
pgr_createtopology
--------------------
OK
(1 row)
SELECT pgr_createTopology('edge_table', 0.001);
NOTICE: PROCESSING:
NOTICE: pgr_createTopology('edge_table', 0.001, 'the_geom', 'id', 'source', 'target', rows_where := 'true', clean := f)
NOTICE: Performing checks, please wait .....
NOTICE: Creating Topology, Please wait...
NOTICE: -------------> TOPOLOGY CREATED FOR 13 edges
NOTICE: Rows with NULL geometry or NULL id: 0
NOTICE: Vertices table for table public.edge_table is: public.edge_table_vertices_pgr
NOTICE: ----------------------------------------------
pgr_createtopology
--------------------
OK
(1 row)
En el ejemplo se utiliza la red Datos Muestra.
Ver también¶
Topología - Familia de Funciones para obtener una visión general de una topología para algoritmos de ruteo.
pgr_createVerticesTable para reconstruir la tabla de vértices en función de la información de origen y de destino.
pgr_analyzeGraph para analizar los bordes y vértices de la tabla de bordes.
Índices y tablas