Unindo camadas com os respectivos elementos com a topologia do PostGIS

24

Atualmente, estou usando a extensão de topologia PostGIS, mas tenho algumas dificuldades para entender como a estrutura funciona:

Um dos pontos principais é o uso de "layer" s: pelo que entendi, os atributos de recursos devem ser armazenados em uma tabela fora do esquema da topologia (aquele nomeado topo_actualname) e registrados como uma camada dessa topologia AddTopoGeometryColumn.

No entanto, há uma maneira simples para se juntar os atributos (armazenados na tabela de camada) com os respectivos recursos (elementos no node, faceou edge_data)?

Agora, o que eu faço é:

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

Mas acho que todo o layerconceito é inútil se precisar conhecer o nome do esquema de topologia e o nome da camada para obter as informações desejadas.

Na verdade, acho que entendi que a topocoluna na camada possui informações suficientes para saber onde está a respectiva topologia e, além disso, o topologyesquema armazena uma referência a cada tabela de camada para cada topologia.

Existe uma maneira curta / simples / adequada de juntar informações? Eu estava procurando por algo nas funções de extensão da topologia , mas não consegui encontrar nada útil.

Davide
fonte
3
Estou um pouco perdido em como você deve aproveitar as topologias também, mas isso pode ajudar. Você pode lançar uma TopoGeometrydiretamente para uma geometria: SELECT whatever, ST_AsText(topogeom::geometry) FROM layer_tb. O problema é que, se as arestas forem divididas mais tarde, parece que a geometria pode mudar como resultado.
jpmc26
1
O que você deseja são ferramentas ou operações de dados, como interseção, união ou mesclagem. O QGIS trabalha com o GIS pós e é gratuito e possui ferramentas como esta. Os recursos estão na camada e são unidos quando você mescla camadas com base nesses tipos de operações.
Lewis

Respostas:

1

O mapeamento dos atributos para a topologia não é direto . O relacionamento é algo como isto para um nó:

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

Portanto, sua instrução select seria mais ou menos assim:

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
fonte