本节将向你介绍,利用ToolStrip制作自定义GIS工具条。

步骤如下:

①向ToolStrip中添加一个Button

②向该Button的lmg属性添加图片素材,并将Button的图片比例(ImageScaling)属性设置为自动适应(SizetoFit),自动调整大小(AutoSzize)为真(True)。最后通过调整ToolStrip的图片尺寸缩放比例(lmageSealingSize)为合适尺寸,例如width:48,height:48,最后再手动调节控件的大小。

③双击Buton,在其单击事件下写代码。

本例实现的代码如下:

/// <summary>
/// 放大工具
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void ZoomIntoolStripButton1_Click(object sender, EventArgs e)
{
//当选中为数据制图时
if (tabControl1.SelectedIndex == )
{
//ICommand提供对定义COM命令的成员的访问。
ICommand pCommand = new ControlsMapZoomInToolClass();
//将ICommand强转成ITool
ITool pTool = pCommand as ITool;
//调用ICommand中的OnCreate方法生成放大工具
pCommand.OnCreate(this.axMapControl1.Object);
//设置放大工具命令的作用对象为axMapControl1
this.axMapControl1.CurrentTool = pTool;
}
//当选中为布局视图时
if (tabControl1.SelectedIndex == )
{
//ICommand提供对定义COM命令的成员的访问。
ICommand pCommand = new ControlsMapZoomInToolClass();
//将ICommand强转成ITool
ITool pTool = pCommand as ITool;
//调用ICommand中的OnCreate方法生成放大工具
pCommand.OnCreate(this.axPageLayoutControl1.Object);
//设置放大工具命令的作用对象为axPageLayoutControl1
this.axPageLayoutControl1.CurrentTool = pTool;
} }
/// <summary>
/// 缩小工具
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void ZoomOuttoolStripButton2_Click(object sender, EventArgs e)
{
//当选中为数据视图时
if (tabControl1.SelectedIndex == )
{
ICommand pCommand = new ControlsMapZoomOutToolClass();
ITool pTool = pCommand as ITool;
pCommand.OnCreate(this.axMapControl1.Object);
this.axMapControl1.CurrentTool = pTool;
}
//当选中为布局视图时
if (tabControl1.SelectedIndex == )
{
ICommand pCommand = new ControlsMapZoomOutToolClass();
ITool pTool = pCommand as ITool;
pCommand.OnCreate(this.axPageLayoutControl1.Object);
this.axPageLayoutControl1.CurrentTool = pTool;
}
} /// <summary>
/// 漫游工具
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void PantooltoolStripButton4_Click(object sender, EventArgs e)
{
//当选中为数据视图时
if (tabControl1.SelectedIndex == )
{
ICommand pCommand = new ControlsMapPanToolClass();
ITool pTool = pCommand as ITool;
pCommand.OnCreate(this.axMapControl1.Object);
this.axPageLayoutControl1.CurrentTool = pTool;
}
//当选中为布局视图时
if (tabControl1.SelectedIndex == )
{
ICommand pCommand = new ControlsMapPanToolClass();
ITool pTool = pCommand as ITool;
pCommand.OnCreate(this.axPageLayoutControl1.Object);
this.axPageLayoutControl1.CurrentTool = pTool;
}
} /// <summary>
/// 全图工具
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void ZoomFulltoolStripButton3_Click(object sender, EventArgs e)
{
//当选中为数据视图时
if (tabControl1.SelectedIndex == )
{
ICommand pCommand = new ControlsMapFullExtentCommandClass();
ITool pTool = pCommand as ITool;
pCommand.OnCreate(this.axMapControl1.Object);
this.axMapControl1.CurrentTool = pTool;
pCommand.OnClick();
}
//当选中为布局视图时
if (tabControl1.SelectedIndex == )
{
ICommand pCommand = new ControlsMapFullExtentCommandClass();
ITool pTool = pCommand as ITool;
pCommand.OnCreate(this.axPageLayoutControl1.Object);
this.axPageLayoutControl1.CurrentTool = pTool;
pCommand.OnClick();
}
}
/// <summary>
/// 指针选择工具
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void SelecttoolStripButton1_Click(object sender, EventArgs e)
{
if (tabControl1.SelectedIndex == )
{
ICommand pCommand = new ControlsSelectFeaturesToolClass();
ITool pTool = pCommand as ITool;
pCommand.OnCreate(this.axMapControl1.Object);
this.axMapControl1.CurrentTool = pTool;
}
if (tabControl1.SelectedIndex == )
{
ICommand pCommand = new ControlsSelectFeaturesToolClass();
ITool pTool = pCommand as ITool;
pCommand.OnCreate(this.axPageLayoutControl1.Object);
this.axPageLayoutControl1.CurrentTool = pTool;
}
}

注:

1、数据视图和布局视图的控件是不同的。

2、全图工具需要添加以下代码,才能生效。

pCommand.OnClick();

3、其他工具的制作方法大同小异!


核心DIY工具函数总结:

谢谢观看!本人初学GIS二次开发,如果有不对的地方,请多多包涵!

												

ArcGIS Engine制作DIY地图工具的更多相关文章

  1. ArcGIS Engine开发之地图基本操作(2)

    地图数据的加载 1.加载地图文档 ArcGIS Engine支持加载多种类型的数据,有矢量数据的Coverage.Shapefile.dwg/dxf文件,栅格数据的BMP.GRID.控件数据库等.很多 ...

  2. ArcGIS Engine开发之地图基本操作(3)

    地图数据的加载 一.加载Shapefile数据 Shapefile文件是目前主流的一种空间数据的文件存储方式,也是不同GIS软件进行数据格式转换常用的中间格式.加载Shapefile数据的方式有两种: ...

  3. ArcGIS Engine开发之地图基本操作(4)

    ArcGIS Engine开发中数据库的加载 1.加载个人地理数据库数据 个人地理数据库(Personal Geodatabase)使用Miscrosoft Access文件(*.mdb)进行空间数据 ...

  4. ArcGIS Engine开发之地图浏览

    地图的浏览功能包括缩放.移动.量测旋转等. 1.放大与缩小 无论是放大还是缩小,都是通过改变MapControl中当前视图的范围Extent属性来实现的,主要用到包络线(Envelope)类. 包络线 ...

  5. ArcGIS Engine开发之地图基本操作(1)

    ArcGIS提供的各类数据形式以及相应接口 1. 空间数据 在GIS软件中,空间数据有多种不同的形式存在.按照不同的划分标准可以分为矢量数据和栅格数据.GIS格式数据和非GIS格式数据(CAD格式). ...

  6. ArcGIS Engine开发之地图导出

    关于地图导出的方法有很多,但是核心技术就那么一点.下面是从项目实战中总结的一部分地图导出的方法:(以全域导出和区域导出为例) 1.由于地图导出用到的函数和方法容易重复,增加了工作量故首先将其进行封装成 ...

  7. ArcGIS Engine环境下创建自定义的ArcToolbox Geoprocessing工具

    在上一篇日志中介绍了自己通过几何的方法合并断开的线要素的ArcGIS插件式的应用程序.但是后来考虑到插件式的程序的配置和使用比较繁琐,也没有比较好的错误处理机制,于是我就把之前的程序封装成一个类似于A ...

  8. 使用XAML在WPF项目中承载ArcGIS Engine地图控件开发

    原文 http://blog.csdn.net/flexmapserver/article/details/5868882 用Windows Form进行ArcGIS Engine二次开发时常见的形式 ...

  9. 使用python制作ArcGIS插件(1)工具介绍

    使用python制作ArcGIS插件(1)工具介绍 by 李远祥 ArcGIS从10.0开始支持addin(ArcGIS软件中又叫作加载项)的方式进行插件制作.相对于以往9.x系列,addin的无论是 ...

随机推荐

  1. mysql操作遇到的坑(第一版)

    1.当我们要统计数据表数量时,如果遇到多表查询,会出现一个主表对应多个子表的维度,我们会用到group by,但是不要再用统计函数去操作数据,因为统计还是会统计原数据 案例 SELECT sum(`o ...

  2. yum install php-gd 安装php gd库报错Error: php56w-common conflicts with php-common-5.3.3-48.el6_8.x86_64 大

    yum install php-gd安装php gd库报错Error: php56w-common conflicts with php-common-5.3.3-48.el6_8.x86_64大概的 ...

  3. 基于vue-cli、elementUI的Vue超简单入门小例子

    - 这个例子还是比较简单的,独立完成后,能大概知道vue是干嘛的,可以写个todoList的小例子. - 开始写例子之前,先对环境的部署做点简单的介绍,其实和Vue官方的差不多. #如若没有安装过vu ...

  4. 触电JavaScript-如何将json 二维数组转换为 JSON object

    最近因为项目中使用的是 ActiveReports .Net 产品,因为他们最近新出了  ActiveReports JS 版本,所以内心有点痒痒,想试试这个纯前端版本报表控件到底如何,毕竟我们项目有 ...

  5. Scala Eclipse org.eclipse.e4.workbench异常奔溃修复

     Scala Eclipse org.eclipse.e4.workbench异常奔溃修复: 找到<workspace>/.metadata/.plugins/org.eclipse.e4 ...

  6. classpath:类路径

    classpath:可以用于web.xml中获取spring springmvc配置文件的位置 用于sprnig配置文件中获取mapper的位置 classpath:可以获取到java目录下的,res ...

  7. kubernetes垃圾回收器GarbageCollector源码分析(一)

    kubernetes版本:1.13.2 背景 由于operator创建的redis集群,在kubernetes apiserver重启后,redis集群被异常删除(包括redis exporter s ...

  8. 利用Helm简化Kubernetes应用部署(2)

    目录 定义Charts  使用Helm部署Demo  Helm常用操作命令  定义Charts 回到之前的“charts”目录,我们依次进行解读并进行简单的修改. Chart.yaml 配置示例: a ...

  9. restTemplate getForObject中map传参问题

    在使用restTemplate中getForObject的map传参形式时: 开始时我是这么调用的: RestTemplate rest = new RestTemplate(); Map<St ...

  10. Kotlin 中的伴生对象和静态成员

    用了一段时间kotlin,越用越觉得好用,爱不释手啊,留点笔记. Kotlin 中,在类中定义的对象(object)声明,可使用 companion 修饰,这样此对象(object)就是伴生对象了.类 ...