我正在尝试使用PostGIS执行基本的类型分析。我的目标是找到所有与其他多边形接触的多边形。为此,我认为ST_GetFaceEdges
可以工作(参考)。我想检查数据库中的每个多边形,并列出所有与之接触的其他多边形。在下面的图像中,我希望结果表示两个多边形(即建筑物)接触一栋建筑物,而其他四个的结果表明它们接触0个多边形。
但是,我在理解该怎么做方面有些困难。当我尝试复制示例时,其中有一些我不理解的部分。
-- Returns the sequence, edge id
-- , and geometry of the edges that bound face 1
-- If you just need geom and seq, can use ST_GetFaceGeometry
SELECT t.seq, t.edge, geom
FROM topology.ST_GetFaceEdges('tt',1) As t(seq,edge)
INNER JOIN tt.edge AS e ON abs(t.edge) = e.edge_id;
我不确定topology
是表,列还是函数的一部分的名称。我以为是桌子,但我不确定。
-- try out on sample of data
-- Table is called 'TestArea', column used is 'fid_1'
SELECT t.seq, t.edge, geom
FROM TestArea.ST_GetFaceEdges('fid_1', 1) As t(seq,edge)
INNER JOIN tt.edge AS e ON abs(t.edge) = e.edge_id;
我也不确定内部联接的功能是什么-将结果联接到原始对象吗?
这是否意味着我需要
—
djq 2011年
AddTopoGeometryColumn
在运行查询之前向表中添加一个?基于ST_Touches
这些值的结果,我进行了检查,但这都是偶然的。
您不仅需要致电
—
MerseyViking 2011年
AddTopoGeometryColumn
,而且您的数据还需要以拓扑一致的方式进行数字化。例如,传统上,您将两个半独立式房屋数字化为两个多边形,并在GIS中使用“捕捉顶点”来确保共享的墙碰触,但是它将存储为两条重合线,每条重合线的两端都有重合点。但是从拓扑上数字化它们意味着共享的墙实际上只是一条线和每个多边形共享的两个节点。ST_Touches
只是对空间进行紧密性检查,而不是拓扑检查。
CreateTopology
(bit.ly/oLk8QY),但是您的建筑物数字化的方式对我而言就像它们的边缘在视觉上是紧密的一样,在拓扑上却截然不同。只是一些供将来的提问者注意的事情。