使用PostGIS拓扑将各层与各个元素结合在一起


24

我目前正在使用PostGIS拓扑扩展,但是在理解结构的工作方式方面有些困难:

关键点之一是“层”的使用:据我所知,要素属性应该存储在拓扑架构(称为topo_actualname)之外的表中,并使用进行注册为该拓扑的一层AddTopoGeometryColumn

然而,有一个简单的方式加入与相应的特征(在元件中的属性(存储在表层)nodefaceedge_data)?

现在,我要做的是:

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

但是我想layer如果我必须同时了解拓扑架构名称和层名称来获取所需信息,那么整个概念将毫无用处。

实际上,我认为我理解topo该层上的列具有足够的信息来了解各个拓扑的位置,并且该topology模式还存储了对每个拓扑的每个层表的引用。

是否有简短/简单/正确的方式将信息连接在一起?我在拓扑扩展功能中寻找某些东西,但是找不到有用的东西。


3
我对应该如何利用拓扑也有些迷惑,但这可能会有所帮助。您可以TopoGeometry直接将投射到几何:SELECT whatever, ST_AsText(topogeom::geometry) FROM layer_tb。问题是,如果以后再将边缘分开,则似乎几何形状可能会发生变化。
jpmc26 2014年

1
您需要的是工具或数据操作,例如相交,并集或合并。QGIS与Post GIS一起使用,并且是免费的,并且具有类似的工具。要素在图层中,并在您基于这些操作类型合并图层时将其合并。
刘易斯

Answers:


1

属性到拓扑的映射不是直接的。的关系是这样的一个节点:

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

因此,您的select语句将更像这样:

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)
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.