1、空间书签(组件):1.AOI(实习)2.Feature(地理要素)Name 的数据格式是 string;Location 的数据格式是 IEnvelop(接口);MenuItem-属性:(Name):miBookmark;Text:空间书签ComboBox-属性 (组合框):(name):cbBookmark;创建一个 form 类( 项目):MapControlApplication_空间书签 -添加-windows 窗体-frmBookmark.cs:(Name):frmBookmark;Text:创建空间书签;要在代码中使用 using 语句将命名空间导入,首先要添加相应的参考:引用-A
2、dd ArcGIS Reference-找到 ESRI.ArcGIS.Geometry/使frmBookmark能用原接口using ESRI.ArcGIS.esriSystem;using ESRI.ArcGIS.Carto;using ESRI.ArcGIS.Geometry;包含两个数据:Private IMap m_map; /地图视图对象 Private ToolStripComboBox m_cbBookmark; /创建组合框的对象/给m_map;m_cbBookmark赋值(用this指针)public frmBookmark(IMap map, ToolStripComboB
3、ox comboBox)InitializeComponent();this.m_map = map;this.m_cbBookmark = comboBox;创建一个 TextBox (tbName)创建一个 Button (btnOK;创建 )String name = tbName.Text.Trim(); /Trim()作用是省略空格if (string.Empty = name) /变量写在后面,用于查错, empty:是否为空MessageBox.Show(“请输入空间书签名称!“); /弹出对话框 elseIActiveView activeView = m_map as IAc
4、tiveView; /格式转换 先定义一个活动视图,把m_map赋值给活动视图IEnvelope extent = activeView.Extent; /定义一个布局视图,活动视图的extent赋值给布局视图/定义一个书签 IAOIBookmark bookmark = new AOIBookmarkClass(); bookmark.Name = name;bookmark.Location = extent;/定义一个书签集,并把书签放入书签集IMapBookmarks bookmarks = m_map as IMapBookmarks;bookmarks.AddBookmark(bo
5、okmark);m_cbBookmark.Items.Add(name); /保存书签MessageBox.Show(“添加书签成功!“);/创建对话框this.Close();/关闭对话框双击空间书签-写代码:/双击空间书签,弹出 frmBookmark 类的对话框frmBookmark frm = new frmBookmark(axMapControl1.Map, cbBookmark); /构造函数frm.Show();选择书签名显示出对应的 map:属性-创建事件-SelectIndexChanged 双击private void cbBookmark_SelectedIndexCh
6、anged(object sender, EventArgs e)IMapBookmarks bookmarks = axMapControl1.Map as IMapBookmarks;IEnumSpatialBookmark enumSpatialBookmark = bookmarks.Bookmarks;/reset把指针指向headenumSpatialBookmark.Reset();ISpatialBookmark spatialBookmark = enumSpatialBookmark.Next();while (spatialBookmark != null)if (cbB
7、ookmark.SelectedItem.ToString() = spatialBookmark.Name)spatialBookmark.ZoomTo(IMap)axMapControl1.ActiveView);axMapControl1.ActiveView.Refresh();/refresh更新视图break;spatialBookmark = enumSpatialBookmark.Next();没有重名书签:方法一:private void btnOK_Click(object sender, EventArgs e)string name = tbName.Text.Trim
8、(); /Trim()作用是省略空格IActiveView activeView = m_map as IActiveView; /格式转换 先定义一个活动视图,把活动视图赋值给m_mapIEnvelope extent = activeView.Extent; /定义一个布局视图,活动视图赋值给布局视图/定义一个书签 IAOIBookmark bookmark = new AOIBookmarkClass(); bookmark.Name = name;bookmark.Location = extent;/定义一个书签集,并把书签放入书签集IMapBookmarks bookmarks =
9、 m_map as IMapBookmarks;if (string.Empty = name) /变量写在后面,用于查错MessageBox.Show(“请输入空间书签名称!“); /弹出对话框 else IEnumSpatialBookmark enumSpatialBookmark = bookmarks.Bookmarks;/reset把指针指向headenumSpatialBookmark.Reset();ISpatialBookmark spatialBookmark = enumSpatialBookmark.Next();bool b =true;while (spatialB
10、ookmark != null)if (name = spatialBookmark.Name)MessageBox.Show(“该书签已存在!“);B=false;this.Close();break;spatialBookmark = enumSpatialBookmark.Next();if (b=true)bookmarks.AddBookmark(bookmark);m_cbBookmark.Items.Add(name); /保存书签名MessageBox.Show(“添加书签成功!“);/创建对话框this.Close();/关闭对话框方法二:bool b = m_cbBookm
11、ark.Items.Contains(name);if (b =true)MessageBox.Show(“.“);this.Close();elsebookmarks.AddBookmark(bookmark);m_cbBookmark.Items.Add(name); /保存书签名MessageBox.Show(“添加书签成功!“);/创建对话框方法三:bool b = true;for (int i = 0; i m_cbBookmark.Items.Count; i+)String str = m_cbBookmark.Itemsi.ToString();if (name = str)
12、b = false;break;if (b = false)MessageBox.Show(“.“);elsebookmarks.AddBookmark(bookmark);m_cbBookmark.Items.Add(name); /保存书签名MessageBox.Show(“添加书签成功!“);/创建对话框保存书签:1.写入 text文件中:frmBookmark中: public void WriteInText()tryString path = “C:UsersuserDocumentsVisual Studio 2005ProjectsMapControlApplication1c
13、bBookmark.txt“;StreamWriter streamwriter = new StreamWriter(path);for (int i = 0; i m_cbBookmark.Items.Count; i+)streamwriter.Write(m_cbBookmark.Itemsi.ToString()+Environment.NewLine);streamwriter.Close();catch Main_form中:private void miBookmark_Click(object sender, EventArgs e)frmBookmark frm = new
14、 frmBookmark(axMapControl1.Map, cbBookmark);frm.Show();frm.WriteInText();2.读取Main_form(load)中:tryString path = “C:UsersuserDocumentsVisual Studio 2005ProjectsMapControlApplication1cbBookmark.txt“;StreamReader streamreader = new StreamReader(path, Encoding.Default);String stringline = String.Empty;while (stringline = streamreader.ReadLine() != null)cbBookmark.Items.Add(stringline.Trim();catch