ArcGIS Engine开发之书签加载
ArcGIS中书签是保存特定视图范围的快捷方式。使用书签保存关注的视图范围,可在需要时快速定位、查看与浏览。书签功能主要用到IMapBookmarks、ISpatialBookmark和IAOIBookmark三个接口。
通过IMapBookmarks接口的Bookmarks属性可以得到地图文档中已经存在的所有书签对象,通过该接口的AddBookmark和RemoveBookmark方法可以对书签进行添加和删除。
ISpatialBookmark接口定义所有空间书签的共同功能,特别是书签的Name属性和ZoomTo方法。Name属性定义了书签的名字,通过ZoomTo方法可跳转到书签位置点。
IAOIBookmark接口继承自ISpatialBookmark接口,新增了Location属性,用于存储地图中感兴趣的范围。
1、添加书签
新建一个窗体用于设置书签名称,窗体界面如图:
实现:
public partial class FormBookMarks : DevExpress.XtraEditors.XtraForm
{
/// <summary>
/// 定义全局变量
/// </summary>
///
private string m_bookmark;//书签名
private int m_check;//是否创建书签
public FormBookMarks()
{
InitializeComponent();
} private void FormBookMarks_Load(object sender, EventArgs e)
{
//设置确定按钮一开始的不可用性
btnOk.Enabled = false;
}
/// <summary>
/// 确定按钮
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void btnOk_Click(object sender, EventArgs e)
{
m_bookmark = txtBookMarks.Text;
txtBookMarks.Text = "";
m_check = ;
this.Close();
}
//取消按钮
private void btnCel_Click(object sender, EventArgs e)
{
txtBookMarks.Text = "";
m_check = ;
this.Close();
}
//设置书签为只读
public string Bookmark
{
get { return m_bookmark; }
}
//是否创建书签变量为只读
public int Check
{
get { return m_check; }
}
/// <summary>
/// 在TextBox中文本改变事件中设置按钮的可用性
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void txtBookMarks_TextChanged(object sender, EventArgs e)
{
if (txtBookMarks.Text == "")
{
btnOk.Enabled = false;
}
else
{
btnOk.Enabled = true;
}
}
mainForm中的代码
/// <summary>
/// 添加书签的操作
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void btnOpenBookMark_ItemClick(object sender, ItemClickEventArgs e)
{
FormBookMarks frmBookMark = new FormBookMarks();
frmBookMark.ShowDialog();
string pName = string.Empty;
int check = frmBookMark.Check; if (check == )
{
pName = frmBookMark.Bookmark;
}
if (string.IsNullOrEmpty(pName)) return; //书签进行重名判断
IMapBookmarks mapBookmarks= mainMapControl.Map as IMapBookmarks;
IEnumSpatialBookmark enumSpatialBookmarks = mapBookmarks.Bookmarks;
enumSpatialBookmarks.Reset();
ISpatialBookmark pSpatialBookmark; while ((pSpatialBookmark = enumSpatialBookmarks.Next()) != null)
{
if (pName == pSpatialBookmark.Name)
{
DialogResult dr = MessageBox.Show("此书签名已存在!是否替换?", "提示", MessageBoxButtons.YesNoCancel);
if (dr == DialogResult.Yes)
{
mapBookmarks.RemoveBookmark(pSpatialBookmark);
}
else if (dr == DialogResult.No)
{
frmBookMark.ShowDialog();
}
else
{
return;
}
}
} //获取当前地图的对象
IActiveView pActiveView = mainMapControl.Map as IActiveView;
//创建一个新的书签并设置其位置范围为当前视图的范围
IAOIBookmark pBookmark = new AOIBookmarkClass();
pBookmark.Location = pActiveView.Extent;
//获得书签名
pBookmark.Name = pName;
//通过IMapBookmarks接口访问当前地图书签集,添加书签到地图的书签集中
IMapBookmarks pMapBookmarks = mainMapControl.Map as IMapBookmarks;
pMapBookmarks.AddBookmark(pBookmark);
}
/// <summary>
/// 书签管理
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void btnOpenMangerBookMark_ItemClick(object sender, ItemClickEventArgs e)
{ try
{
FormMangerBookMark frmManageBookmark = new FormMangerBookMark(mainMapControl.Map);
frmManageBookmark.ShowDialog();
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
} }
新建书签管理窗体,如图:
代码:
public partial class FormMangerBookMark : DevExpress.XtraEditors.XtraForm
{
/// <summary>
/// 定义全局变量
/// </summary>
///
private IMap _currentMap = null;
Dictionary<string, ISpatialBookmark> pDictionary = new Dictionary<string, ISpatialBookmark>();
IMapBookmarks mapBookmarks = null; public FormMangerBookMark(IMap pMap)
{
InitializeComponent();
_currentMap = pMap;//获取当前地图
InitControl();
}
/// <summary>
/// 获取空间书签,对ListBookmark进行初始化
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
///
private void InitControl()
{
mapBookmarks = _currentMap as IMapBookmarks;
IEnumSpatialBookmark enumSpatialBookmarks = mapBookmarks.Bookmarks;
enumSpatialBookmarks.Reset();
ISpatialBookmark pSpatialBookmark = enumSpatialBookmarks.Next(); string sBookMarkName = string.Empty;
while (pSpatialBookmark != null)
{
sBookMarkName = pSpatialBookmark.Name;
//增加树节点
treeView1.Nodes.Add(sBookMarkName );
// advTree1 . Nodes.Add(sBookMarkName);
//添加到数据字典
pDictionary.Add(sBookMarkName, pSpatialBookmark);
pSpatialBookmark = enumSpatialBookmarks.Next();
}
}
/// <summary>
///
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void FormMangerBookMark_Load(object sender, EventArgs e)
{ }
/// <summary>
/// 定位按钮的功能
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void btnPosition_Click(object sender, EventArgs e)
{ //DevComponents.AdvTree.Node pSelectedNode =advTree1.SelectedNode;
TreeNode pSelectedNode = treeView1.SelectedNode;
//获取书签中的书签范围
ISpatialBookmark pSpatialBM = pDictionary[pSelectedNode.Text];
//缩放到选中的范围
pSpatialBM.ZoomTo(_currentMap);
IActiveView pActiveView = _currentMap as IActiveView;
pActiveView.PartialRefresh(esriViewDrawPhase.esriViewGeography, null, null);
}
/// <summary>
/// 删除书签的操作
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void btnDeleterBookMark_Click(object sender, EventArgs e)
{
// DevComponents.AdvTree.Node pSelectedNode = advTree1.SelectedNode;
TreeNode pSelectedNode = treeView1.SelectedNode;
ISpatialBookmark pSpatialBM=pDictionary [pSelectedNode .Text ];
//删除选中的书签对象
mapBookmarks.RemoveBookmark(pSpatialBM);
//删除字典中数据
pDictionary.Remove(pSelectedNode.Text );
//删除树节点
treeView1.Nodes.Remove(pSelectedNode );
treeView1.Refresh();
}
/// <summary>
/// 取消按钮的设置
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void btnCloseBookMark_Click(object sender, EventArgs e)
{
Close();
}
/// <summary>
/// 鼠标双击定位设置
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param> private void treeView1_NodeMouseDoubleClick(object sender, TreeNodeMouseClickEventArgs e)
{
btnPosition.PerformClick();
}
ArcGIS Engine开发之书签加载的更多相关文章
- ArcGIS Engine中数据的加载 (转)
1.加载Shapefile数据 1 IWorkspaceFactory pWorkspaceFactory; 2 IFeatureWorkspace pFeatureWorkspace; 3 IFea ...
- ArcGIS Engine开发之地图基本操作(4)
ArcGIS Engine开发中数据库的加载 1.加载个人地理数据库数据 个人地理数据库(Personal Geodatabase)使用Miscrosoft Access文件(*.mdb)进行空间数据 ...
- ArcGIS Engine开发前基础知识(2)
ArcGIS基本控件简介 ArcGIS Engine控件是一组可视化的开发组件,每个ArcGIS Engine控件都是一个COM组件.这些组件包括MapControl,PageLayoutContro ...
- C#,ArcGIS Engine开发入门教程
C#,ArcGIS Engine开发入门教程 转自:http://blog.csdn.net/yanleigis/article/details/2233674 目录(?)[+] 五实现 一 加载A ...
- ArcGIS Engine开发基础总结(一)
标准Engine功能 地图浏览 地图制作 数据查询 数据分析 及 所有的开发控件 —MapControl, PageLayout, Toolbar, TOC, ArcReader 对所有矢量和栅 ...
- ArcGIS Engine开发鹰眼图的功能(基础篇)
鹰眼是用于调节全视域范围内主地图显示范围情况的副地图.它体现了地图整体与详细局部的关系. 用户可以通过鼠标单击或者画框等动作实现鹰眼与主地图的交互情况. 鹰眼功能的原理是通过主地图窗口的地图控件和鹰眼 ...
- arcgis android 中shapefile的加载
前言 本文为大家分享arcgis android 中shapefile的加载,默认你有java环境,懂一定的android基础知识,默认你已经安装android studio.如缺乏以上环境和知识,请 ...
- ArcGIS Engine开发前基础知识(3)
对象模型图 一.对象模型图中的类与接口 ArcGIS Engine 提供大量的对象,这些对象之间存在各种各样的关系,如继承.组合.关联等.对象模型图(Object model diagram,ODM) ...
- ArcGIS Engine开发的ArcGIS 版本管理的功能
原文:ArcGIS Engine开发的ArcGIS 版本管理的功能 转自:http://blog.csdn.net/linghe301/article/details/7965901 这是以前的Arc ...
随机推荐
- python selenium
https://segmentfault.com/a/1190000007249396?_ea=1293878
- Thread.Sleep(0) vs Sleep(1) vs Yeild
本文将要提到的线程及其相关内容,均是指 Windows 操作系统中的线程,不涉及其它操作系统. 文章索引 核心概念 Thread.Yeild Thread.Sleep(0) Thread. ...
- 将一句话里的单词进行倒置,标点符号不倒换。比如将“I come from Shanghai.”倒换后变为“Shanghai. from come I”
string str = "I come from Shanghai."; //根据空格切割 string[] strS = str.Split(' '); string temp ...
- 严重: Null component localEngine:type=JspMonitor,name=jsp,WebModule=//localhost/SpringMVC01,J2EEApplication=none,J2EEServer=none
检查了 Java Build Path, Java Compiler,Project Facts 都确定了版本一致 包括 maven run as →run config 里面的 jdk 和maven ...
- SQL Server 批量完整备份
一.本文所涉及的内容(Contents) 本文所涉及的内容(Contents) 背景(Contexts) 实现代码(SQL Codes) 实现方式一(One) 实现方式二(Two) 实现方式三(Thr ...
- JavaScript权威设计--JavaScript变量,作用域,声明提前(简要学习笔记四)
1.宿主对象与宿主环境 宿主对象:由ECMAScript实现的宿主环境提供的对象,可以理解为:浏览器提供的对象.所有的BOM和DOM都是宿主对象. 宿主环境:一般宿主环境由外壳程序创建与维护,只要 ...
- SQL Server-聚焦INNER JOIN AND IN性能分析(十四)
前言 本节我们来讲讲联接综合知识,我们在大多教程或理论书上都在讲用哪好,哪个性能不如哪个的性能,但是真正讲到问题的实质却不是太多,所以才有了本系列每一篇的篇幅不是太多,但是肯定是我用心去查找许多资料而 ...
- ES6之块级作用域
一.前言 在ECMAScript6(以下简称ES6)之前,ECMAScript的作用域只有两种: 1. 全局作用域: 2. 函数作用域. 正是因为有这两种作用域,所以在JavaScript中出现一 ...
- Oracle迁移:Linux->Windows
源环境:RHEL6.4 + Oracle 11.2.0.4 目的环境:Windows 2003 需求:研发测试环境的Oracle数据库从Linux迁移到Windows,可以停机. 1.Windows安 ...
- Unity3D移动平台动态读取外部文件全解析
前言: 一直有个想法,就是把工作中遇到的坑通过自己的深挖,总结成一套相同问题的解决方案供各位同行拍砖探讨.眼瞅着2015年第一个工作日就要来到了,小匹夫也休息的差不多了,寻思着也该写点东西活动活动大脑 ...