• 用超图实现城市给水的爆管分析


        
          城市管网规模宏大,由于其涉及的空间数据复杂,特别需要一个专门的地理信息系统对其进行管理,我由于毕业设计的需要,有幸对城市的给排水做了一些较深入的了解,经过一段时间的学习和摸索我大致完成了给水行业中爆管分析的一个最优关阀门方案。

          假如从单纯的数据模型的角度考虑的话,我们都知道要能找到一个网络中的关阀门方案,首先应该将整个网络看成是一个连通的图,并对其的所有节点构建邻接矩阵,然后根据广度优先搜索,找出符合条件的节点(在这里我们找的是阀门)。最后一步是要确定最终要关闭的阀门集合,怎样确定最终要关闭的阀门的集合呢?我的思路是对找到后的每个顶点都进行找水源运算,如果能找到水源就说明该阀门是必须要关闭的。

     而我们结合SuperMap去考虑的时候,构建邻接矩阵,可以完全不要我们自己考虑,我们可以利用SuperMap中的网络数据集。它可以自动生成邻接矩阵,并建立好点和线之间的拓扑关系,这大大地节省了查找时间,提高了查找效率,我们只需要在它的数据表里面输入我们要的属性数据即可。而在进行查找的时候,soNetworkAnalyst 对象可以帮我们做很多事情,利用
    FindAdjacentNodes 方法我们可以查找与网络数据集中指定节点直接相连的所有节点。我们只需要判断循环条件,利用一个队列即可以找到初步要关闭的阀门集合。对于怎样找到一个最优的关阀方案,我最后发现可以把我们搜索过的阀门集合中的线段全部设置为网络障碍边,然后再对里面的每个阀门进行路径分析,如果能找到得到一条路径,即说明他们之间有通路,也就是表明了有水源流通,即该阀门是必须要关闭的。这里主要用到的是soNetworkAnalystEx 对象,通过此对像可以设置其网络障碍点,障碍边等。


    下面说明下主要用到的方法和对象:队列(进队列,出队列,判断是否为空),图的广度优先搜索,soNetworkAnalystEx 对象(AddBarrierEdges (),Path ()),soNetworkAnalyst 对象(FindAdjacentNodes (),FindConnectedEdges )

  • 相关阅读:
    C++总结
    KMP算法
    理解I/O Completion Port(完成端口)
    [转载]Windows网络编程系列教程之四:Select模型
    [转载]理解 I/O Completion Port (IOCP完成端口)
    [转载]IOCP模型的总结
    发个IOCP的C++例子
    说说网络通信模型
    几个网络模型的示例代码(BlockingModel、OverlappedModel、WSAEventSelect、CompletionRoutine)..c++
    关于Socket 多线程 的一篇好文章
  • 原文地址:https://www.cnblogs.com/hanchan/p/734293.html
Copyright © 2020-2023  润新知