Unire i livelli con i rispettivi elementi con la topologia PostGIS


24

Attualmente sto usando l'estensione della topologia di PostGIS, ma ho alcune difficoltà a capire come funziona la struttura:

Uno dei punti chiave è l'uso dei "layer": a quanto ho capito, gli attributi delle caratteristiche dovrebbero essere archiviati in una tabella dallo schema della topologia (quella denominata topo_actualname) e registrati come layer di quella topologia con AddTopoGeometryColumn.

Tuttavia, c'è un modo semplice per unire gli attributi (memorizzati nella tabella strato) con le rispettive funzioni (elementi nel node, faceo edge_data)?

Ora, quello che faccio è:

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

Ma immagino che l'intero layerconcetto sia piuttosto inutile se devo conoscere sia il nome dello schema della topologia sia il nome del livello per ottenere le informazioni che desidero.

In effetti, penso di aver capito che la topocolonna sul layer ha abbastanza informazioni per sapere dove si trova la rispettiva topologia e inoltre lo topologyschema memorizza un riferimento a ciascuna tabella di layer per ogni topologia.

Esiste un modo breve / semplice / corretto per unire le informazioni? Stavo cercando qualcosa nelle funzioni di estensione della topologia , ma non sono riuscito a trovare nulla di utile.


3
Sono un po 'perso su come dovresti sfruttare anche le topologie, ma questo potrebbe aiutare. È possibile lanciare un TopoGeometrydirettamente a una geometria: SELECT whatever, ST_AsText(topogeom::geometry) FROM layer_tb. Il fatto è che se i bordi vengono divisi in un secondo momento, la geometria potrebbe cambiare di conseguenza.
jpmc26,

1
Quello che vuoi sono strumenti o operazioni sui dati come intersecare, unire o unire. QGIS funziona con post GIS ed è gratuito e dispone di strumenti come questo. Le funzioni si trovano nel livello e vengono unite quando si uniscono i livelli in base a tali tipi di operazioni.
Lewis,

Risposte:


1

La mappatura degli attributi sulla topologia non è diretta . La relazione è simile a questa per un nodo:

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

Quindi la tua dichiarazione selezionata sarebbe più simile a questa:

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)
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.