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 ...
随机推荐
- Linux根文件系统分析之init和busybox
Hi,大家好!我是CrazyCatJack.今天给大家讲解Linux根文件系统的init进程和busybox的配置及编译. 先简单介绍一下,作为一个嵌入式系统,要想在硬件上正常使用的话.它的软件组成大 ...
- 一点公益商城开发系统模式Ring Buffer+
一个队列如果只生产不消费肯定不行的,那么如何及时消费Ring Buffer的数据呢?简单的方案就是当Ring Buffer"写满"的时候一次性将数据"消费"掉. ...
- 我的MYSQL学习心得(六) 函数
我的MYSQL学习心得(六) 函数 我的MYSQL学习心得(一) 简单语法 我的MYSQL学习心得(二) 数据类型宽度 我的MYSQL学习心得(三) 查看字段长度 我的MYSQL学习心得(四) 数据类 ...
- CYQ.Data V5 分布式自动化缓存设计介绍
前方: 其实完成这个功能之前,我就在思考:是先把想法写了来,和大伙讨论讨论后再实现,还是实现后再写文论述自己的思维. 忽然脑后传来一个声音说:你发文后会进入发呆阶段. 所以还是静下心,让我轻轻地把代码 ...
- 一步步开发自己的博客 .NET版(1、基本显示)
前言 我们每个猿都有一个搭建自己独立博客的梦,我也不例外.以前想 现在想 以后也想.之所以一直迟迟没有着手,是因为难以跨出第一步.每次心里想着,等我以后技术好了再说,然后就没有然后了.以前用过word ...
- 轻量级的日期插件--datebox
jquery的日期插件有好几款,H5中的input也可以自带日期选择.但为什么要再写一个,有两个理由,一个是引用的文件太大,而有时候只需要很简单的功能,二个是想加一些自定义的效果不好改. 我写的这个功 ...
- 跨越语言的障碍:C++/CLI 调用 C#
首先我想投诉一下博客园首页右边栏的广告..最近总是出现很恐怖的整容脸的广告.真的是吓坏了.=.=大家有同感吗? 博客园前一阵子掀起了语言的广泛讨论,事实上语言的争执在整个程序员圈子也没有停止过.以我个 ...
- 在春意盎然的季节里初识GIT
Git 与 SVN 区别 GIT不仅仅是个版本控制系统,它也是个内容管理系统(CMS),工作管理系统等. 如果你是一个具有使用SVN背景的人,你需要做一定的思想转换,来适应GIT提供的一些概念和特征. ...
- python学习 正则表达式
一.re 模块中 1.re.match #从开始位置开始匹配,如果开头没有match()就返回none 语法:re.match(pattern, string, flags=0) pattern 匹配 ...
- 从零开始编写自己的C#框架(13)——T4模板在逻辑层中的应用(二)
最近这段时间特忙,公事私事,忙得有时都没时间打开电脑了,这两周只能尽量更新,以后再将章节补回来. 直接进入主题,通过上一章节,大家明白了怎么使用模板类编写T4模板,本章进的是一些简单技巧的应用 1.首 ...