具有Z坐标的PostGIS拓扑

时间:2019-01-08 11:32:09

标签: postgresql postgis

我正在尝试使用具有Z坐标的边来构建PostGIS拓扑。我使用以下命令:

SELECT topology.CreateTopology('test_topo', 2154, 0, true);
SELECT topology.TopoGeo_AddLineString('test_topo', ST_GeomFromEWKT('SRID=2154;LINESTRINGZ(0 0 0, 1 1 0)'), 0);
SELECT topology.TopoGeo_AddLineString('test_topo', ST_GeomFromEWKT('SRID=2154;LINESTRINGZ(0 0.5 0.5, 1 0.5 0.5)'), 0);
SELECT topology.TopoGeo_AddLineString('test_topo', ST_GeomFromEWKT('SRID=2154;LINESTRINGZ(0 1 0, 1 0 0)'), 0);
SELECT topology.TopoGeo_AddLineString('test_topo', ST_GeomFromEWKT('SRID=2154;LINESTRINGZ(0 0.25 1, 1 0.25 1)'), 0);

在那之后,由于第一和第三条线的交叉点以及其他未连接任何东西的线,我期望在(0.5,0.5,0)中有一个新节点。但是实际上我得到了所有2D交叉点的节点,就像PostGIS Topo只是忽略了Z坐标来计算交叉点一样。请参见下图:

result

这是PostGIS拓扑的正常行为还是错误?如果正常,是否可以构建拓扑,使其边缘在2D投影中重叠(即忽略Z坐标)但在3D视图中不相交?

1 个答案:

答案 0 :(得分:0)

经过更多研究,我发现PostGIS拓扑仅支持ISO拓扑几何标准,但不支持ISO拓扑网络(此处的定义:https://www.gaia-gis.it/fossil/libspatialite/wiki?name=topo-intro)。因此,Z坐标仅用于为拓扑添加一些浮雕,而不是实际的3D。因此,以前的行为实际上是正常的,我必须找到另一种方法来获得预期的结果。