Unir capas con elementos respectivos con topología PostGIS

24

Actualmente estoy usando la extensión de topología PostGIS, pero tengo algunas dificultades para comprender cómo funciona la estructura:

Uno de los puntos clave es el uso de "capas": por lo que entiendo, los atributos de las características deben almacenarse en una tabla fuera del esquema de la topología (la nombrada topo_actualname) y registrarse como una capa de esa topología AddTopoGeometryColumn.

Sin embargo, hay una manera sencilla de unirse a los atributos (almacenados en la tabla de capas) con las respectivas características (elementos en el node, faceo edge_data)?

Ahora, lo que hago es:

SELECT whatever
FROM layer_tb l
     JOIN topo_topologyname.edge_data e ON (l.topo).id=edge_id;

Pero supongo que todo el layerconcepto es bastante inútil si tengo que conocer tanto el nombre del esquema de topología como el nombre de la capa para obtener la información que quiero.

De hecho, creo que entendí que la topocolumna en la capa tiene suficiente información para saber dónde está la topología respectiva y, además, el topologyesquema almacena una referencia a cada tabla de capa para cada topología.

¿Hay una manera corta / simple / adecuada de unir información? Estaba buscando algo en las funciones de extensión de topología , pero no pude encontrar nada útil.

Davide
fuente
3
También estoy un poco perdido en cómo se supone que debes aprovechar las topologías, pero esto podría ayudar. Puede lanzar un TopoGeometrydirectamente a una geometría: SELECT whatever, ST_AsText(topogeom::geometry) FROM layer_tb. La cuestión es que si los bordes se dividen más tarde, parece que la geometría podría cambiar como resultado.
jpmc26
1
Lo que desea son herramientas u operaciones de datos como intersección, unión o fusión. QGIS funciona con post GIS y es gratuito y tiene herramientas como esta. Las características están en la capa y se unen cuando fusiona capas basadas en ese tipo de operaciones.
Lewis

Respuestas:

1

La asignación de los atributos a la topología no es directa . La relación es algo así para un nodo:

your_topogeom -> (topogeom_id) relation table (element_id)-> (node_id) node

Entonces su declaración de selección sería más como esta:

SELECT whatever
FROM layer_tb l
INNER JOIN relation AS r ON (((l.mytopogeom).id , (l.mytopogeom).layer_id)) = (r.topogeo_id, r.layer_id  )
INNER JOIN edge_data AS e ON (r.element_id = e.edge_id)
MappaGnosis
fuente