Arcgis Engine 切割图斑(ITool)

        public override void OnMouseDown(int Button, int Shift, int X, int Y)
        {
            // TODO:  Add Cut.OnMouseDown implementation
            if(Button==1)//左键按下
            {
                //拿到hook
                IMapControl3 pMapControlx = (IMapControl3)m_hookHelper.Hook;

                IFeatureLayer pFeatureLayer = pMapControlx.get_Layer(0) as IFeatureLayer;

                //划线
                IGeometry pline = (IGeometry)pMapControlx.TrackLine();

                //拿到划线范围内的所有feature
                IGeometry pGeometry = pline as IGeometry;
                IMap pMap = pMapControlx.Map;
                pMap.SelectByShape(pGeometry, null, false);
                //转成IRealtionOperator接口,以便在遍历时判断几何位置关系。
                IRelationalOperator rela = (pline as IPolyline) as IRelationalOperator;

                //拿到切割目标集合
                IEnumFeature pEnumFeature = (IEnumFeature)pMap.FeatureSelection;
                IFeature pFeature = pEnumFeature.Next();
                //依次遍历
                while (pFeature != null)
                {

                    if(rela.Crosses(pFeature.Shape))//判断是否Cross
                    {
                        try
                        {
                            //把面转成ITopologicalOperator,使用Cut函数
                            ITopologicalOperator topo = (pFeature.Shape as IPolygon) as ITopologicalOperator;

                            //新建两个面,作为切割函数的参数,切割后的两个对象保存于这两个面之中
                            IGeometry pLeftGeometry = new PolygonClass();
                            IGeometry pRightGeometry = new PolygonClass();
                            topo.Cut((pline as IPolyline), out pLeftGeometry, out pRightGeometry);

                            //由FeatureClass新建Feature
                            IFeature pFeatureLeft = pFeatureLayer.FeatureClass.CreateFeature();
                            IFeature pFeatureRight = pFeatureLayer.FeatureClass.CreateFeature();

                            //保存
                            pFeatureLeft.Shape = pLeftGeometry;
                            pFeatureRight.Shape = pRightGeometry;
                            pFeatureLeft.Store();
                            pFeatureRight.Store();

                            //删除
                            pFeature.Delete();

                        }
                        catch
                        { 

                        }
                    }

                    pFeature = pEnumFeature.Next();
                }

                //清除选择
                IFeatureSelection pFeatureSelectionClear= pMapControlx.get_Layer(0) as IFeatureSelection;
                pFeatureSelectionClear.Clear();

                pMapControlx.Refresh();
            }
        }

  

时间: 2024-11-13 06:45:45

Arcgis Engine 切割图斑(ITool)的相关文章

利用ArcGIS Engine、VS .NET和Windows控件开发GIS应用

原文:利用ArcGIS Engine.VS .NET和Windows控件开发GIS应用 此过程说明适合那些使用.NET建立和部署应用的开发者,它描述了使用ArcGIS控件建立和部署应用的方法和步骤. 你可以在下面的目录下找到相应的样例程序: <安装目录>\DeveloperKit\Samples\Developer_Guide_Scenarios\ ArcGIS_Engine\Building_an_ArcGIS_Control_Application\Map_Viewer 注:ArcGIS样

ArcGIS Engine开发前基础知识(1)

ArcGIS二次开发是当前gis领域的一项重要必不可少的技能.下面介绍它的基本功能 一.ArcGIS Engine功能 在使用之前首先安装和部署arcgis sdk,(在这里不在赘述相关知识)可以实现的功能主要有地图的基本操作.信息查询.专题地图制作.数据编辑.网络分析.空间统计分析.三维分析等. 1.地图的基本操作 地图的基本操作主要包括加载矢量.栅格数据,浏览缩放地图,保存地图,在地图上显示文本注记,绘制点线面几何体等. 2.信息查询 信息查询主要通过矩形圆形或多边形来选中地图上的要素,或者

ArcGIS Engine开发之旅02--ArcGIS Engine中的类库

原文 ArcGIS Engine开发之旅02--ArcGIS Engine中的类库 System类库 System类库是ArcGIS体系结构中最底层的类库.System类库包含给构成ArcGIS的其他类库提供服务的组件.System类库中定义了大量开发者可以实现的接口.AoInitializer对象就是在System类库中定义的,所有的开发者必须使用这个对象来初始化ArcGISEngine和解除ArcGIS Engine的初始化.开发者不能扩展这个类库,但可以通过实现这个类库中包含的接口来扩展A

ArcGIS Engine开发之旅04---ARCGIS接口详细说明

原文 ArcGIS Engine开发之旅04---ARCGIS接口详细说明 ArcGIS接口详细说明... 1 1.IField接口(esriGeoDatabase)... 2 2.IFieldEdit接口(esriGeoDatabase)... 2 3.IFields接口(esriGeoDatabase)... 2 4. IRow接口(esriGeoDatabase)... 3 5. ITable接口(esriGeoDatabase)... 3 6. IArea接口(esriGeometry)

ArcGIS Engine开发之旅03--ArcGIS Engine中的控件

原文 ArcGIS Engine开发之旅03--ArcGIS Engine中的控件 制图控件,如MapControl.PageLayoutControl,其中MapControl控件主要用于地理数据的显示和分析,PageLayoutControl用于生成一幅成品地图.MapControl封装了Map对象,而PageLayoutControl则封装了PageLayout对象.这两个控件都实现了IMxContents接口,因此不仅可以读取ArcMap创建的地图文档,而且可以将自身的地图内容写到一个新

ArcGIS Engine中的重点类库介绍

转自原文ArcGIS Engine中的重点类库介绍 System类库 System类库是ArcGIS体系结构中最底层的类库.System类库包含给构成ArcGIS的其他类库提供服务的组件.System类库中定义了大量开发者可以实现的接口.AoInitializer对象就是在System类库中定义的,所有的开发者必须使用这个对象来初始化ArcGISEngine和解除ArcGIS Engine的初始化.开发者不能扩展这个类库,但可以通过实现这个类库中包含的接口来扩展ArcGIS系统. SystemU

《ArcGIS Engine+C#实例开发教程》第三讲 MapControl与PageLayoutControl同步

原文:<ArcGIS Engine+C#实例开发教程>第三讲 MapControl与PageLayoutControl同步 摘要:在ArcMap中,能够很方面地进行MapView和LayoutView两种视图的切换,而且二者之间的数据是同步显示的.关于两种视图同步的实现方法有多种,可以使用ObjectCopy对象进行数据硬拷贝,而比较简单的方法莫过于二者共享一份地图了,这也是最常用的方法.  教程目录: 第一讲 桌面GIS应用程序框架的建立 第二讲 菜单的添加及其实现 第三讲 MapContr

Arcgis Engine建立一个shp文件

这几天同事要求我在原来的项目的基础上添加一个生成shp文件的小功能,大体内容就是他给我提供文件夹路径名和图斑各个点的坐标(只是一个环),根据这些参数来生成一个shp文件.这个功能在刚来公司的时候实现过一次,但是后面一直没用就给忘记了(所以写的代码一定不要删呀,以后肯定用的着). 下面我贴一下建立shp文件的代码,欢迎大家指点. 1: private void CreateShpFile() 2: { 3: IWorkspaceFactory pWF = new ShapefileWorkspac

Arcgis Engine 10.2安装过程

安装顺序 : VS2010-->Arcgis 10.2-->Arcgis engine 10.2-->ArcObjects SDK for Microsoft.NET Framework. vs2010安装方式略 一.Arcgis10.2安装 选择ArcGIS10.2 解压后的安装包中ESRI.exe文件 第一步安装ArcGIS License Manager (选择合适路径,基本一路回车) 安装好以后,启动License Manager,选择停止 第二步安装ArcGIS for  De