我目前正在使用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模式存储了对每个层表的引用,以用于eac h拓扑。

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

评论

我对应该如何利用拓扑也有些迷惑,但这可能会有所帮助。您可以将TopoGeometry直接转换为几何:从layer_tb中选择任何ST_AsText(topogeom :: geometry)。问题是,如果以后再将边缘分开,结果似乎几何形状可能会发生变化。

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

#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)