使用python制作ArcGIS插件(1)工具介绍
使用python制作ArcGIS插件(1)工具介绍
by 李远祥
ArcGIS从10.0开始支持addin(ArcGIS软件中又叫作加载项)的方式进行插件制作。相对于以往9.x系列,addin的无论是从使用或者编写都更加方便快捷。通过开发语言,可以制作ArcGIS Desktop各个软件模块的插件。
Addin支持多种开发语言,如.net、java和python。其中.net和java需要配合ArcGIS的SDK,使用ArcObjects进行开发。其好处是ArcObjects可以非常细粒度的控制ArcGIS Desktop的各种操作;其困难之处就是ArcObjects非常庞大,学习成本非常高,一般只适合有多年编程经验和熟悉ArcGIS的开发人员使用。Python语言进行Addin开发,非常适没有编程能力,但又经常使用ArcGIS工具的人员使用。为什么这样说呢?由于python语言非常简洁,写法独特,由于适合于没有学习过编程语言的人上手(没有任何的编程语言羁绊有时候是件好事),而且ArcGIS内置了ArcPy,一个使用python进行ArcGIS调用的开发包,可以轻松调用ArcGIS Desktop的所有工具箱工具,并能通过python语言很好的进行扩展,可以说,使用python进行Addin开发,门槛相当低,而且快捷。但不足之处也是显而易见的,就是ArcPy定位是工具级别的操作,粒度相对于ArcObjects 是非常大的,不适用做复杂的交互操作,如果是一些逻辑性比较强,与地图交互不多的工作,可以使用python去创建插件来完成。
所谓工欲善其事必先利其器。那么使用Python来做ArcGIS的Addin需要使用哪些工具呢?Esri提供了Python加载项向导工具来实现Addin界面的搭建,可以到Esri官网去下载该工具Python加载项向导 。从介绍来看,该设计器要求的最低ArcGIS版本为10.1 ,如下图所示

工具非常简单和非常小,还不到7M的空间,主要用来设计插件的界面,并且将各个交互界面接口进行保留,具体的实现开发人员可以选用自己喜欢的python编辑器来实现程序编写。下载下来是一个zip包,解压后可以看到其文件结构,直接到其bin文件夹下,找到唯一一个可运行程序 addin_assistant.exe ,如下图所示

双击运行该工具,进入其涉及界面,会提示选择一个工程文件夹,如果是创建新的工程,建议选择一个新的文件夹,如果是要打开已经存在的工程,则选择工程所谓的文件夹即可,如下图所示,使用一个新的文件夹来保存工程。

点击【确定】按钮后,可以进入并输入插件的一些信息,如插件的名称、版本、公司、描述、作者及这个插件的图标等,这些都将写入插件的配置文件中。

这些信息会在插件安装的时候弹出提示。接下来就是关键部分了,就是创建插件的内容,如按钮、面板、工具条、菜单等,这些可以在Add-In Contents 面板中设置。如下图所示

例如在该示例中,我们的目标是创建一个批量裁剪的工具,工具的要实现的工作都已经在上图的描述中说明了,那么,采用工具条的形式进行创建,直接制作成为工具,可以选择使用Toolbar。右键点击Toolbar,新建一个Toolbar,并输入该Toolbar的一些说明,如Caption。但ID方面建议这些都使用英文进行输入,因为最终这部分的配置会预留一些界面的事件接口。

在新建的toolbar右键点击,可以新建一些界面元素,如按钮、菜单、工具、面板、下拉菜单等

同样创建每一个界面元素,ID都建议使用英文,因为python语言本身对编码有比较严格的限制。为了满足批量裁剪的一些列要求,我们可以适当的定义一些界面,如下图所示

设计完成后,我们就可以点击【save】按钮保存工程了。至此,python加载项向导工具就可以歇歇了,生下来就是进行艰苦的代码编写了。接下来打开工程文件夹去看看其工程的结构。

这几个文件和目录有各自的作用
Images目录:存放界面元素的各种图片

Install 目录:用于保存插件的源代码,里面一般会生成【mytools_addin.py】文件,如果重新设计界面,则会有一系列的文件,命名方式为在文件名后面加上123这些数字编号。一些初始化代码会写在该文件中,从文件中可以看到,已经创建好了这些界面元素的一些配置和事件,后续工作只需要对该文件补充实现代码即可

config.xml : 记录这插件的各种配置信息,例如文字说明,关联的图片、界面元素类型等
由于在设计器中使用了一些中文输入,所以,配置文件中会存在一些编码的转化,如下图

makeaddin.py : 插件生成的运行脚本,运行这个脚本会编译插件,并在该工程目录下生成最终可以安装的插件。由于该文件也是个python脚本,是明码编写的,也可以用文本打开查看,但不要修改其代码,因为后面我们还需要用python环境运行它。

双击该文件,使用python.exe来运行(安装ArcGIS的时候会自动安装上python环境,这个不需要自行安装)

运行结束后,就可以生成一个最终的后缀为esriaddin 的文件,这就是arcgis的插件安装包,其名称与工程的文件夹相同,如下图

README.txt : 记录工程的一些信息,一般可以忽略掉。
接下来就可以双击这个插件进行安装了,直接双击之后,可以看到之前创建工程时输入的插件说明信息,如下图

点击【Instrall Add-In】进行安装,安装完成后,可以在ArcMap菜单空白处点击右键,将该工具调出来使用

如要管理这些插件,可以在ArcMap的菜单【自定义】--【加载项管理器】中进行删除

由于该工具还没有具体的代码实现,因此,点击任何的按钮都没有反应。在后面的章节中,我们会介绍如何实现这些功能。
使用python制作ArcGIS插件(1)工具介绍的更多相关文章
- 使用python制作ArcGIS插件(5)其他技巧
使用python制作ArcGIS插件(5)其他技巧 by 李远祥 使用python做插件开发,除了了解ArcToolBox工具之外,还需要在了解ArcPy的相关函数和接口.只有掌握了这些,才可以顺利的 ...
- 使用python制作ArcGIS插件(3)ArcPy的使用说明
使用python制作ArcGIS插件(3)ArcPy的使用说明 by 李远祥 ArcPy 是一个以成功的 arcgisscripting 模块为基础并继承了 arcgisscripting 功能进而构 ...
- 使用python制作ArcGIS插件(2)代码编写
使用python制作ArcGIS插件(2)代码编写 by 李远祥 上一章节已经介绍了如何去搭建AddIn的界面,接下来要实现具体的功能,则到了具体的编程环节.由于使用的是python语言进行编程,则开 ...
- 使用python制作ArcGIS插件(4)界面交互
使用python制作ArcGIS插件(4)界面交互 by 李远祥 插件界面部分,除了一开始在设计器中设计的这些界面元素之外,还可以与操作系统进行一些输入输出的交互,这部分的实现全部在pythonadd ...
- 使用python制作ArcGIS插件(6)案例分析
利用ArcPy制作航空制图插件 By 李远祥 这是笔者两年多前写的一个面向航路图做的一个插件,基本上将航路图的制作进行流程化,制作成为可交互的插件,只要有航路和机场的信息,就可以直接生成一个航路图,每 ...
- 《零基础学习Python制作ArcGIS自定义工具》课程简介
Python for ArcGIS Python for ArcGIS是借助Python语言实现ArcGIS自动化行为的综合,它不止是如课程标题所述的“制作ArcGIS自定义工具”,还包括使用Pyth ...
- 32款iOS开发插件和工具介绍[效率]
插件和工具介绍内容均收集于网络,太多了就不一一注明了,在此谢过! 1.Charles 为了调试与server端的网络通讯协议.经常须要截取网络封包来分析. Charles通过将自己设置成系统的网络 ...
- IDEA实用的第三方插件和工具介绍设置
一:grep console grep-console插件可以让idea显示多颜色调试日志,使Log4j配置输出的不同级别error warn info debug fatal显示不同颜色 开发起来区 ...
- ArcGis Python脚本——ArcGIS 中使用的 Python 是什么版本
Python 编程语言用于自 9.0 起的各版本 ArcGIS 中,并被整合到 ArcMap 和 ArcGIS for Server 的自动安装中. ArcGIS 将在完整安装过程中安装下列 Pyth ...
随机推荐
- Memcache第一篇---基础教程
Memcache是什么 Memcache是danga.com的一个项目,最早是为 LiveJournal 服务的,目前全世界不少人使用这个缓存项目来构建自己大负载的网站,来分担数据库的压力. 它可以应 ...
- github上forck一个分支之后,如何和主分支同步
github forck一个分之后,如果过一段时间就会和主分支的差异比较大. 这样提交pr的时候 就会冲突,这个时候我们就需要和主分支同步代码 git remote add upstream git@ ...
- iOS 改变导航栏高度
需求: appdelegate里 rootviewcontroller 是tabbarcontroller,tabbarcontroller里有4个navigationcontroller,改变每个n ...
- js实现的文章输入检查与测速。
在群里聊天,一个群友求助.说要实现 文章对比输入,出错了标红,正确的标绿. 同时还需要统计正确率. 我一开始以为很容易,结果搞了半天.最后折腾出来了. 这里的思路如下:利用js的数组.将文章和输入的内 ...
- java基础(一)面向对象
对象就是事物存在的实体,例如:人类,计算机等:而对象被分为两个部分,既动态与静态 类:就是同一事物的统称,如果将世界中的一个事物抽象成对象,类就是这类对象的统称,具有相同特性和行为的一类事物就是类. ...
- WebForm和MVC中都可以使用的路由
1.在global.asax void Application_Start(object sender, EventArgs e) { // 在应用程序启动时运行的代码 // RouteConfig. ...
- nginx 判断访问文件或目录不存在rewrite
文件及目录匹配,其中:* -f和!-f用来判断是否存在文件* -d和!-d用来判断是否存在目录* -e和!-e用来判断是否存在文件或目录* -x和!-x用来判断文件是否可执行样例 : 判断访问的图片是 ...
- android入门,activity跳转,并传递message
首先是布局文件,如下: activity_main.xml <?xml version="1.0" encoding="utf-8"?> <L ...
- 网站环境apache + php + mysql 的XAMPP,如何实现一个服务器上配置多个网站?
xampp 是一个非常方便的本地 apache + php + mysql 的调试环境,在本地安装测试 WordPress 等各种博客.论坛程序非常方便.今天我们来给大家介绍一下,如何使用 XAMPP ...
- java环境设置与运行
在初学java编程语言时,痛苦的事莫过于跟着示例一步步做,总是得不到想要的结果,这是很多初学者都会碰到的问题.下面详细教你运行第一个java应用程序(环境windows xp + jdk 6.0): ...