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 ...
随机推荐
- OpenSUSE下编译安装OpenFoam
在不是Ubuntu系统下安装OpenFoam,需要采用编译安装的方式.以下以OpenSuSE为例进行编译安装. 1 软件包准备 需要下载两个程序包: OpenFOAM-4.x-version-4.1. ...
- 我的MYSQL学习心得(十七) 复制
我的MYSQL学习心得(十七) 复制 我的MYSQL学习心得(一) 简单语法 我的MYSQL学习心得(二) 数据类型宽度 我的MYSQL学习心得(三) 查看字段长度 我的MYSQL学习心得(四) 数据 ...
- 快速构建App界面的框架(●'◡'●) -----SalutJs
前言 卤煮在公司之初接触到的是一个微信APP应用.前端技术采用的是Backbone+zepto等小型JS类库.在项目开发之初,这类中小型的项目采用这两种库可以满足基本的需求.然而,随着迭代的更新和业务 ...
- Vue.js——60分钟组件快速入门(下篇)
概述 上一篇我们重点介绍了组件的创建.注册和使用,熟练这几个步骤将有助于深入组件的开发.另外,在子组件中定义props,可以让父组件的数据传递下来,这就好比子组件告诉父组件:"嘿,老哥,我开 ...
- 架构设计:一种远程调用服务的设计构思(zookeeper的一种应用实践)
在深入学习zookeeper我想先给大家介绍一个和zookeeper相关的应用实例,我把这个实例命名为远程调用服务.通过对这种应用实例的描述,我们会对zookeeper应用场景会有深入的了解. 远程调 ...
- Entity Framework 6 Recipes 2nd Edition(11-2)译 -> 为一个”模型定义”函数返回一个计算列
11-3. 为一个”模型定义”函数返回一个计算列 问题 想从”模型定义”函数里返回一个计算列 解决方案 假设我们有一个员工(Employee)实体,属性有: FirstName, LastName,和 ...
- Oracle数据库Job的下次执行时间老是变动问题
job的 interval设置为 sysdate+1 结果好多客户的这个时间最后会变的乱起八糟, 或是 导入 , 或是手动执行了等等, 还有自动会变的, 而且不少, 觉得莫名其妙, , 今天网上搜了下 ...
- SQL Server 阻止了对组件“xp_cmdshell”的 过程“sys.xp_cmdshell”的访问,因为此组件已作为此服务器安全配置的一部分而被关闭。
今天在创建数据库的时候突然发现,xp_cmdshell的存储过程不能用了,网上一搜,发现大部分都是只关闭安全配置,然后就有了下文 代码:具体的看注释,值得一提的是==>reconfigure w ...
- ITTC数据挖掘平台介绍(五) 数据导入导出向导和报告生成
一. 前言 经过了一个多月的努力,软件系统又添加了不少新功能.这些功能包括非常实用的数据导入导出,对触摸进行优化的画布和画笔工具,以及对一些智能分析的报告生成模块等.进一步加强了平台系统级的功能. 马 ...
- fullpage.js全屏滚动插件使用小结
刚做好公司网站,通过全屏滚动,显著提高了官网的浏览体验.遂总结一下使用fullpage.js的方法.欢迎指正 一. fullpage.js简介 fullpage.js是一套实现浏览器全屏滚动的js插件 ...