遍历axMapControl选择要素

2人阅读 评论(0) 收藏 举报
分类:
        private void button1_Click(object sender, EventArgs e)
        {
            if (axMapControl_UseLayer.LayerCount < 1)
            {
                MessageBox.Show("请选择裁剪图层");
                return;
            }
            IEnvelope envelop1 = map.FullExtent;


            IFeatureCursor featureCursor = GetSelectedFeature((axMapControl_UseLayer.get_Layer(0) as IFeatureLayer));
            if (featureCursor == null)
            {
                featureCursor = (axMapControl_UseLayer.get_Layer(0) as IFeatureLayer).FeatureClass.Search(null, false);
            }
            IGeometry area = null;//区域
            List<IPolygon> polygons = new List<IPolygon>();
            if (featureCursor != null)
            {
                IFeature feature = featureCursor.NextFeature();
                while (feature != null)
                {
                    IPolygon p = feature.Shape as IPolygon;
                    p.Project(axMapControl_UseLayer.SpatialReference);
                    polygons.Add(p);
                    feature = featureCursor.NextFeature();
                }
                area = UnionPolygon(polygons.ToArray());
                map.Map.ClipGeometry = area;


                //axmapcontrol中显示合并图层的大小
                double xmin = map.Map.ClipGeometry.Envelope.XMin - 0.36;
                double ymin = map.Map.ClipGeometry.Envelope.YMin - 0.36;
                double xmax = map.Map.ClipGeometry.Envelope.XMax + 0.36;
                double ymax = map.Map.ClipGeometry.Envelope.YMax + 0.36;
                envelop1.PutCoords(xmin, ymin, xmax, ymax);
            }


            map.Map.ClipGeometry = area;
            ((IMapClipOptions)map.Map).ClipType = esriMapClipType.esriMapClipShape;
            ISymbolBorder border = new SymbolBorderClass();
            ILineSymbol lineSymbol = border.LineSymbol;
            lineSymbol.Color = GetIColor(255, 0, 0);
            border.LineSymbol = lineSymbol;


            ((IMapClipOptions)map.Map).ClipBorder = border;
            map.Extent = envelop1;
            this.Close();

        }

        private IFeatureCursor GetSelectedFeature(IFeatureLayer featureLayer)//获取当前地图选中的要素
        {
            try
            {
                if (featureLayer == null) return null;


                IFeatureSelection pFeatSel = (IFeatureSelection)featureLayer;
                ISelectionSet pSelectionSet = pFeatSel.SelectionSet;


                if (pSelectionSet.Count == 0)
                {
                    return null;
                }
                ICursor pCursor;
                pSelectionSet.Search(null, false, out pCursor);
                return (IFeatureCursor)pCursor;
            }
            catch (Exception ex)
            {
                MessageBox.Show("选择要素失败!", "警告");
                return null;
            }

        }

         private IPolygon UnionPolygon(IPolygon[] polygons)//合并面
        {
            if (polygons.Length == 0)
            {
                return null;
            }
            IPolygon result = polygons[0];
            ITopologicalOperator2 topo = result as ITopologicalOperator2;
            for (int i = 1; i < polygons.Length; i++)
            {
                topo.IsKnownSimple_2 = false;
                topo.Simplify();
                result.SnapToSpatialReference();


                ITopologicalOperator2 t2 = polygons[i] as ITopologicalOperator2;
                t2.IsKnownSimple_2 = false;
                t2.Simplify();
                polygons[i].SnapToSpatialReference();


                result = topo.Union(polygons[i]) as IPolygon;
                topo = result as ITopologicalOperator2;
            }
            return result;
        }

查看评论

在类中调用axmapcontrol的属性进行一些编程

在网上找了好久还是没找到一个像样的说法,我把我自己的办法贴出来供大家参考 1、将Axmapcontrol的属性Modifier设置为public,使其成为全局变量 2、在类中填写构造函数,将axm...
  • zhangxueye123
  • zhangxueye123
  • 2013年03月30日 15:11
  • 980

C#+ArcGIS Engine 获取地图中选中的要素

C#+ArcGIS Engine 获取地图中选中的要素 提供一种简单遍历获取地图中选中要素的方法,代码如下:List pList = new List();//用于存储选中的要素 IEnumFeat...
  • jhoneyan
  • jhoneyan
  • 2016年09月08日 16:55
  • 929

在各个图层中查找选择的要素

面是在各个图层中查找选择的要素,你可以只在你要的图层里找,下面是例子的代码Public Sub QuerySelectedFeatures()  Dim pMxDoc As IMxDocument  ...
  • mydriverc
  • mydriverc
  • 2007年07月03日 17:41
  • 638

C#+AE(ArcEngine)二次开发:通过点击选择面状要素并计算其面积

将代码写在Mapcontrol的OnMouseDown事件中,具体代码如下:        private void axMapControl1_OnMouseDown(object sender, ...
  • xiepeng0305
  • xiepeng0305
  • 2017年12月27日 14:13
  • 173

ArcEngine选择要素闪烁,Mapcontrol刷新并取消闪烁

SelectFeature实现BaseTool接口 重新OnMouseDown方法 if(Button.ToString().Equals("1")) //判断是否右键 1左击 2...
  • mar_ljh
  • mar_ljh
  • 2015年05月19日 16:09
  • 1041

在AxTOCControl控件中组织AxMapControl控件中的图层

一、环境ArcGIS10.2、VS2010 、win7 32位 二、读取Person GeoDatabase中要素集下的所有要素类,并添加到AxMapControl控件中。 这步完成,在AxTOC...
  • u012488787
  • u012488787
  • 2014年09月03日 15:54
  • 1639

ArcEngine在AxMapControl上绘制

在AxmapControl上绘制点(point)线(line,polyline)都是比较方便的,函数如下: /// /// 在地图控件上绘制点或线 /...
  • u011609113
  • u011609113
  • 2016年05月08日 21:58
  • 987

AE开发----获取地图上当前选中的要素

// 获取地图上当前选中的要素(一)             int selCount = axMapControl1.Map.SelectionCount;             IEnumFea...
  • qq_35040828
  • qq_35040828
  • 2017年06月21日 14:13
  • 598

关于IFeatureSelection的SelectFeatures方法

最近做项目时用到IFeatureLayer as IFeatureSelection,然后使用IFeatureSelection.SelectFeatures方法,但是得到的IFeatureSelec...
  • sx341125
  • sx341125
  • 2015年08月16日 13:11
  • 1117

Arcpy基础入门-6、遍历

1、列出所有的要素类 import arcpy arcpy.env.workspace = "D:\用户目录\Documents\ArcGIS\可达性分析成果.gdb" # Use Python'...
  • sprintwater
  • sprintwater
  • 2014年05月09日 20:50
  • 4993
    个人资料
    持之以恒
    等级:
    访问量: 8319
    积分: 695
    排名: 7万+
    文章存档
    最新评论