DotSpatial 要素合并

private void toolStripButton45_Click(object sender, EventArgs e)
        {
            //存在Bug,合并丢失现象
            if (mapMain.Layers.Count == 0)
            {
                return;
            }
            //查看与选中要素重叠的要素
            PolygonLayer pLayer = Lzq_LayerManager.getLayerByName(layerNamePolygon, mapMain) as PolygonLayer;
            if (pLayer == null)
            {
                MessageBox.Show(@"未找到具体图层:" + layerNamePolygon, @"系统提示", MessageBoxButtons.OK, MessageBoxIcon.Error);
                return;
            }

            FeatureSet fs = null;
            fs = (FeatureSet)pLayer.DataSet; ;
            if (pLayer.Selection.Count <2)
            {
                MessageBox.Show(@"图层至少要选中两个要素:" + pLayer.Selection.Count, @"系统提示", MessageBoxButtons.OK, MessageBoxIcon.Error);
                return;
            }

            //防止有合并后有悬挂线,先将面图元进行正值缓冲,合并后,将图元负值缓冲

            double buffer = 0.001; //容差
            ////获取第一个被选中要素
            IFeature pFeature = (Feature)pLayer.Selection.ToFeatureList()[0];
            NetTopologySuite.Geometries.Geometry gm1 = (NetTopologySuite.Geometries.Geometry)pFeature.Geometry;
            Geometry g1 = (Geometry)pFeature.Geometry.Clone();
            Geometry g1Buff = (Geometry)g1.Buffer(buffer);

            //遍历选择级,找到重叠要素
            for (int j = 1; j < pLayer.Selection.Count; j++)
            {
                IFeature pFeature2 = (Feature)pLayer.Selection.ToFeatureList()[j];
                Geometry gm2 = (Geometry)pFeature2.Geometry.Clone();
                CoordinateArrays.RemoveRepeatedPoints(gm2.Coordinates);
                Geometry gm2Buff = (Geometry)gm2.Buffer(buffer);
                Geometry p = (Geometry)g1Buff.Union(gm2Buff);
                Console.WriteLine(p.IsSimple.ToString());
                if (p.IsSimple)
                {
                    CoordinateArrays.RemoveRepeatedPoints(p.Coordinates);
                    p.Normalize();
                    pFeature.Geometry = p.Buffer(-1 * buffer);
                    fs.Features.Remove(pFeature2);
                    ClassBase.IndexError(pLayer, mapMain);
                }
            }
            fs.Save();
        }

        public static void IndexError(DotSpatial.Symbology.IFeatureLayer fLayer, DotSpatial.Controls.Map _map)
        {
            fLayer.DataSet.UpdateExtent();
            fLayer.DataSet.InitializeVertices();
            if (fLayer.LabelLayer != null)
            {
                fLayer.LabelLayer.CreateLabels();
            }

            fLayer.AssignFastDrawnStates();

            if (_map != null)
            {
                _map.Refresh();
                _map.ResetBuffer();
            }
        }

        public static Layer getLayerByName(string layerName, Map mainMap)
        {
            Layer layer = null;
            foreach (FeatureLayer featureLayer in mainMap.Layers)
            {
                if (featureLayer.Name == layerName)
                {
                    layer = featureLayer;
                }
            }
            return layer;
        }

  选中两个以上元素,只能合并两个,目前没解决此处bug,应该是

ClassBase.IndexError(pLayer, mapMain);操作后将selection 清空导致,有研究过的帮忙 解答一下,谢谢!

原文地址:https://www.cnblogs.com/kogame/p/12503582.html

时间: 2024-10-10 17:24:16

DotSpatial 要素合并的相关文章

Dotspatial 要素重叠部分去除

private void toolStripButton32_Click(object sender, EventArgs e) { /重叠部分去除操作--测试成功 if (mapMain.Layers.Count == 0) { return; } //重叠分析 //遍历要素,显示面积 FeatureSet fs = null; fs = Lzq_LayerManager.getFeatureSetByName(layerNamePolygon, mapMain); if (fs.Featur

ArcEngine环境下合并断开的线要素(根据属性)

1.遇到的问题: 最近遇到在线要素(矢量数据)中,一条完整的道路.河流等往往是断开的,如下图1所示: 2.思路: 在ArcGIS Desktop中没有相关的工具可以将这些断开的线要素进行自动合并,今天自己写了一个Arcmap上的一个插件,实现当点击插件按钮后,对地图窗口中断开的线要素进行合并.合并的依据是具有相同NAME属性(如长沙-张家界高速)的Polyline要素进行合并,然后存储在另一个线要素图层中.  3.程序的实现和结果: 程序运行的结果如下,这样本来属于同一段道路的多个Polylin

ArcGIS for Desktop入门教程_第七章_使用ArcGIS进行空间分析 - ArcGIS知乎-新一代ArcGIS问答社区

原文:ArcGIS for Desktop入门教程_第七章_使用ArcGIS进行空间分析 - ArcGIS知乎-新一代ArcGIS问答社区 1 使用ArcGIS进行空间分析 1.1 GIS分析基础 GIS的六大功能是数据获取.存储.查询.分析.表达.输出.在前面的内容里已经介绍了使用ArcGIS进行数据获取.存储.查询.表达和输出的过程,本章将介绍如何在ArcGIS中进行地理分析.分析是GIS的核心和灵魂,是GIS区别于一般的信息系统.CAD或者电子地图系统的主要标志之一. GIS分析,就是研究

ArcGIS空间分析工具

1. 3D分析 1.1. 3D Features toolset 工具 工具 描述 3D Features toolset (3D 要素工具集) Add Z Information 添加 Z 信息 添加关于具有 Z 值的要素类中的要素的高程属性的信息. Buffer 3D 3D 缓冲 围绕点或线创建三维缓冲区以生成球形或圆柱形的多面体要素. Difference 3D 3D 差异 消除目标要素类中部分与减法要素类中闭合的多面体要素体积重叠的多面体要素. Enclose Multipatch 封闭

How to 做好产品迭代分析

“ 做过这么多产品迭代分析,却依然找不到合适的方式表达.” 产品迭代分析对于交互设计师可以说是家常便饭了,隔壁的某某有了新功能,某某家的谁又更新了个大版本,都需要时时保持关注.但是,每当小珏吭哧吭哧的收集完一大堆资料后,又开始犯愁了:分析从何开始?分析的重点是什么?分析以何种组织形式输出? 被这些问题蹂躏了数遍后,在求(xian)知(ma)欲(fan)的驱使下,小珏开始思考:对于产品迭代,有没有一种高效的,易推倒操作的分析方法?于是在此之后,每次小珏都带着这个问题去分析,分析得多了,也渐渐总结出

Arcengine 基本操作(待更新)

/// <summary> /// 删除fieldName属性值为1的弧段 /// </summary> /// <param name="fieldName"></param> /// <param name="t"></param> public void DelectPolyline(string fieldName, int t) { ILayer pLayer = axMapContr

【309】?? Windows 相关功能实现

目录: 共享文件夹失败的解决方法 导 栅 添 1. 共享文件夹失败的解决方法 参考:解决“你没有权限访问,请与网络管理员联系” 参考:WIN7局域网文件共享设置方法 2. 导 在 3. 栅 栅 4. 添 A 5. 同一图层的多个要素合并 6. 同一图层的多个要素合并 7. 同一图层的多个要素合并 8. 同一图层的多个要素合并 9. 同一图层的多个要素合并 10. 同一图层的多个要素合并 11. 同一图层的多个要素合并 12. 同一图层的多个要素合并 13. 同一图层的多个要素合并 14. 同一图

Dotspatial 空间要素选择

//通过遍历选择要素,获取选择要素相交的要素 private void toolStripButton43_Click(object sender, EventArgs e) { //查看与选中要素重叠的要素 if (map1.Layers.Count == 0) { return; } //重叠分析 //遍历要素,显示面积 PolygonLayer pLayer = map1.Layers[0] as PolygonLayer; FeatureSet fs = null; fs = (Feat

ArcGIS中各种合并要素(Union、Merge、Append、Dissolve)的异同点分析 转载

异同点:merge.union.append均为合并,开始,过程,结果,有什么不同?merge和union一般来说是对要素类中的“要素”来说的,也就是说,对某一部分要素进行操作.merge 是对同一个要素类中的要素的操作,操作完成后原来的要素消失.union 则灵活一些,可以对不同图层的要素进行操作,新生要素在目标图层中产生append 一般拿来用于将多个要素类合并.比如将两个省的数据合并到一个要素类中.