基于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#开发实例》张丰,杜震洪,刘仁义 编著