C#ArcEngine二次开发——创建与调用AOI书签

  • Post author:
  • Post category:其他


基于ArcEngine10.2和VS2012进行C#ArcEngine二次开发

创建与调用AOI书签

在如图所示的程序主窗体菜单栏中添加一个菜单项“创建书签”,其控件名为“miCreateBookmark”,用于调用“创建书签”窗体;在“创建书签”边上再添加一个组合框,其控件名为“cbBookmarkList”,用于保存已创建的书签名,并且能够在选中某书签名时,缩放到该书签对应的地图区域。

(一)添加类库和引用

在VS2012的资源管理器中添加ArcGIS引用,将ESRI.ArcGIS.Geometry类库的引用添加进项目。在主窗体的代码(即MainForm.cs)中导入ESRI.ArcGIS.Geometry

输入代码:using ESRI.ArcGIS.Geometry

这时如果发现VS提示代码中的Path类冲突,可以改成System.I/O.Path的形式避免冲突

(二)添加创建书签函数

在MainForm类中添加一个成员函数CreateBookmark,用来创建书签

 public void CreateBookmark(string sBookmarkName) {
            IAOIBookmark aoiBookmark = new AOIBookmarkClass();

            //
            if (aoiBookmark != null) { 
            aoiBookmark.Location=axMapControl1.ActiveView.Extent;
            aoiBookmark.Name = sBookmarkName;
            }

            //add aoibookmark to map
            IMapBookmarks bookmarks = axMapControl1.Map as IMapBookmarks;
            if(bookmarks != null){
                bookmarks.AddBookmark(aoiBookmark);
            }
            //add aoibookmark to the comboxitem
            cbBookmarkList.Items.Add(aoiBookmark.Name);
        }

(三)添加窗体

在VS2012的“项目”菜单下的“添加Windows窗体”中,添加一个Windows窗体,将窗体文件命名为”AdmitBookmarkName.cs“.该窗体用于获取用户定义的书签名称,并传递入主窗体。

向窗体中添加两个控件,一个TextBox,用于输入书签名称,控件名为”tbBookmarkName”;一个Button,控件名为”btnAdmit”。

接着双击Button,自动生成”Click”事件的缺省的响应函数。

在当前窗体的代码中,添加一个主窗体类型的成员变量m_frmMain,并新建一个构造函数,以主窗体类型对象为参数,用于调用主窗体的相关成员。修改Click事件响应函数,实现书签名的传递。

代码如下:

public MainForm m_frmMain;
        
        public AdmitBookmarkName(MainForm  frm)
        {
            InitializeComponent();
            if (frm != null) {
                m_frmMain = frm;
            }
        }


private void btnAdimit_Click(object sender, EventArgs e)
        {
            if (m_frmMain != null || tbBookmarkname.Text == "") {

                m_frmMain.CreateBookmark(tbBookmarkname.Text);
            }
            this.Close();
        }

(四)实现创建书签和调用书签功能

为主窗体的”创建书签“按钮生成”Click”事件响应函数并添加代码以实现确认书签名称功能。

private void miCreateBookmark_Click(object sender, EventArgs e)
        {
            AdmitBookmarkName frmABN = new AdmitBookmarkName(this);
            frmABN.Show();
        }

为组合框”cbBookmarkList”生成”SelectedIndexChanged”事件响应函数,添加代码使当组合框中被选中项改变时,地图可以缩放至书签所在区域。

private void cbBookmarkList_SelectedIndexChanged(object sender, EventArgs e)
        {
            //get bookmark_list
            IMapBookmarks bookmarks = axMapControl1.Map as IMapBookmarks;
            IEnumSpatialBookmark enumSpatialBookmark = bookmarks.Bookmarks;

            //
            enumSpatialBookmark.Reset();
            ISpatialBookmark spatialBookmark = enumSpatialBookmark.Next();
            while (spatialBookmark != null) {
                if (cbBookmarkList.SelectedItem.ToString() == spatialBookmark.Name)
                {
                    spatialBookmark.ZoomTo((IMap)axMapControl1.ActiveView);
                    axMapControl1.ActiveView.Refresh();
                    break;
                }
                spatialBookmark = enumSpatialBookmark.Next();
            }
        }

(五)如图所示,创建与调用AOI书签功能添加完毕。

参考书目:《GIS程序设计教程——基于ArcGIS Engine的C#开发实例》张丰,杜震洪,刘仁义 编著



版权声明:本文为GISer_rookie原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。