Joindre des couches avec des éléments respectifs avec la topologie PostGIS

24

J'utilise actuellement l'extension de topologie PostGIS, mais j'ai quelques difficultés à comprendre le fonctionnement de la structure:

L'un des points clés est l'utilisation de «couches»: d'après ce que je comprends, les attributs des fonctionnalités doivent être stockés dans une table hors du schéma de la topologie (celui nommé topo_actualname) et enregistrés en tant que couche de cette topologie avec AddTopoGeometryColumn.

Cependant, est - il un moyen simple de rejoindre les attributs (stockés dans la table de couche) avec les caractéristiques respectives (éléments du node, faceou edge_data)?

Maintenant, ce que je fais, c'est:

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

Mais je suppose que l'ensemble du layerconcept est plutôt inutile si je dois connaître à la fois le nom du schéma de topologie et le nom de la couche pour obtenir les informations que je veux.

En fait, je pense avoir compris que la topocolonne sur la couche a suffisamment d'informations pour savoir où se trouve la topologie respective, et de plus le topologyschéma stocke une référence à chaque table de couche pour chaque topologie.

Existe-t-il un moyen court / simple / approprié de réunir les informations? Je cherchais quelque chose dans les fonctions d'extension de topologie , mais je n'ai rien trouvé d'utile.

Davide
la source
3
Je suis un peu perdu quant à la manière dont vous êtes censé exploiter les topologies, mais cela pourrait vous aider. Vous pouvez jeter un TopoGeometrydirectement à une géométrie: SELECT whatever, ST_AsText(topogeom::geometry) FROM layer_tb. Le truc, c'est que si les bords se fendent plus tard, il semble que la géométrie pourrait changer en conséquence.
jpmc26
1
Ce que vous voulez, ce sont des outils ou des opérations de données tels que l'intersection, l'union ou la fusion. QGIS fonctionne avec post GIS et est gratuit et dispose d'outils comme celui-ci. Les entités se trouvent dans le calque et sont jointes lorsque vous fusionnez des calques en fonction de ces types d'opérations.
lewis

Réponses:

1

Le mappage des attributs à la topologie n'est pas direct . La relation est quelque chose comme ça pour un nœud:

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

Votre déclaration de sélection ressemblerait donc plus à ceci:

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
la source