GIS管道流向分析

2023-10-20 06:20
文章标签 分析 管道 gis 流向

本文主要是介绍GIS管道流向分析,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

一、开发思路

    1.设置起点,和水管路线。

     2.从起点开始分级遍历树结构管线,如果形成回路的判断上一级最短的路线作为流向连接点。

二、详细代码

   private List<IPolyline> lis;
    private void 流向ToolStripMenuItem_Click(object sender, EventArgs e)
    {
        IFeatureLayer playerS = getLayer("b") as IFeatureLayer;
        IFeatureLayer gx = getLayer("a") as IFeatureLayer;
        IPoint pointS = playerS.FeatureClass.GetFeature(1).Shape as IPoint;

        //获取所有线
         lis = new List<IPolyline>();   
        IFeatureCursor pFC = gx.Search(null, false);
        IFeature pfeature = pFC.NextFeature();
        while (pfeature != null)
        {
            IPolyline pline = pfeature.Shape as IPolyline;
            lis.Add(pline);
            pfeature = pFC.NextFeature();
        }

        drawLine(pointS);
    
      
    }
    private void drawLine(IPoint pointS)
    {
        List<IPolyline> lisLine = queryLine(pointS, lis);//查点相交线
        MoveList(lisLine, pointS);//移除回路线
        
        List<Dictionary<IPolyline, IPoint>> lisPoint = new List<Dictionary<IPolyline, IPoint>>();

        foreach (IPolyline item in lisLine)
        {
            Dictionary<IPolyline, IPoint> endPointLine = drawArrow(item, pointS);//开始箭头
            lisPoint.Add(endPointLine);
       

        }
 

        foreach (IPolyline item in lisLine)
        {
            Dictionary<IPolyline, IPoint> endPointLine = drawArrow(item, pointS);//开始箭头
            lisPoint.Add(endPointLine);
            if (lis.Count > 0)
            {
                foreach (KeyValuePair<IPolyline, IPoint> item1 in endPointLine)
                {
                    drawLine(item1.Value);
                }
              
            }
        
        }

        
    }
        //查询点相交线
    private List<IPolyline> queryLine(IPoint pointS, List<IPolyline> lisLine)
    {
        List<IPolyline> lisP = new List<IPolyline>();
        IRelationalOperator pRela = pointS as IRelationalOperator;
        foreach (IPolyline item in lis)
        {
            bool isJont = pRela.Disjoint(item);
            if (!isJont)
            {
                lisP.Add(item);
            }
        }
        return lisP;
    }
        //画箭头返回未点
    private Dictionary<IPolyline, IPoint> drawArrow(IPolyline pline, IPoint interPoint)
    {
        netAnalysic pnet = new netAnalysic();
        IPoint point;
        Dictionary<IPolyline, IPoint> dic = new Dictionary<IPolyline, IPoint>();
        if (pline.FromPoint.X == interPoint.X && pline.FromPoint.Y == interPoint.Y)
        {
            pnet.DrawArrowElementForEdgeElement(pline, axMapControl1.Map);
            point = pline.ToPoint;
         
        }
        else
        {
            IPolyline pline1 = new PolylineClass();
            pline1.ToPoint = pline.FromPoint;
            pline1.FromPoint = pline.ToPoint;
            pnet.DrawArrowElementForEdgeElement(pline1, axMapControl1.Map);
            point = pline.FromPoint;
        }
        lis.Remove(pline);
        dic.Add(pline, point);
        return dic;
    }

  //判断中间回路线
    private void MoveList(List<IPolyline> lisLine, IPoint interPoint)
    { 
        netAnalysic pnet = new netAnalysic();
        foreach (IPolyline pline in lisLine)
        {
            IPoint startPoint = null;
            if (pline.FromPoint.X == interPoint.X && pline.FromPoint.Y == interPoint.Y)
            {
                startPoint = pline.ToPoint;

            }
            else
            {
                startPoint = pline.FromPoint;
            }
            foreach (IPolyline pline1 in lisLine)
            {
                if (pline != pline1)
                {
                    IPoint endPoint = null;
                    if (pline1.FromPoint.X == interPoint.X && pline1.FromPoint.Y == interPoint.Y)
                    {
                        endPoint = pline1.ToPoint;

                    }
                    else
                    {
                        endPoint = pline1.FromPoint;
                    }
                    IPolyline pline2 = new PolylineClass();
                    pline2.FromPoint = startPoint;
                    pline2.ToPoint = endPoint;

                    IPolyline pline3 = new PolylineClass();
                    pline3.FromPoint = endPoint;
                    pline3.ToPoint = startPoint;
                    IPolyline remoLine = null;
                    foreach (IPolyline itemLine in lis)
                    {
                        if (itemLine.FromPoint.X == startPoint.X && itemLine.FromPoint.Y == startPoint.Y && itemLine.ToPoint.X == endPoint.X && itemLine.ToPoint.Y == endPoint.Y)
                        {
                            if (pline.Length < pline1.Length)
                            {
                                pnet.DrawArrowElementForEdgeElement(pline2, axMapControl1.Map);
                            }
                            else
                            {
                                pnet.DrawArrowElementForEdgeElement(pline3, axMapControl1.Map);
                            }
                            remoLine = itemLine;
                        }
                        if (itemLine.ToPoint.X == startPoint.X && itemLine.ToPoint.Y == startPoint.Y && itemLine.FromPoint.X == endPoint.X && itemLine.FromPoint.Y == endPoint.Y)
                        {
                            if (pline.Length < pline1.Length)
                            {
                                pnet.DrawArrowElementForEdgeElement(pline2, axMapControl1.Map);
                            }
                            else
                            {
                                pnet.DrawArrowElementForEdgeElement(pline3, axMapControl1.Map);
                            }
                            remoLine = itemLine;
                         
                        }
                    }
                    if (remoLine != null)
                    {
                           lis.Remove(remoLine);
                    }
                }
             
            }
        }
     
    }

三、结果展示

交流联系qq:875782548

这篇关于GIS管道流向分析的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!


原文地址:https://blog.csdn.net/huangguo1688/article/details/106528449
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.chinasem.cn/article/245250

相关文章

Linux中的more 和 less区别对比分析

《Linux中的more和less区别对比分析》在Linux/Unix系统中,more和less都是用于分页查看文本文件的命令,但less是more的增强版,功能更强大,:本文主要介绍Linu... 目录1. 基础功能对比2. 常用操作对比less 的操作3. 实际使用示例4. 为什么推荐 less?5.

spring-gateway filters添加自定义过滤器实现流程分析(可插拔)

《spring-gatewayfilters添加自定义过滤器实现流程分析(可插拔)》:本文主要介绍spring-gatewayfilters添加自定义过滤器实现流程分析(可插拔),本文通过实例图... 目录需求背景需求拆解设计流程及作用域逻辑处理代码逻辑需求背景公司要求,通过公司网络代理访问的请求需要做请

Java集成Onlyoffice的示例代码及场景分析

《Java集成Onlyoffice的示例代码及场景分析》:本文主要介绍Java集成Onlyoffice的示例代码及场景分析,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要... 需求场景:实现文档的在线编辑,团队协作总结:两个接口 + 前端页面 + 配置项接口1:一个接口,将o

IDEA下"File is read-only"可能原因分析及"找不到或无法加载主类"的问题

《IDEA下Fileisread-only可能原因分析及找不到或无法加载主类的问题》:本文主要介绍IDEA下Fileisread-only可能原因分析及找不到或无法加载主类的问题,具有很好的参... 目录1.File is read-only”可能原因2.“找不到或无法加载主类”问题的解决总结1.File

Dubbo之SPI机制的实现原理和优势分析

《Dubbo之SPI机制的实现原理和优势分析》:本文主要介绍Dubbo之SPI机制的实现原理和优势,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录Dubbo中SPI机制的实现原理和优势JDK 中的 SPI 机制解析Dubbo 中的 SPI 机制解析总结Dubbo中

C#继承之里氏替换原则分析

《C#继承之里氏替换原则分析》:本文主要介绍C#继承之里氏替换原则,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录C#里氏替换原则一.概念二.语法表现三.类型检查与转换总结C#里氏替换原则一.概念里氏替换原则是面向对象设计的基本原则之一:核心思想:所有引py

基于Go语言实现Base62编码的三种方式以及对比分析

《基于Go语言实现Base62编码的三种方式以及对比分析》Base62编码是一种在字符编码中使用62个字符的编码方式,在计算机科学中,,Go语言是一种静态类型、编译型语言,它由Google开发并开源,... 目录一、标准库现状与解决方案1. 标准库对比表2. 解决方案完整实现代码(含边界处理)二、关键实现细

PostgreSQL 序列(Sequence) 与 Oracle 序列对比差异分析

《PostgreSQL序列(Sequence)与Oracle序列对比差异分析》PostgreSQL和Oracle都提供了序列(Sequence)功能,但在实现细节和使用方式上存在一些重要差异,... 目录PostgreSQL 序列(Sequence) 与 oracle 序列对比一 基本语法对比1.1 创建序

慢sql提前分析预警和动态sql替换-Mybatis-SQL

《慢sql提前分析预警和动态sql替换-Mybatis-SQL》为防止慢SQL问题而开发的MyBatis组件,该组件能够在开发、测试阶段自动分析SQL语句,并在出现慢SQL问题时通过Ducc配置实现动... 目录背景解决思路开源方案调研设计方案详细设计使用方法1、引入依赖jar包2、配置组件XML3、核心配

Java NoClassDefFoundError运行时错误分析解决

《JavaNoClassDefFoundError运行时错误分析解决》在Java开发中,NoClassDefFoundError是一种常见的运行时错误,它通常表明Java虚拟机在尝试加载一个类时未能... 目录前言一、问题分析二、报错原因三、解决思路检查类路径配置检查依赖库检查类文件调试类加载器问题四、常见