如何处理地下管线数据
一、 使用背景
如今三维GIS越来越受到大家的关注,也越来越多的使用在GIS的项目中。三维地下管线就是一个重要的使用方面。而大家拿到的数据往往是简单的管点数据和管线数据,因为管线的接头处与管点是有对应关系的,并不能简单的直接进行显示,在SuperMap Objects .NET的范例代码中为大家提供了三维管线的范例代码,如何可以让已有的数据通过范例代码进行显示呢?下面就为大家介绍如何处理已有的数据,将其可以通过范例代码来显示。
*注:范例代码针对普遍的管线数据,但由于项目的具体数据不同,具体情况需要具体对待。
二、 准备工作
SuperMap Objects .NET,SuperMap iDesktop ,
管点,管线数据。
SuperMap Objects .NET 范例代码:Symbol3DDisplay
三、 数据处理
1. 导入数据集
通常项目中拿到的数据是CAD的数据,需要以简单的数据形式导入到数据源中,如果已经导入,则不需要这一步,操作见图一
2. 创建网络数据集
使用SuperMap iDesktop ,将已有的管线和管点数据创建网络数据集,需要保存点/线的数据集的全部字段,创建时需要用管点打断线,而不可以线线自动打断,因为是二维的线,看起来相交的线可能在空间中并不相交。如图二:
图二 创建网络数据集
创建的网络数据集由线/点两部分组成,线数据会产生两个字段,SmFnode,SmTNode这两个字段,分别与线两端点的SmNodeID相对应,体现了网络数据集点和线的拓扑关系。
3. 保存属性字段值
最终进行显示的是管点数据集和管线数据集,网络数据集只是为了获得点线之间的拓扑关系,因此,还需要经网络数据集转成点数据集和线数据集。转换得到的线数据集需要保留网络线数据的SmFnode,SmTNode,点数据集需要保留网络点数据的SmNodeID。默认的网络数据集转点/线数据集无法保留网络数据集的系统字段SmFnode,SmTNode,SmNodeID,因此在转换之前,需要新建字段,将这几个需要保留的系统字段保存在新建的字段中。为了和Symbol3DDisplay 代码中的字段名同一,需要将SmFnode字段保存在新建的FNode字段中,SmTNode保存在ENode字段中,SmNodeID保存在PtID字段中。具体的字段可以根据项目修改,但需要改动代码中相应的位置。如图三,图四。
4. 网络数据集转点/线数据集
保存了属性后的数据可以直接换成点/线数据集,数据集中默认保存网络数据集的全部非系统字段。如图五。
5. 转换为三维数据集
因为管线大多是有自身的高程值,按照每根管线不同的高度值进行显示,因此需要将二维的点线转换成三维的数据,转换是需要指定转换的高程字段值。见图六。
如此处理,即可得到最终的管点/管线数据,但如要在Symbol3DDisplay范例代码中进行显示,仍需要修改具体的数据集名,调整显示的风格,以达到要求。显示效果如下图。
*注意:
最终显示的数据是经过网络数据集转换而得的具有拓扑关系的点/线数据集。转换后的点数据集中每一个点都有一个唯一的PtID与之对应,线数据集则都有FNode,ENode两个字段,且这两个值都与线两端点对象的PtID相对应。因此,处理完成的点线数据集不可做添加,删除,编辑等操作,否则会导致显示效果有误。