001824856

主体

  public partial class frmMain : Form

    {

        string flagOnMouseDown = null; //标记onMouseDown事件

        string flagOnMouseMove = null; //标记OnMouseMove事件

        IBasicMap basicMap = null;

        ILayer layer = null;

        System.Object other = null;

        System.Object index = null;

        esriTOCControlItem item = esriTOCControlItem.esriTOCControlItemNone;

        public frmMain()

        {

            InitializeComponent();

        }

        #region 按钮-控件属性演示

        private void btn2Arrow_Click(object sender, EventArgs e)

        {

            // 由axMapControl1控件的对象实现IMapControlDefault接口  

            IMapControlDefault pMapControlDefault = axMapControl1.Object as IMapControlDefault;

            // 设置pMapControlDefault的鼠标指针样式为箭头样式  

            pMapControlDefault.MousePointer = esriControlsMousePointer.esriPointerArrow;

            // 将整数1强制转换为esriControlsMousePointer枚举类型,并设置pMapControlDefault的鼠标指针样式为该枚举值对应的样式  

            //pMapControlDefault.MousePointer = (esriControlsMousePointer)1;

        }

        #endregion

        #region 菜单-文件-加载地图文档

        private void 加载地图文档ToolStripMenuItem_Click(object sender, EventArgs e)

        {

            // 由axMapControl1控件的对象实现IMapControlDefault接口  

            IMapControlDefault pMapControlDefault = axMapControl1.Object as IMapControlDefault;

            // 初始化一个空字符串变量,用于存储文件路径  

            var filePath = string.Empty;

            // 使用OpenFileDialog来打开文件选择对话框  

            using (OpenFileDialog openFileDialog = new OpenFileDialog())

            {

                // 设置对话框的初始目录为C盘根目录  

                //openFileDialog.InitialDirectory = "c:\\";

                // 设置文件选择对话框的标题为“打开地图文档”  

                openFileDialog.Title = "打开地图文档";

                // 设置文件选择对话框的过滤条件,支持多种地图文件格式  

                openFileDialog.Filter = "ArcMap文档(*.mxd)|*.mxd;|ArcMap模板(*.mxt)|*.mxt|发布地图文件(*.pmf)|*.pmf|所有地图格式(*.mxd;*.mxt;*.pmf)|*.mxd;*.mxt;*.pmf";

                // 设置文件选择对话框为单文件选择模式,不允许用户一次选择多个文件  

                openFileDialog.Multiselect = false;

                // 设置默认过滤索引为所有文件  

                openFileDialog.FilterIndex = 1;

                // 如果用户改变了目录,则还原到初始目录  

                openFileDialog.RestoreDirectory = false;

                // 显示文件选择对话框,并等待用户选择文件或取消操作  

                if (openFileDialog.ShowDialog() == DialogResult.OK)

                {

                    // 获取用户选择的文件路径  

                    filePath = openFileDialog.FileName;

                    // 检查给定的文件路径是否是一个有效的地图文档  

                    if (pMapControlDefault.CheckMxFile(filePath))

                    {

                        // 如果文件路径有效,则加载该地图文档  

                        pMapControlDefault.LoadMxFile(filePath);

                    }

                    else

                    {

                        // 如果文件路径无效,则显示一个消息框提示用户该文件是无效的地图文档  

                        MessageBox.Show(filePath + "是无效的地图文档!", "信息提示");

                        // 终止当前方法或函数的执行  

                        return;

                    }

                }

            }

        }

        #endregion

        #region 菜单-文件-添加数据-加载shapefile数据

        private void 加载shapefile数据ToolStripMenuItem_Click(object sender, EventArgs e)

        {

            // 创建一个新的ShapefileWorkspaceFactoryClass实例,用于处理shapefile类型的工作空间  

            IWorkspaceFactory pWorkspaceFactory = new ShapefileWorkspaceFactoryClass();

            // 声明一个IFeatureWorkspace类型的变量,用于表示特征工作空间  

            IFeatureWorkspace pFeatureWorkspace;

            // 声明两个字符串变量,用于存储文件目录和文件名  

            string fileDirectory = "";

            string fileName = "";

            // 创建一个新的FeatureLayerClass实例,但此时它并没有与任何特征类关联  

            IFeatureLayer pFeatureLayer = new FeatureLayerClass();

            // 声明一个IFeatureClass类型的变量,用于表示特征类  

            IFeatureClass pFeatureClass;

            // 创建一个OpenFileDialog实例,用于打开文件对话框  

            OpenFileDialog ofd = new OpenFileDialog();

            // 显示文件对话框,并检查用户是否点击了确定按钮  

            if (ofd.ShowDialog() == DialogResult.OK)

            {

                // 获取用户选择的文件的完整路径  

                string fullPath = ofd.FileName;

                // 检查用户是否确实选择了一个文件(尽管在标准OpenFileDialog中这是不太可能的)  

                if (string.IsNullOrEmpty(fullPath))

                {

                    // 如果文件路径为空,则显示一个消息框并退出函数  

                    MessageBox.Show("文件选取出错!", "提示");

                    return;

                }

                // 查找文件路径中最后一个'\'的位置,用于分割目录和文件名  

                int sIndex = fullPath.LastIndexOf("\\");

                // 提取文件所在的目录  

                fileDirectory = fullPath.Substring(0, sIndex);

                // 提取文件名  

                fileName = fullPath.Substring(sIndex + 1);

            }

            else

            {

                // 如果用户没有点击确定按钮,则直接退出函数  

                return;

            }

            // 使用之前创建的pWorkspaceFactory打开指定的文件目录作为工作空间  

            pFeatureWorkspace = pWorkspaceFactory.OpenFromFile(fileDirectory, 0) as IFeatureWorkspace;

            // 在工作空间中打开用户指定的特征类  

            pFeatureClass = pFeatureWorkspace.OpenFeatureClass(fileName);

            // 将pFeatureLayer与打开的特征类关联  

            pFeatureLayer.FeatureClass = pFeatureClass;

            // 设置pFeatureLayer的名字为特征类的别名  

            pFeatureLayer.Name = pFeatureClass.AliasName;

            // 将pFeatureLayer添加到地图控件的焦点地图中  

            axMapControl1.ActiveView.FocusMap.AddLayer(pFeatureLayer);

            // 设置地图控件的显示范围为用户加载的特征层的范围  

            axMapControl1.ActiveView.Extent = pFeatureLayer.AreaOfInterest;

            // 刷新地图控件以显示新的图层和范围  

            axMapControl1.ActiveView.Refresh();

        }

        #endregion

        #region 菜单-文件-访问图层数据

        private void 访问图层数据ToolStripMenuItem_Click(object sender, EventArgs e)

        {

            // 获取当前ArcMap控件中处于活动视图且为焦点的地图对象  

            // axMapControl1 可能是ArcMap控件的实例  

            // ActiveView 获取当前活动的视图  

            IActiveView pActiveView = axMapControl1.ActiveView;

            // 创建一个新的frmDataBoard窗体实例,并将当前活动的视图pActiveView作为参数传入  

            // frmDataBoard 可能是自定义的窗体,用于展示或操作地图图层数据  

            frmDataBoard dataBoard = new frmDataBoard(pActiveView);

            // 显示frmDataBoard窗体  

            // Show 方法将窗体显示出来  

            dataBoard.Show();

        }

        #endregion

        #region 菜单-地图浏览-全图显示

        private void 全图显示ToolStripMenuItem_Click(object sender, EventArgs e)

        {

            // 声明一个ESRI.ArcGIS.Geometry.IEnvelope类型的变量pEnvelope,用于存储绘制的矩形范围

            ESRI.ArcGIS.Geometry.IEnvelope pEnvelope;

            // 将axMapControl1的FullExtent属性赋值给pEnvelope变量

            // FullExtent属性表示地图控件axMapControl1中所有图层范围的并集,即地图控件的完整范围  

            pEnvelope = axMapControl1.FullExtent;

            // 将axMapControl1的Extent属性设置为pEnvelope,即设置地图的当前显示范围为地图控件的完整范围  

            // Extent属性通常用来表示地图控件当前显示的范围  

            axMapControl1.Extent = pEnvelope;

        }

        #endregion

        #region 菜单-地图浏览-拉框放大

        private void 拉框放大ToolStripMenuItem_Click(object sender, EventArgs e)

        {

            flagOnMouseDown = "LaKuangFangDa";    //flagOnMouseDown值为1时进行“拉框放大”操作

        }

        #endregion

        #region 菜单-地图浏览-逐级放大

        private void 逐级放大ToolStripMenuItem_Click(object sender, EventArgs e)

        {

            // 声明一个IEnvelope类型的变量pEnvelope,用于存储地图控件axMapControl1的当前显示范围  

            IEnvelope pEnvelope;

            // 将axMapControl1的当前显示范围赋值给pEnvelope变量  

            pEnvelope = axMapControl1.Extent;

            // 调用pEnvelope的Expand方法,以0.5为比例因子在X和Y方向上扩展Envelope的大小  

            // 第三个参数true表示扩展是乘性的,即按照比例来扩展  

            pEnvelope.Expand(0.5, 0.5, true);

            // 将扩展后的Envelope范围设置为axMapControl1的当前显示范围  

            axMapControl1.Extent = pEnvelope;

            // 刷新axMapControl1的ActiveView,以显示更新后的地图范围  

            axMapControl1.ActiveView.Refresh();

        }

        #endregion

        #region 菜单-地图浏览-漫游

        private void 漫游ToolStripMenuItem_Click(object sender, EventArgs e)

        {

            // 将全局变量flagOnMouseDown的值设置为"ManYou"  

            // 这是一个标志,用于后续的代码判断应该执行哪种鼠标操作处理逻辑

            flagOnMouseDown = "ManYou";

            // 将axMapControl1的鼠标指针样式设置为平移模式

            // esriControlsMousePointer.esriPointerPan是ESRI ArcGIS库中的鼠标指针样式枚举值,代表平移模式

            axMapControl1.MousePointer = esriControlsMousePointer.esriPointerPan;

        }

        #endregion

        #region 菜单-地图浏览-拉框缩小

        private void 拉框缩小ToolStripMenuItem_Click(object sender, EventArgs e)

        {

            flagOnMouseDown = "LaKuangSuoXiao";

        }

        #endregion

        #region 菜单-书签管理-查看书签列表

        private void toolStripCBXbookmarks_DropDown(object sender, EventArgs e)

        {

            // 清除toolStripCBXbookmarks控件中的所有项

            toolStripCBXbookmarks.Items.Clear();

            // 用axMapControl1的Map对象实现IMapBookmarks接口,并将结果存储在pBookmarks变量中  

            IMapBookmarks pBookmarks = axMapControl1.Map as IMapBookmarks;

            // 从pBookmarks中获取书签的枚举器,并存储在pEnumSpatialBookmark变量中  

            IEnumSpatialBookmark pEnumSpatialBookmark = pBookmarks.Bookmarks;

            // 重置书签枚举器,使其从第一个书签开始  

            pEnumSpatialBookmark.Reset();

            // 获取第一个书签,并存储在pSpatialBookmark变量中  

            ISpatialBookmark pSpatialBookmark = pEnumSpatialBookmark.Next();

            // 当pSpatialBookmark不为null时,即还有书签未处理时,执行循环  

            while (pSpatialBookmark != null)

            {

                // 将当前书签的名称添加到toolStripCBXbookmarks控件的下拉列表中  

                toolStripCBXbookmarks.Items.Add(pSpatialBookmark.Name);

                // 获取下一个书签,并更新pSpatialBookmark变量  

                pSpatialBookmark = pEnumSpatialBookmark.Next();

            }

        }

        #endregion

        #region 菜单-书签管理-书签列表-缩放至书签范围

        private void toolStripCBXbookmarks_SelectedIndexChanged(object sender, EventArgs e)

        {

            // 用axMapControl1的Map对象实现IMapBookmarks接口,并将结果存储在pBookmarks变量中

            IMapBookmarks pBookmarks = axMapControl1.Map as IMapBookmarks;

            // 从pBookmarks中获取书签的枚举器,并存储在pEnumSpatialBookmark变量中

            IEnumSpatialBookmark pEnumSpatialBookmark = pBookmarks.Bookmarks;

            // 获取axMapControl1控件的Map对象,并将其引用赋值给pMap变量  

            IMap pMap = axMapControl1.Map;

            // 重置书签枚举器,使其从第一个书签开始  

            pEnumSpatialBookmark.Reset();

            // 获取第一个书签,并存储在pSpatialBookmark变量中

            ISpatialBookmark pSpatialBookmark = pEnumSpatialBookmark.Next();

            // 当pSpatialBookmark不为null时,即还有书签未处理时,执行循环  

            while (pSpatialBookmark != null)

            {

                // 判断当前选中的书签名称是否与当前遍历到的书签名称相同  

                if (toolStripCBXbookmarks.SelectedItem.ToString() == pSpatialBookmark.Name)

                {

                    // 如果相同,则调用书签的ZoomTo方法,将地图视图定位到该书签所在的位置  

                    pSpatialBookmark.ZoomTo(pMap);

                    // 刷新地图控件的当前视图,以确保更改生效  

                    axMapControl1.ActiveView.Refresh();

                    // 跳出循环,因为已经找到了对应的书签并进行了定位  

                    break;

                }

                // 如果当前书签不是选中的书签,则获取下一个书签,并更新pSpatialBookmark变量  

                pSpatialBookmark = pEnumSpatialBookmark.Next();

            }

        }

        #endregion

        #region 菜单-书签管理-添加书签

        private void 添加书签ToolStripMenuItem_Click(object sender, EventArgs e)

        {

            // 创建一个frmWenBenShuRu类型的新实例,并将其赋值给frmName变量  

            frmWenBenShuRu frmName = new frmWenBenShuRu();

            // 显示frmName窗体,并等待用户关闭它(这是一个模态对话框)  

            frmName.ShowDialog();

            // 检查frmName窗体的Create属性是否为1(表示用户成功创建了书签信息)  

            if (frmName.Create == 1)

            {

                // 创建一个AOIBookmark对象实例,用于存储书签信息  

                AOIBookmark pAOIBookmark = new AOIBookmark();

                // 定义一个ISpatialBookmark类型的变量,用于在循环中遍历书签  

                ISpatialBookmark pSpatialBookmark;

                // 将axMapControl1.Map作为实现IMapBookmarks接口的对象,并赋值给pMapBookmarks变量  

                IMapBookmarks pMapBookmarks = axMapControl1.Map as IMapBookmarks;

                // 获取pMapBookmarks中所有的书签,并赋值给pEnumSpatialBookmark  

                IEnumSpatialBookmark pEnumSpatialBookmark = pMapBookmarks.Bookmarks;

                // 重置pEnumSpatialBookmark枚举器的位置,以便从头开始遍历  

                pEnumSpatialBookmark.Reset();

                // 遍历所有的书签  

                for (pSpatialBookmark = pEnumSpatialBookmark.Next(); pSpatialBookmark != null; pSpatialBookmark = pEnumSpatialBookmark.Next())

                {

                    // 如果当前书签的名称与frmName中指定的书签名称相同  

                    if (pSpatialBookmark.Name == frmName.BookmarkName)

                    {

                        // 显示一个错误消息框,告诉用户已有同名书签  

                        MessageBox.Show("已有同名书签!", "错误");

                        // 退出当前方法  

                        return;

                    }

                }

                // 设置pAOIBookmark的书签名称为用户在frmName窗体中输入的书签名称  

                pAOIBookmark.Name = frmName.BookmarkName;

                // 设置pAOIBookmark的书签位置为当前axMapControl1的ActiveView的Extent(即地图的当前显示范围)  

                pAOIBookmark.Location = axMapControl1.ActiveView.Extent;

                // 将pAOIBookmark添加到pMapBookmarks的书签集合中  

                pMapBookmarks.AddBookmark(pAOIBookmark);

            }

        }

        #endregion

        #region 菜单-地图浏览-缩放至当前图层

        

        private void toolStripComboBoxTuCeng_DropDown(object sender, EventArgs e)

        {

            // 清空toolStripComboBoxTuCeng控件的所有项  

            toolStripComboBoxTuCeng.Items.Clear();

            // 获取axMapControl1控件中的地图对象  

            IMap pMap = axMapControl1.Map;

            // 遍历地图中的图层  

            for (int i = 0; i < pMap.LayerCount; i++)

            {

                // 将当前图层的名称添加到toolStripComboBoxTuCeng控件的项集合中  

                toolStripComboBoxTuCeng.Items.Add(pMap.get_Layer(i).Name);

            }

        }

        private void toolStripComboBoxTuCeng_SelectedIndexChanged(object sender, EventArgs e)

        {

            // 获取toolStripComboBoxTuCeng控件中当前选中项的文本,并转换为字符串类型,赋值给layerName变量  

            string layerName = toolStripComboBoxTuCeng.SelectedItem.ToString();

            // 声明一个ILayer类型的变量pLayer,并初始化为null  

            ILayer pLayer = null;

            // 获取axMapControl1控件中的地图对象,赋值给pMap变量  

            IMap pMap = axMapControl1.Map;

            // 使用for循环遍历地图中的所有图层  

            for (int i = 0; i < pMap.LayerCount; i++)

            {

                // 如果当前图层的名称与layerName相等  

                if (layerName == pMap.get_Layer(i).Name)

                {

                    // 将当前图层赋值给pLayer变量  

                    pLayer = pMap.get_Layer(i);

                    // 找到匹配的图层后跳出循环  

                    break;

                }

            }

            // 判断pLayer是否不为null,即是否找到了对应的图层  

            if (pLayer != null)

            {

                // 获取axMapControl1控件的当前活动视图,赋值给pActiveView变量  

                IActiveView pActiveView = axMapControl1.ActiveView;

                // 将地图的视图范围设置为找到的图层的感兴趣区域(AreaOfInterest)  

                pActiveView.Extent = pLayer.AreaOfInterest;

                // 刷新地图视图,以显示新的视图范围  

                pActiveView.Refresh();

            }

        }

        #endregion

        #region 菜单-GIS分析-识别地理要素

        private void 识别地理要素ToolStripMenuItem_Click(object sender, EventArgs e)

        {

            flagOnMouseMove = "ShiBie";

            flagOnMouseDown = "ShiBie";

        }

        #endregion

        #region 菜单-GIS分析-统计数据

        private void 统计数据ToolStripMenuItem_Click(object sender, EventArgs e)

        {

            frmStatistics pStatistics = new frmStatistics(axMapControl1.ActiveView);

            pStatistics.Show();

        }

        #endregion

        #region 地图控件-OnMouseDown事件

        private void axMapControl1_OnMouseDown(object sender, IMapControlEvents2_OnMouseDownEvent e)

        {

            // 根据flagOnMouseDown的值进行不同的操作

            // 在C#中,switch表达式(从C# 7.0开始)支持字符串类型。

            switch (flagOnMouseDown)

            {

                #region OnMouseDown-拉框放大

                case "LaKuangFangDa": // 如果flagOnMouseDown的值为"LaKuangFangDa"

                    {

                        // 声明一个ESRI.ArcGIS.Geometry.IEnvelope类型的变量pEnvelope,用于存储绘制的矩形范围

                        ESRI.ArcGIS.Geometry.IEnvelope pEnvelope;

                        // 调用axMapControl1的TrackRectangle方法,让用户通过鼠标绘制一个矩形,并将结果赋值给pEnvelope

                        pEnvelope = axMapControl1.TrackRectangle();

                        // 判断绘制的矩形范围是否为空。如果为空,则显示一个消息框,提示用户“所选为空”

                        if (pEnvelope.IsEmpty)

                        {

                            MessageBox.Show("所选为空", "提示信息");

                        }

                        else

                        {

                            // 如果矩形范围不为空,则将axMapControl1的Extent属性设置为pEnvelope,即设置地图的当前显示范围为绘制的矩形范围

                            axMapControl1.Extent = pEnvelope;

                            // 刷新axMapControl1的ActiveView,使地图的显示更新为新的范围  

                            axMapControl1.ActiveView.Refresh();

                        }

                    }

                    break; // 跳出switch语句  

                #endregion

                #region OnMouseDown-拉框缩小

                case "LaKuangSuoXiao":

                    {

                        // 将axMapControl1的Object属性转换为IMapControlDefault接口类型的实例,并赋值给pMapControl变量  

                        IMapControlDefault pMapControl = axMapControl1.Object as IMapControlDefault;

                        // 调用IEnvelope的TrackRectangle方法,该方法会等待用户通过鼠标在地图上绘制一个矩形,然后返回这个矩形的范围(Envelope)  

                        IEnvelope pEnvelope = axMapControl1.TrackRectangle();

                        // 检查返回的Envelope是否为空,或者其宽度和高度是否为0,如果是,则直接退出方法  

                        if (pEnvelope == null || pEnvelope.IsEmpty || pEnvelope.Height == 0 || pEnvelope.Width == 0)

                        {

                            return;

                        }

                        // 如果有有效的拉框范围,则执行以下操作  

                        else

                        {

                            // 将当前视图范围宽或高基于比例平方的缩放算法进行缩放

                            double dWidth = pMapControl.Extent.Width * pMapControl.Extent.Width / pEnvelope.Width;

                            double dHeight = pMapControl.Extent.Height * pMapControl.Extent.Height / pEnvelope.Height;

                            // 根据拉框的位置和当前视图范围计算新的最小X和Y坐标  

                            double dXmin = pMapControl.Extent.XMin -

                                            ((pEnvelope.XMin - pMapControl.Extent.XMin) * pMapControl.Extent.Width /

                                             pEnvelope.Width);

                            double dYmin = pMapControl.Extent.YMin -

                                            ((pEnvelope.YMin - pMapControl.Extent.YMin) * pMapControl.Extent.Height /

                                             pEnvelope.Height);

                            // 根据新的最小坐标和计算出的宽度和高度,计算新的最大X和Y坐标  

                            double dXmax = dXmin + dWidth;

                            double dYmax = dYmin + dHeight;

                            // 使用新的坐标设置Envelope的范围  

                            pEnvelope.PutCoords(dXmin, dYmin, dXmax, dYmax);

                        }

                        // 将更新后的Envelope范围设置为地图控件的当前显示范围  

                        pMapControl.Extent = pEnvelope;

                        // 刷新地图控件的视图,以显示更新后的范围  

                        pMapControl.Refresh();

                    }

                    break;

                #endregion

                #region OnMouseDown-漫游

                case "ManYou":  // 当flagOnMouseDown的值为"ManYou"时

                    {

                        // 调用axMapControl1的Pan方法,开始平移操作  

                        // Pan方法通常用于让用户通过拖动鼠标来平移地图视图

                        axMapControl1.Pan();

                    }

                    break; // 跳出switch语句

                #endregion

                #region OnMouseDown-识别

                case "ShiBie":

                    {

                        IPoint pPoint = axMapControl1.ToMapPoint(e.x, e.y);

                        IActiveView pActiveView = axMapControl1.ActiveView;

                        frmIdentify pIdentify = new frmIdentify(pActiveView, pPoint);

                        pIdentify.Show();

                    }

                    break;

                #endregion

            }

        }

        #endregion

        #region 地图控件-OnMouseMove事件

        private void axMapControl1_OnMouseMove(object sender, IMapControlEvents2_OnMouseMoveEvent e)

        {

            switch (flagOnMouseMove)

            {

                #region OnMouseMove-识别地理要素

                case "ShiBie":

                    {

                        // 由axMapControl1控件的对象实现IMapControlDefault接口  

                        IMapControlDefault pMapControlDefault = axMapControl1.Object as IMapControlDefault;

                        // 设置pMapControlDefault的鼠标指针样式为识别贯标样式  

                        pMapControlDefault.MousePointer = esriControlsMousePointer.esriPointerIdentify;

                    }

                    break;

                #endregion

            }

        }

        #endregion

        #region 目录树控件-上下文菜单条-查看属性表

        private void 查看属性表ToolStripMenuItem_Click(object sender, EventArgs e)

        {

            // 获取当前ArcMap控件中处于活动视图且为焦点的地图对象  

            // axMapControl1 可能是ArcMap控件的实例  

            // ActiveView 获取当前活动的视图  

            IActiveView pActiveView = axMapControl1.ActiveView;

            // 创建一个新的frmDataBoard窗体实例,并将当前活动的视图pActiveView作为参数传入  

            // frmDataBoard 可能是自定义的窗体,用于展示或操作地图图层数据  

            frmDataBoard dataBoard = new frmDataBoard(pActiveView);

            // 显示frmDataBoard窗体  

            // Show 方法将窗体显示出来  

            dataBoard.Show();

        }

        #endregion

        #region 目录树控件-OnMouseDown事件

        private void axTOCControl1_OnMouseDown(object sender, ITOCControlEvents_OnMouseDownEvent e)

        {

            if (e.button == 2)

            {

                axTOCControl1.HitTest(e.x, e.y, ref item, ref basicMap, ref layer, ref other, ref index);

                if (layer != null)

                {

                    cmsTOCYouJian.Show(axTOCControl1, new System.Drawing.Point(e.x, e.y));

                }

            }

        }

        private void miSuoFangZhiTuCeng_Click(object sender, EventArgs e)

        {

            IActiveView pActiveView = axMapControl1.ActiveView;

            pActiveView.Extent = layer.AreaOfInterest;

            pActiveView.Refresh();

        }

        #endregion

Databorad

public partial class frmDataBoard : Form

    {

        IActiveView mActiveView;

        IMap mMap;

        IFeatureLayer mFeatureLayer;

        string mWhereClause;

        IFeatureCursor mFeatureCursor;

        public frmDataBoard()

        {

            InitializeComponent();

        }

        // 定义一个名为frmDataBoard的公共构造函数,它接受一个类型为ESRI.ArcGIS.Carto.IActiveView的参数fActiveView  

        public frmDataBoard(ESRI.ArcGIS.Carto.IActiveView fActiveView)

        {

            // 调用窗体的初始化函数,该函数通常用于设置窗体上的控件和其他资源  

            InitializeComponent();

            // 将传入的fActiveView参数赋值给类的私有成员变量pActiveView  

            mActiveView = fActiveView;

            // 通过pActiveView的FocusMap属性获取当前活动视图中的地图,并将其赋值给类的私有成员变量pMap  

            mMap = mActiveView.FocusMap;

            // 清空cbxTuCeng控件(可能是一个ComboBox或类似的控件)的所有项  

            // 这意味着在下一次添加项之前,该控件将不包含任何图层名称  

            cbxTuCeng.Items.Clear();

            // 遍历地图pMap中的图层  

            // 地图图层数量通过pMap的LayerCount属性获取  

            // 遍历从第0个图层开始,直到最后一个图层

            for (int i = 0; i < mMap.LayerCount; i++)

            {

                // 获取地图中索引为i的图层,并调用其Name属性获取图层名称    

                // 将当前图层的名称添加到toolStripComboBoxTuCeng控件的项集合中    

                cbxTuCeng.Items.Add(mMap.get_Layer(i).Name);

            }

        }

        private void cbxTuCeng_SelectedIndexChanged(object sender, EventArgs e)

        {

            // 从cbxTuCeng控件的选定项中获取图层名称,并将其转换为字符串  

            string layerName = cbxTuCeng.SelectedItem.ToString();

            // 创建一个SnippetLayer对象,该对象可能包含一些与图层相关的辅助方法  

            SnippetLayer sl = new SnippetLayer();

            // 调用SnippetLayer的GetIndexNumberFromLayerName方法,根据图层名称获取图层在地图中的索引号  

            int layerIndex = sl.GetIndexNumberFromLayerName(mActiveView, layerName);

            // 使用获取的索引号,从地图中获取相应的FeatureLayer对象  

            IFeatureLayer pFeatureLayer = sl.GetFeatureLayerFromLayerIndexNumber(mActiveView, layerIndex);

            mFeatureLayer = pFeatureLayer;

            // 从FeatureLayer对象中获取FeatureClass对象,FeatureClass代表了一组具有相同属性和几何类型的要素  

            IFeatureClass pFeatureClass = pFeatureLayer.FeatureClass;

            // 获取FeatureClass的字段集合  

            IFields pFields = pFeatureClass.Fields;

            // 创建一个新的DataTable对象,用于存储查询结果  

            System.Data.DataTable pDataTable = new DataTable();

            // 遍历字段集合,为每个字段创建一个DataTable的列  

            for (int i = 0; i < pFields.FieldCount; i++)

            {

                IField pField = pFields.get_Field(i);

                pDataTable.Columns.Add(pField.Name);

            }

            // 创建一个查询过滤器,此处WhereClause为空,表示查询所有要素  

            // 创建一个QueryFilterClass的实例,用于构建查询过滤器  

            IQueryFilter pQueryFilter = new QueryFilterClass();

            pQueryFilter.WhereClause = "";

            // 执行查询,获取FeatureCursor对象,FeatureCursor用于遍历FeatureClass中的要素  

            // 使用FeatureClass的Search方法,并传入查询过滤器和false(表示不保留对FeatureClass的引用)  

            IFeatureCursor pFeatureCursor = pFeatureClass.Search(pQueryFilter, false);

            // 遍历FeatureCursor中的每个Feature  

            IFeature pFeature = pFeatureCursor.NextFeature();

            while (pFeature != null)

            {

                // 创建一个新的DataRow对象,用于存储当前Feature的数据  

                System.Data.DataRow row = pDataTable.NewRow();

                // 遍历字段集合,为每个字段从Feature中获取值并添加到DataRow中  

                for (int i = 0; i < pFields.FieldCount; i++)

                {

                    IField pField = pFields.get_Field(i);

                    // 使用Feature的get_Value方法,根据字段索引获取值  

                    row[pField.Name] = pFeature.get_Value(i);

                }

                // 将DataRow添加到DataTable中  

                pDataTable.Rows.Add(row);

                // 获取下一个Feature  

                pFeature = pFeatureCursor.NextFeature();

            }

            // 将DataTable设置为dgvLayerData控件的数据源,这样dgvLayerData就能显示查询到的数据了  

            dgvLayerData.DataSource = pDataTable;

        }

        private void btnSelectByAttribute_Click(object sender, EventArgs e)

        {

            frmSelectByAttribute frmSba = new frmSelectByAttribute(mFeatureLayer);

            frmSba.ShowDialog();

            // 从FeatureLayer对象中获取FeatureClass对象,FeatureClass代表了一组具有相同属性和几何类型的要素  

            IFeatureClass pFeatureClass = mFeatureLayer.FeatureClass;

            // 获取FeatureClass的字段集合  

            IFields pFields = pFeatureClass.Fields;

            // 创建一个新的DataTable对象,用于存储查询结果  

            System.Data.DataTable pDataTable = new DataTable();

            // 遍历字段集合,为每个字段创建一个DataTable的列  

            for (int i = 0; i < pFields.FieldCount; i++)

            {

                IField pField = pFields.get_Field(i);

                pDataTable.Columns.Add(pField.Name);

            }

            

            // 创建一个QueryFilterClass的实例,用于构建查询过滤器  

            IQueryFilter pQueryFilter = new QueryFilterClass();

            pQueryFilter.WhereClause = frmSba.WhereClause;

            // 将mFeatureLayer对象转换为IFeatureSelection接口,用于进行要素选择操作  

            IFeatureSelection pFeatureSelection = mFeatureLayer as IFeatureSelection;

            // 清空当前的选择集

            pFeatureSelection.Clear();

            #region 将Search的结果链接到数据表格视图

            // 执行查询,获取FeatureCursor对象    

            IFeatureCursor pFeatureCursor = pFeatureClass.Search(pQueryFilter, false);

            // 遍历FeatureCursor中的每个Feature  

            IFeature pFeature = pFeatureCursor.NextFeature();

            while (pFeature != null)

            {

                pFeatureSelection.Add(pFeature);

                // 创建一个新的DataRow对象,用于存储当前Feature的数据  

                System.Data.DataRow row = pDataTable.NewRow();

                // 遍历字段集合,为每个字段从Feature中获取值并添加到DataRow中  

                for (int i = 0; i < pFields.FieldCount; i++)

                {

                    IField pField = pFields.get_Field(i);

                    // 使用Feature的get_Value方法,根据字段索引获取值  

                    row[pField.Name] = pFeature.get_Value(i);

                }

                // 将DataRow添加到DataTable中  

                pDataTable.Rows.Add(row);

                // 获取下一个Feature  

                pFeature = pFeatureCursor.NextFeature();

            }

            // 将DataTable设置为dgvLayerData控件的数据源,这样dgvLayerData就能显示查询到的数据了  

            dgvLayerData.DataSource = pDataTable;

            #endregion

            // 调用pFeatureSelection的SelectFeatures方法,进行要素选择  

            pFeatureSelection.SelectFeatures(pQueryFilter, esriSelectionResultEnum.esriSelectionResultNew, false);

            // 调用mActiveView的PartialRefresh方法,仅刷新与地理选择相关的视图部分  

            mActiveView.PartialRefresh(esriViewDrawPhase.esriViewGeoSelection, null, mActiveView.Extent);

        }

        private void dgvLayerData_CellDoubleClick(object sender, DataGridViewCellEventArgs e)

        {

            // 将dgvLayerData的DataSource转换为DataTable类型,并赋值给pDataTable  

            DataTable pDataTable = dgvLayerData.DataSource as DataTable;

            // 通过e.RowIndex获取在数据表格中试图中双击的行,赋值给pDataRow  

            // e.RowIndex是DataGridView的CellDoubleClick事件传递的行索引  

            DataRow pDataRow = pDataTable.Rows[e.RowIndex];

            // 从pDataRow中获取"ObjectID"字段的值,并转换为int类型,赋值给pID  

            int pID = Convert.ToInt32(pDataRow["ObjectID"]);

            // 将mFeatureLayer转换为IFeatureSelection接口,并赋值给pFeatureSelection  

            IFeatureSelection pFeatureSelection = mFeatureLayer as IFeatureSelection;

            // 清除当前的选择集  

            pFeatureSelection.Clear();

            // 刷新mActiveView视图,使得清除选择集的操作生效  

            mActiveView.Refresh();

            // 获取pFeatureSelection的选择集,赋值给pSelectionSet  

            ISelectionSet pSelectionSet = pFeatureSelection.SelectionSet;

            // 将pID添加到选择集中  

            pSelectionSet.Add(pID);

            // 局部刷新mActiveView视图,只刷新与地理选择相关的部分  

            // 使得新添加的选择项在视图中显示  

            mActiveView.PartialRefresh(esriViewDrawPhase.esriViewGeoSelection, null, null);

        }

按图形选择

 public partial class frmIdentify : Form

    {

        IActiveView mActiveView = null;

        ISpatialFilter mSpatialFilter = new SpatialFilterClass();

        public frmIdentify()

        {

            InitializeComponent();

        }

        public frmIdentify(IActiveView fActiveView, IPoint fPoint)

        {

            // 初始化组件,这通常是窗体或控件的构造函数中的第一行代码,用于加载设计器生成的控件和组件  

            InitializeComponent();

            // 将传入的fActiveView赋值给mActiveView,用于存储活动视图  

            mActiveView = fActiveView;

            ///默认在最顶层图层识别地理要素  

            // 获取mActiveView的FocusMap中的第一个图层  

            IFeatureLayer pFeatureLayer = mActiveView.FocusMap.get_Layer(0) as IFeatureLayer;

            // 将传入的fPoint转换为IGeometry接口,并赋值给pSpatialFilter的Geometry属性  

            mSpatialFilter.Geometry = fPoint as IGeometry;

            // 设置pSpatialFilter的空间关系为esriSpatialRelWithin,表示查询与给定几何体(即fPoint)相交的要素  

            // esriSpatialRelEnum是ArcGI中定义空间关系的枚举类型  

            mSpatialFilter.SpatialRel = esriSpatialRelEnum.esriSpatialRelWithin;

            // 调用IdentifyFirstFeatureFromPointSearchInFeatureLayer方法,传入前面获取的图层和空间过滤器

            IdentifyFirstFeatureFromPointSearchInFeatureLayer(pFeatureLayer, mSpatialFilter);

        }

        private void cbxTuCeng_DropDown(object sender, EventArgs e)

        {

            // 通过pActiveView的FocusMap属性获取当前活动视图中的地图,并将其赋值给类的私有成员变量pMap  

            IMap pMap = mActiveView.FocusMap;

            // 清空cbxTuCeng控件(可能是一个ComboBox或类似的控件)的所有项  

            // 这意味着在下一次添加项之前,该控件将不包含任何图层名称  

            cbxTuCeng.Items.Clear();

            // 遍历地图pMap中的图层  

            // 地图图层数量通过pMap的LayerCount属性获取  

            // 遍历从第0个图层开始,直到最后一个图层

            for (int i = 0; i < pMap.LayerCount; i++)

            {

                // 获取地图中索引为i的图层,并调用其Name属性获取图层名称    

                // 将当前图层的名称添加到toolStripComboBoxTuCeng控件的项集合中    

                cbxTuCeng.Items.Add(pMap.get_Layer(i).Name);

            }

        }

        private void cbxTuCeng_SelectedIndexChanged(object sender, EventArgs e)

        {

            // 从cbxTuCeng控件的选定项中获取图层名称,并将其转换为字符串  

            string layerName = cbxTuCeng.SelectedItem.ToString();

            // 创建一个SnippetLayer对象,该对象可能包含一些与图层相关的辅助方法  

            SnippetLayer sl = new SnippetLayer();

            // 调用SnippetLayer的GetIndexNumberFromLayerName方法,根据图层名称获取图层在地图中的索引号  

            int layerIndex = sl.GetIndexNumberFromLayerName(mActiveView, layerName);

            // 使用获取的索引号,从地图中获取相应的FeatureLayer对象  

            IFeatureLayer pFeatureLayer = sl.GetFeatureLayerFromLayerIndexNumber(mActiveView, layerIndex);

            // 调用IdentifyFirstFeatureFromPointSearchInFeatureLayer方法,传入前面获取的图层和空间过滤器

            IdentifyFirstFeatureFromPointSearchInFeatureLayer(pFeatureLayer, mSpatialFilter);

        }

        private void IdentifyFirstFeatureFromPointSearchInFeatureLayer(IFeatureLayer fFeatureLayer, ISpatialFilter fSpatialFilter)

        {

            // 获取特征图层对应的特征类  

            IFeatureClass pFeatureClass = fFeatureLayer.FeatureClass;

            // 使用给定的空间过滤器在特征类中搜索,并创建一个特征游标(用于遍历查询结果)  

            // 第二个参数false表示不回收行(即不立即释放资源)  

            IFeatureCursor pFeatureCursor = pFeatureClass.Search(fSpatialFilter, false);

            // 创建一个新的DataTable对象,用于存储查询结果  

            DataTable pDataTable = new DataTable();

            // 添加两列到DataTable中,一列名为"字段",另一列名为"值"  

            pDataTable.Columns.Add("字段");

            pDataTable.Columns.Add("值");

            // 获取FeatureClass的字段集合  

            // 字段集合包含了特征类中的所有字段信息  

            // 注释:获取FeatureClass的字段集合  

            IFields pFields = pFeatureClass.Fields;

            // 调用 pFeatureCursor 的 NextFeature 方法来获取游标中的下一个要素

            IFeature pFeature = pFeatureCursor.NextFeature();

            if (pFeature != null)

            {

                // 如果Feature不为空,则遍历字段集合,从Feature中获取值并添加到DataRow中  

                for (int i = 0; i < pFields.FieldCount; i++)

                {

                    // 创建一个新的DataRow对象,用于存储字段名和对应的值  

                    DataRow row = pDataTable.NewRow();

                    // 从字段集合中获取当前索引对应的字段  

                    IField pField = pFields.get_Field(i);

                    // 使用Feature的get_Value方法,根据字段索引获取值

                    row["字段"] = pField.Name; // 将字段名添加到DataRow的"字段"列中  

                    row["值"] = pFeature.get_Value(i); // 将字段值添加到DataRow的"值"列中  

                    // 将DataRow添加到DataTable中  

                    pDataTable.Rows.Add(row);

                }

            }

            // 将DataTable设置为dgvInfo(可能是DataGridView控件)的数据源  

            // 这样dgvInfo就会显示DataTable中的数据  

            dgvInfo.DataSource = pDataTable;

        }

        private string ShapeToChinese(esriGeometryType fesriGeometryType)

        {

            string shapeCh = "";

            switch (fesriGeometryType)

            {

                case ESRI.ArcGIS.Geometry.esriGeometryType.esriGeometryPoint:

                    shapeCh="点";

                    break;

                case ESRI.ArcGIS.Geometry.esriGeometryType.esriGeometryMultipoint:

                    shapeCh = "多点";

                    break;

                case ESRI.ArcGIS.Geometry.esriGeometryType.esriGeometryLine:

                    shapeCh="线段";

                    break;

                case ESRI.ArcGIS.Geometry.esriGeometryType.esriGeometryCircularArc:

                    shapeCh="圆弧";

                    break;

                case ESRI.ArcGIS.Geometry.esriGeometryType.esriGeometryEllipticArc:

                    shapeCh="椭圆弧";

                    break;

                case ESRI.ArcGIS.Geometry.esriGeometryType.esriGeometryBezier3Curve:

                    shapeCh="三次贝塞尔曲线";

                    break;

                case ESRI.ArcGIS.Geometry.esriGeometryType.esriGeometryPath:

                    shapeCh="路径";

                    break;

                case ESRI.ArcGIS.Geometry.esriGeometryType.esriGeometryPolyline:

                    shapeCh ="折线";

                    break;

                case ESRI.ArcGIS.Geometry.esriGeometryType.esriGeometryRing:

                    shapeCh="环";

                    break;

                case ESRI.ArcGIS.Geometry.esriGeometryType.esriGeometryPolygon:

                    shapeCh="多边形";

                    break;

                case ESRI.ArcGIS.Geometry.esriGeometryType.esriGeometryEnvelope:

                    shapeCh="矩形范围";

                    break;

                case ESRI.ArcGIS.Geometry.esriGeometryType.esriGeometryAny:

                    shapeCh="任意几何体";

                    break;

                case ESRI.ArcGIS.Geometry.esriGeometryType.esriGeometryBag:

                    shapeCh="几何体集合";

                    break;

                case ESRI.ArcGIS.Geometry.esriGeometryType.esriGeometryMultiPatch:

                    shapeCh="表面面片集合";

                    break;

                case ESRI.ArcGIS.Geometry.esriGeometryType.esriGeometryTriangleStrip:

                    shapeCh="三角形带";

                    break;

                case ESRI.ArcGIS.Geometry.esriGeometryType.esriGeometryTriangleFan:

                    shapeCh="三角形扇";

                    break;

                case ESRI.ArcGIS.Geometry.esriGeometryType.esriGeometryRay:

                    shapeCh="射线";

                    break;

                case ESRI.ArcGIS.Geometry.esriGeometryType.esriGeometrySphere:

                    shapeCh="球体";

                    break;

                case ESRI.ArcGIS.Geometry.esriGeometryType.esriGeometryTriangles:

                    shapeCh = "三角形面片";

                    break;

                default:

                    shapeCh = "未知类型几何体";

                    break;

            }

            return shapeCh;

        }

按属性选择

 public partial class frmSelectByAttribute : Form

    {

        // 声明一个IFeatureLayer类型的变量mFeatureLayer,并初始化为null。IFeatureLayer通常用于表示地图上的一个要素图层。  

        IFeatureLayer mFeatureLayer = null;

        // 声明一个IFeatureClass类型的变量mFeatureClass,并初始化为null。IFeatureClass是ArcGIS Engine中表示要素类的接口,它定义了一个具有相同几何类型和属性集的一组要素。  

        IFeatureClass mFeatureClass = null;

        // 声明一个整型变量isString,用来表示字段是否为字符串类型。

        // 0为非字符串

        // 1为字符串

        int isString = 0;

        // 声明一个字符串变量whereClause,用于存储SQL查询语句的条件部分。  

        string whereClause;

        public string WhereClause

        {

            get { return whereClause; }

            set { whereClause = value; }

        }

        public frmSelectByAttribute()

        {

            InitializeComponent();

        }

        // frmSelectByAttribute类的构造函数,它接受一个IFeatureLayer类型的参数fFeatureLayer。  

        public frmSelectByAttribute(IFeatureLayer fFeatureLayer)

        {

            // 调用窗体或控件的初始化方法,该方法通常在窗体设计器中自动生成,用于初始化窗体上的控件等。  

            InitializeComponent();

            // 将传入的IFeatureLayer对象赋值给类的成员变量mFeatureLayer。  

            mFeatureLayer = fFeatureLayer;

            // 从mFeatureLayer对象中获取其关联的IFeatureClass对象,并赋值给类的成员变量mFeatureClass。  

            mFeatureClass = mFeatureLayer.FeatureClass;

            // 获取mFeatureClass对象的IFields接口,该接口包含了要素类中所有字段的信息。  

            IFields pFields = mFeatureClass.Fields;

            // 清除下拉列表框cbxField中的所有项,以确保不会显示旧的字段信息。  

            cbxField.Items.Clear();

            // 遍历pFields中的所有字段。  

            for (int i = 0; i < pFields.FieldCount; i++)

            {

                // 获取索引为i的字段对象。  

                IField pField = pFields.get_Field(i);

                // 将字段的名称添加到下拉列表框cbxField的项集合中。  

                cbxField.Items.Add(pField.Name);

            }

        }

        private void cbxField_SelectedIndexChanged(object sender, EventArgs e)

        {

            // 获取用户从下拉列表框cbxField中选择的字段的索引  

            int fieldIndex = cbxField.SelectedIndex;

            // 创建一个新的字符串列表values,用于存储字段的所有值  

            List<string> values = new List<string>();

            // 创建一个新的字符串列表uniqueValues,用于存储字段的唯一值  

            List<string> uniqueValues = new List<string>();

            // 创建一个新的查询过滤器对象pQueryFilter,并初始化为QueryFilterClass的实例  

            IQueryFilter pQueryFilter = new QueryFilterClass();

            // 初始化查询过滤器的WhereClause属性为空字符串,表示不进行任何过滤  

            pQueryFilter.WhereClause = "";

            // 执行查询,获取IFeatureCursor对象,用于遍历FeatureClass中的要素  

            // 使用FeatureClass的Search方法,并传入查询过滤器和false(表示不保留对FeatureClass的引用)  

            IFeatureCursor pFeatureCursor = mFeatureClass.Search(pQueryFilter, false);

            // 尝试从FeatureCursor中获取第一个Feature  

            IFeature pFeature = pFeatureCursor.NextFeature();

            // 检查获取到的Feature的指定字段的值是否为字符串类型  

            if (pFeature.get_Value(fieldIndex).GetType().Name == "String")

            {

                // 如果是字符串类型,则设置isString为1,可能用于后续的逻辑判断  

                isString = 1;

            }

            // 使用while循环遍历FeatureCursor中的所有Feature  

            while (pFeature != null)

            {

                // 将Feature的指定字段的值添加到values列表中  

                values.Add(pFeature.get_Value(fieldIndex).ToString());

                // 移动到下一个Feature  

                pFeature = pFeatureCursor.NextFeature();

            }

            // 使用LINQ查询从values列表中获取唯一值,并将结果存储在uniqueValues列表中  

            uniqueValues = values.Distinct().ToList<string>();

            // 清除另一个下拉列表框cbxUniqueValue中的所有项  

            cbxUniqueValue.Items.Clear();

            // 遍历uniqueValues列表,并将每个唯一值添加到cbxUniqueValue的下拉列表中  

            foreach (string temp in uniqueValues)

            {

                cbxUniqueValue.Items.Add(temp);

            }

            // 在文本框tbxWhere中追加用户所选字段的双引号包裹的字段名  

            // 注意:这里只是添加了字段名,并没有构建完整的SQL查询语句  

            tbxWhere.Text += "\"" + cbxField.SelectedItem.ToString() + "\"";

        }

        private void cbxUniqueValue_SelectedIndexChanged(object sender, EventArgs e)

        {

            // 字段值为字符串在Where条件子句中表达方式

            if (isString == 1) tbxWhere.Text += "\'" + cbxUniqueValue.SelectedItem.ToString() + "\'";

            // 字段值非字符串在Where条件子句中表达方式

            if (isString == 0) tbxWhere.Text += cbxUniqueValue.SelectedItem.ToString();

        }

        private void btnOK_Click(object sender, EventArgs e)

        {

            whereClause = tbxWhere.Text;

            this.Close();

        }

        private void tbxWhere_TextChanged(object sender, EventArgs e)

        {

            whereClause = tbxWhere.Text;

        }

        private void btnClear_Click(object sender, EventArgs e)

        {

            tbxWhere.Clear();

        }

        private void btnCancel_Click(object sender, EventArgs e)

        {

            this.Close();

        }

数据统计

 public partial class frmStatistics : Form

    {

        IActiveView mActiveView;

        IFeatureClass mFeatureClass;

        ICursor mCursor;

        public frmStatistics()

        {

            InitializeComponent();

        }

        public frmStatistics(IActiveView fActiveView)

        {

            InitializeComponent();

            // 将传入的fActiveView参数赋值给类的私有成员变量pActiveView  

            mActiveView = fActiveView;

            // 通过pActiveView的FocusMap属性获取当前活动视图中的地图,并将其赋值给类的私有成员变量pMap  

            IMap pMap = fActiveView.FocusMap;

            // 清空cbxTuCeng控件的所有项   

            cbxTuCeng.Items.Clear();

            // 遍历地图pMap中的图层  

            for (int i = 0; i < pMap.LayerCount; i++)

            {

                // 获取地图中索引为i的图层,并调用其Name属性获取图层名称    

                // 将当前图层的名称添加到toolStripComboBoxTuCeng控件的项集合中    

                cbxTuCeng.Items.Add(pMap.get_Layer(i).Name);

            }

        }

        private void cbxTuCeng_SelectedIndexChanged(object sender, EventArgs e)

        {

            // 从cbxTuCeng控件的选定项中获取图层名称,并将其转换为字符串  

            string layerName = cbxTuCeng.SelectedItem.ToString();

            // 创建一个SnippetLayer对象,该对象可能包含一些与图层相关的辅助方法  

            SnippetLayer sl = new SnippetLayer();

            // 调用SnippetLayer的GetIndexNumberFromLayerName方法,根据图层名称获取图层在地图中的索引号  

            int layerIndex = sl.GetIndexNumberFromLayerName(mActiveView, layerName);

            // 使用获取的索引号,从地图中获取相应的FeatureLayer对象  

            IFeatureLayer pFeatureLayer = sl.GetFeatureLayerFromLayerIndexNumber(mActiveView, layerIndex);

            // 从FeatureLayer对象中获取FeatureClass对象,FeatureClass代表了一组具有相同属性和几何类型的要素  

            mFeatureClass = pFeatureLayer.FeatureClass;

            // 创建一个查询过滤器,此处WhereClause为空,表示查询所有要素  

            // 创建一个QueryFilterClass的实例,用于构建查询过滤器  

            IQueryFilter pQueryFilter = new QueryFilterClass();

            pQueryFilter.WhereClause = "";

            // 执行查询,获取FeatureCursor对象,FeatureCursor用于遍历FeatureClass中的要素  

            // 使用FeatureClass的Search方法,并传入查询过滤器和false(表示不保留对FeatureClass的引用)

            IFeatureCursor pFeatureCursor = mFeatureClass.Search(pQueryFilter, false);

            // 尝试从FeatureCursor中获取第一个Feature  

            IFeature pFeature = pFeatureCursor.NextFeature();

            // 获取FeatureClass的字段集合  

            IFields pFields = mFeatureClass.Fields;

            // 清除下拉列表框cbxField中的所有项,以确保不会显示旧的字段信息。

            cbxField.Items.Clear();

            // 遍历字段集合  

            for (int i = 0; i < pFields.FieldCount; i++)

            {

                // 从pFields中获取索引为i的字段,并将其赋值给pField变量  

                IField pField = pFields.get_Field(i);

                // 从pFeature中获取索引为i的字段值,并将其赋值给pValue变量  

                object pValue = pFeature.get_Value(i);

                // 判断pValue的类型是否为数值类型  

                if (pValue is int || pValue is double || pValue is float || pValue is decimal || pValue is long || pValue is short)

                    // 如果满足上述条件之一,则将pField的Name属性添加到cbxField的Items集合中  

                    cbxField.Items.Add(pField.Name);

            }

            // 将pFeatureCursor强制转换为ICursor接口,并赋值给mCursor变量  

            mCursor = pFeatureCursor as ICursor;

        }

        private void cbxField_SelectedIndexChanged(object sender, EventArgs e)

        {

            // 创建一个DataStatisticsClass的实例,用于统计数据的各项指标  

            IDataStatistics pDataStatistics = new DataStatisticsClass();

            // 将pDataStatistics的Cursor属性设置为mCursor,表示要对mCursor中的数据进行统计  

            pDataStatistics.Cursor = mCursor;

            // 设置pDataStatistics要统计的字段为cbxField下拉列表中选中的项(转换为字符串)  

            pDataStatistics.Field = cbxField.SelectedItem.ToString();

            // 调用pDataStatistics的Statistics属性来获取统计结果,并赋值给pStatisticsResults  

            IStatisticsResults pStatisticsResults = pDataStatistics.Statistics;

            // 清空tbxResults文本框的内容  

            tbxResults.Clear();

            // 在tbxResults文本框中添加统计结果,包括要素个数、最大值、最小值、平均值、标准差和总和  

            tbxResults.Text = "要素个数:" + pStatisticsResults.Count +

                            "\r\n最大值:" + pStatisticsResults.Maximum +

                            "\r\n最小值:" + pStatisticsResults.Minimum +

                            "\r\n平均值:" + pStatisticsResults.Mean +

                            "\r\n标准差:" + pStatisticsResults.StandardDeviation +

                            "\r\n总和:" + pStatisticsResults.Sum;

        }

书签页面

public partial class frmWenBenShuRu : Form

    {

        public frmWenBenShuRu()

        {

            InitializeComponent();

        }

        // 私有字段,存储书签名称  

        private string bookmarkName;

        // 公共属性,用于获取和设置书签名称  

        public string BookmarkName

        {

            get { return bookmarkName; }

            set { bookmarkName = value; }

        }

        // 私有字段,用于表示是否创建了书签(这里用0表示未创建,1表示已创建)  

        private int create = 0;

        // 公共属性,用于获取和设置表示书签创建状态的整数值  

        public int Create

        {

            get { return create; }

            set { create = value; }

        }

        // 当“确定”按钮被点击时触发的事件处理器  

        private void btnOK_Click(object sender, EventArgs e)

        {

            // 从文本框tbxName中获取文本  

            bookmarkName = tbxName.Text;   

            // 如果书签名称不为空  

            if (!string.IsNullOrEmpty(bookmarkName))

            {

                // 设置create字段为1,表示书签已创建  

                create = 1;

            }

            // 关闭窗体  

            this.Close();

        }

        // 当“取消”按钮被点击时触发的事件处理器  

        private void btnCancel_Click(object sender, EventArgs e)

        {

            // 关闭窗体  

            this.Close();

        }

        private void tbxName_TextChanged(object sender, EventArgs e)

        {

        }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值