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 ...
随机推荐
- svnserver hook python
在使用中可能会遇到的错误排除 :1.Error: svn: 解析"D:\www\test"出错,或svn: E020024: Error resolving case of 'D: ...
- 巧用 mask-image 实现简单进度加载界面
最近给 nzoo 折腾官网,拿 angular2.0 + webpack 实现SPA,然后觉得最终打包后的出口文件有点大,用户首次访问会有一个时间较长的白屏等候界面,感觉体验不太好. 于是希望在用户下 ...
- lucene 基础知识点
部分知识点的梳理,参考<lucene实战>及网络资料 1.基本概念 lucence 可以认为分为两大组件: 1)索引组件 a.内容获取:即将原始的内容材料,可以是数据库.网站(爬虫).文本 ...
- 猫哥网络编程系列:详解 BAT 面试题
从产品上线前的接口开发和调试,到上线后的 bug 定位.性能优化,网络编程知识贯穿着一个互联网产品的整个生命周期.不论你是前后端的开发岗位,还是 SQA.运维等其他技术岗位,掌握网络编程知识均是岗位的 ...
- what's deviceone
DeviceOne技术介绍 一. DeviceOne是什么 DeviceOne(以下简称Do)是一个移动开发的平台或技术,与之对等的是Android移动开发技术,iOS移动开发技术,Windo ...
- Fedora 22中的Locale and Keyboard Configuration
Introduction The system locale specifies the language settings of system services and user interface ...
- Linux C++ 开发简介
主要介绍将Windows程序迁移到Linux系统相关知识 简介 Windows程序迁移到Linux系统可能需要修改很多代码, 既需要了解Linux平台的开发知识, 也需要了解Windows平台代码如何 ...
- python scikit-learn 环境搭建问题解决记录
之前一直用pycharm 里内置的pip进行python 包的安装,今天装scikit-learn时没报错,但是报scipy包不识别,pip下载也报错下载anaconda 集成插件,最终问题解决:参考 ...
- 了解HTML表单之form元素
前面的话 表单是网页与用户的交互工具,由一个<form>元素作为容器构成,封装其他任何数量的表单控件,还有其他任何<body>元素里可用的标签 表单能够包含<input& ...
- python2.7 内置ConfigParser支持Unicode读写
1 python编码基础 对应 C/C++ 的 char 和 wchar_t, Python 也有两种字符串类型,str 与 unicode: str与unicode # -*- coding: ut ...