缘起

个人总结梳理,顺便练练文笔,For me and for you like me!

目标

我一直很认同古人所说的君子性非异也,善假于物也,本文主要目的是告诉读者如何使用帮助来学习了解ArcEngine中的控件,怎样更好的阅读帮助。

  1. 学会如何使用帮助,能在帮助中找到和控件相关的内容。
  2. 了解每个控件都是干嘛用的,具体的细节本文不做介绍。
  3. 了解控件类实现了哪些接口和哪些方法。
  4. 尝试性的写写代码,熟悉相关的控件。

初识

简介

使用Winfrom开发,经常会用到地图控件,了解常用的地图控件也是入门必修功课之一。
常用控件如下:

  • MapControl(地图控件,主要用来显示地图)
  • PageLayoutControl(页面布局控件,主要用来打印、输出地图)
  • GlobeControl(本文不做介绍)
  • SceneControl(本文不做介绍)
  • ToCControl(主要用来显示图层列表(地图数据目录树))
  • ToolbarControl(地图工具条,提供一些小工具)
  • SymbologyControl(地图符号控件)

资源

  1. 本地资源(找不到帮助的请看上一篇文章)
  2. ArcGIS Engine入门教程_第四章_创建Engine应用程序
  3. 参考《ArcGIS Engine 10 开发更新》中的创建第一个桌面应用程序(需要电子书的可以加Q群自行下载)

庖丁解牛

ArcMap和ArcEngine中控件的对应关系。

常用控件

在vs中点击:视图-》工具箱-》ArcGIS Windows Forms。默认添加完这些控件,生成的控件实例对象命名都带前缀ax,如axMapcContorl1,axPageLayoutControl1


强烈建议参考李崇贵的《ArcGIS Engine 组件式开发及应用》学习,个人觉得他们写的还是不错的,需要资源的加Q群自取。


LicenseControl


左侧为产品许可级别右侧许可扩展
注意:左侧主许可是单选,如果选中了多个,则默认为第一个。由于下面Basic、Standard和Advanced许可是Desktop产品的许可,而LicenseControl控件只能在Engine产品下使用,所以使用LicenseControl控件无法初始化Basic、Standard和Advanced许可,但可以使用代码进行初始化。右侧扩展许可是可以多选的。一个程序只能初始化一次许可,或者使用LicenseControl控件,或者使用代码,代码初始化许可如下:

绑定产品:

/* 这里是绑定一个产品,即Engine程序调用哪个安装产品下的资源,绑定Engine,即调用Engine安装目录的资源,绑定Desktop,
即调用Desktop安装目录下的资源,绑定EngineOrDesktop,即优先寻找机器上有没有安装Engine,有的话绑定Engine,
没有再绑定Desktop。而LicenseControl控件是初始化许可,这两者一定要加以区别。*/if (!RuntimeManager.Bind(ProductCode.Engine))
{if (!RuntimeManager.Bind(ProductCode.Desktop)){MessageBox.Show("Unable to bind to ArcGIS runtime. Application will be shut down.");return;}
}

初始化许可:

IAoInitialize m_AoInitialize = new AoInitializeClass();
esriLicenseStatus licenseStatus = esriLicenseStatus.esriLicenseUnavailable;
licenseStatus = m_AoInitialize.Initialize(esriLicenseProductCode.esriLicenseProductCodeAdvanced);
if (licenseStatus != esriLicenseStatus.esriLicenseCheckedOut)
{licenseStatus = m_AoInitialize.Initialize(esriLicenseProductCode.esriLicenseProductCodeStandard);if (licenseStatus != esriLicenseStatus.esriLicenseCheckedOut){licenseStatus = m_AoInitialize.Initialize(esriLicenseProductCode.esriLicenseProductCodeEngineGeoDB);if (licenseStatus != esriLicenseStatus.esriLicenseCheckedOut){XtraMessageBox.Show("获取ARCGIS授权失败!", "提示", MessageBoxButtons.OK, MessageBoxIcon.Information);return;}}
}
// 检出扩展许可
licenseStatus = m_AoInitialize.CheckOutExtension(esriLicenseExtensionCode.esriLicenseExtensionCode3DAnalyst);
licenseStatus = m_AoInitialize.CheckOutExtension(esriLicenseExtensionCode.esriLicenseExtensionCodeSpatialAnalyst);

个人经验:不建议使用LicenseControl控件,建议使用代码初始化许可。

MapControl

MapControl控件主要用来加载显示地图数据,对应ArcMap中的数据视图

MapControl类封装了Map对象,并提供相应的属性、方法、事件,它可以实现以下功能:

  1. 地图显示;
  2. 地图的放大、缩小和漫游;
  3. 控制地图上鼠标显示的样式;
  4. 生成点线面等图形元素;
  5. 识别地图上选中的元素,并进行属性查询;
  6. 标注地图元素等;
  7. 监听地图事件;

PageLayoutControl

PageLayoutControl控件主要用于制图,对应ArcMap的布局视图,利用该控件可以方便地操作各种元素对象,以便产生精美的地图。

PageLayoutControl封装了PageLayout类,PageLayout提供了在布局视图中控制元素的属性和方法。除此之外,还有Printer属性用于处理地图打印时的系列设置、Page属性用于处理控件的页面效果、Element属性用于管理控件的地图元素。

关于MapControl和PageLayoutControl实现鹰眼功能的代码网上有很多, 官方示例代码

TOCControl

TOCControl以树形结构显示其“伙伴控件“”的地图、图层和符号体系,该控件通过ITOCBuddy接口来访问其伙伴控件。

SymbologyControl

SymbologyControl主要是用来显示*.ServerStyle(ArcEngine)和*.Style(ArcMap)文件的符号目录。该控件允许用户选择一个符号应用到一部分程序上,比如图层的符号,Element的符号等等。
注意

  • *.Style文件只适用于Desktop产品。
  • *.ServerStyle文件适用于所有的产品。(位于:<install_location>\ArcGIS<EngineVersion>\Styles)

    加载ServerStyle文件
axSymbologyControl1.LoadStyleFile(@"myInstallLocation\ArcGIS\Engine10.2\Styles\ESRI.ServerStyle");

示例:

IStyleGalleryItem serverStyleGalleryItem = axSymbologyControl1.GetStyleClass(axSymbologyControl1.StyleClass).GetSelectedItem();
System.Windows.Forms.MessageBox.Show(serverStyleGalleryItem.Name);

ToolbarControl

ToolbarControl需要绑定伙伴控件(MapControl/PageLayoutControl/GlobeControl/SceneControl),可以使用SetBuddyControl方法动态绑定,ToolbarControl相当于是许多Commands、Tool Control、Menus、Palettes(调色板)的容器。

这块主要涉及到ToolbarControl、ToolbarItem、ToolbarMenu、CommandPool、Customizedialog、MissingCommand。

示例代码:

// 绑定伙伴控件
axToolbarControl1.SetBuddyControl(axMapControl1);
// 添加打开文档命令
axToolbarControl1.AddItem("esriControls.ControlsOpenDocCommand",  - 1,  - 1, false, 0, esriCommandStyles.esriCommandStyleIconAndText);
//添加地图放大命令
axToolbarControl1.AddItem("esriControls.ControlsMapZoomInTool",  - 1,  - 1, true, 0, esriCommandStyles.esriCommandStyleIconOnly);
//添加地图缩小命令
axToolbarControl1.AddItem("esriControls.ControlsMapZoomOutTool",  - 1,  - 1, false,  0, esriCommandStyles.esriCommandStyleIconOnly);
//添加地图全图命令
axToolbarControl1.AddItem("esriControls.ControlsMapFullExtentCommand",  - 1,  - 1, false, 0, esriCommandStyles.esriCommandStyleIconOnly);

ArcEngine 入门教程-控件初体验相关推荐

  1. ActiveReports 报表控件 初体验

    最近一直想借助第三方报表控件,来实现项目呈现各式各样的报表:一方面希望借助第三方报表控件能使项目的界面更加美观,另外也希望交互式的报表能带来更好的客户体验,最重要的是使用它能给我减轻巨大的编程工作量, ...

  2. 史上最细gRPC(Go)入门教程(二)---gRPC初体验--hello world

    来自:指月小筑 https://lixueduan.com 原文:https://lixueduan.com/post/grpc/02-hello-world/ 本文主要对 gRPC 框架做了简单的介 ...

  3. Delphi XE2 之 FireMonkey 入门(35) - 控件基础: TFmxObject: 其它

    Delphi XE2 之 FireMonkey 入门(35) - 控件基础: TFmxObject: 其它 TFmxObject 增加了 TagObject.TagFloat.TagString, 算 ...

  4. ArcEngine 入门教程-帮助如何使用

    声 明1 : 本人才疏学浅,用郭德纲的话说"我是一个小学生",如有错误,欢迎讨论,请勿谩骂^_^. 声 明2 : 原创博客请在转载时保留原文链接或在文章开头加上本人博客地址,否则保 ...

  5. centos安装rabbitmq_【SpringBoot MQ系列教程】RabbitMq 初体验

    SpringBoot 系列教程之 RabbitMq 初体验​mp.weixin.qq.com mq 在异步解耦削峰的优势非常突出,现在很多的项目都会用到,掌握 mq 的知识点,了解如何顺畅的使用 mq ...

  6. PyQt5学习笔记(一)PyQt5入门QLabel控件及使用

    文章目录 写在前面 环境 预备内容 主要的类 屏幕坐标系的一些参数 基本框架与流程 QLabel控件 基本方法(函数)及其用法 常用的信号(事件) 示例程序 小结 写在前面 最近抽空学习一下Pytho ...

  7. Xcode5 开发入门-环境及初体验

    IPhone 的开发有专门的集成开发环境Xcode ,可以在Appstore 上下载最新版本,目前为Xcode 5,下载位置如下: 选择后开始下载,文件比较大,下载需要一段时间. 下载后一般自动完成安 ...

  8. Delphi XE2 之 FireMonkey 入门(37) - 控件基础: TControl 概览

    { TControl } publicconstructor Create(...); override; //destructor Destroy; override; //procedure Ad ...

  9. [Qt入门]QTableWidget控件创建

    #include "widget.h" #include "ui_widget.h"Widget::Widget(QWidget *parent) :QWidg ...

最新文章

  1. 数据之路 Day8 Numpy包
  2. git删除远程分支文件
  3. Scala集合:ListBuffer的头head和尾tail
  4. QT的QLineSeries类的使用
  5. Java NIO教程
  6. Centos7-Lvs+Keepalived架构实验详解
  7. mi6 android版本,小米6:我依旧是王,MIUI10.4.2稳定版与AndroidP同时到来
  8. ansible callbacks
  9. 《Splunk智能运维实战》——第1章 游戏时间——导入数据 1.1 简介
  10. Python str 与 bytes 类型(Python2/3 对 str 的处理)
  11. gradle-4.10.2-all等gradle下载
  12. 新浪微博java sdk文档_新浪微博开放平台:java SDK介绍及使用说明
  13. 早上如何泡上一杯质量上佳的柠檬水
  14. C#字符串与ASII16(HEX)进制相互转换
  15. Spark rdd之sortBy
  16. Linux-----Ubuntu通过shell脚本将SSH多次登录失败的IP自动加入黑名单
  17. 【区块链 | 前端】前端开发人员入门区块链的最佳实践
  18. 多线程的实现与多线程的同步机制-让你轻松掌握多线程编程
  19. 伟大的父亲顶级富豪写给儿子的一封信
  20. Thinkphp 5.0 购物网站

热门文章

  1. Linux内核常见分配函数
  2. R语言:多个图形绘制在一个画板的方法
  3. AndroidStudio与Eclipse快捷键
  4. IoT僵尸网络Miori通过ThinkPHP远程代码执行漏洞进行传播
  5. Power and Modulo(思维)
  6. 如何测试服务器端口是否打开?
  7. VUE项目保存照片到本地(微信环境不可行)
  8. codeforces 1526C1 Potions (Easy Version)
  9. c语言 英文单词频率统计 哈希存储
  10. 同方台式计算机密码,清华同方的品牌机进bios需要密码,怎么清除它