使用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)工具介绍的更多相关文章

  1. 使用python制作ArcGIS插件(5)其他技巧

    使用python制作ArcGIS插件(5)其他技巧 by 李远祥 使用python做插件开发,除了了解ArcToolBox工具之外,还需要在了解ArcPy的相关函数和接口.只有掌握了这些,才可以顺利的 ...

  2. 使用python制作ArcGIS插件(3)ArcPy的使用说明

    使用python制作ArcGIS插件(3)ArcPy的使用说明 by 李远祥 ArcPy 是一个以成功的 arcgisscripting 模块为基础并继承了 arcgisscripting 功能进而构 ...

  3. 使用python制作ArcGIS插件(2)代码编写

    使用python制作ArcGIS插件(2)代码编写 by 李远祥 上一章节已经介绍了如何去搭建AddIn的界面,接下来要实现具体的功能,则到了具体的编程环节.由于使用的是python语言进行编程,则开 ...

  4. 使用python制作ArcGIS插件(4)界面交互

    使用python制作ArcGIS插件(4)界面交互 by 李远祥 插件界面部分,除了一开始在设计器中设计的这些界面元素之外,还可以与操作系统进行一些输入输出的交互,这部分的实现全部在pythonadd ...

  5. 使用python制作ArcGIS插件(6)案例分析

    利用ArcPy制作航空制图插件 By 李远祥 这是笔者两年多前写的一个面向航路图做的一个插件,基本上将航路图的制作进行流程化,制作成为可交互的插件,只要有航路和机场的信息,就可以直接生成一个航路图,每 ...

  6. 《零基础学习Python制作ArcGIS自定义工具》课程简介

    Python for ArcGIS Python for ArcGIS是借助Python语言实现ArcGIS自动化行为的综合,它不止是如课程标题所述的“制作ArcGIS自定义工具”,还包括使用Pyth ...

  7. 32款iOS开发插件和工具介绍[效率]

    插件和工具介绍内容均收集于网络,太多了就不一一注明了,在此谢过!   1.Charles 为了调试与server端的网络通讯协议.经常须要截取网络封包来分析. Charles通过将自己设置成系统的网络 ...

  8. IDEA实用的第三方插件和工具介绍设置

    一:grep console grep-console插件可以让idea显示多颜色调试日志,使Log4j配置输出的不同级别error warn info debug fatal显示不同颜色 开发起来区 ...

  9. ArcGis Python脚本——ArcGIS 中使用的 Python 是什么版本

    Python 编程语言用于自 9.0 起的各版本 ArcGIS 中,并被整合到 ArcMap 和 ArcGIS for Server 的自动安装中. ArcGIS 将在完整安装过程中安装下列 Pyth ...

随机推荐

  1. 浅谈mysql主从复制的高可用解决方案

    1.熟悉几个组件(部分摘自网络)1.1.drbd     —— DRBD(Distributed Replicated Block Device),DRBD号称是 "网络 RAID" ...

  2. 【bzoj1552】[Cerc2007]robotic sort

    题目描述 输入 输入共两行,第一行为一个整数N,N表示物品的个数,1<=N<=100000.第二行为N个用空格隔开的正整数,表示N个物品最初排列的编号. 输出 输出共一行,N个用空格隔开的 ...

  3. js中,怎么解决cookie里面中文乱码问题

    呵呵,我查了百度和谷歌,都没找到解决方案,但是,最终直接结合两个函数就可以了,哈哈哈,开心ing function getCookie(name) { var prefix = name + &quo ...

  4. iOS开发——生成条形码,二维码

    - (void)viewDidLoad { [super viewDidLoad]; self.imageView.image = [self generateBarCode:@"15248 ...

  5. jsp发布后应用根目录

    1.发布到tomcat后获取应用的根目录 ServletContext s1=this.getServletContext(); String temp=s1.getRealPath("/& ...

  6. css--用户体验笔记及兼容记录

    css用户体验 1.HTML的< >&"©分别是<,>,&,",©;的转义字符 2.IE8和7的透明度 filter: progid:DXI ...

  7. 微信小程序之----消息提示框toast

    toast toast为消息提示框,无按钮,如需关闭弹框可以添加事件设置hidden为true,在弹框显示后经过duration指定的时间后触发bindchange绑定的函数. 官方文档 .wxml ...

  8. 键盘上下键时间 js

    ocument.onkeydown=function(event){ var e = event || window.event || arguments.callee.caller.argument ...

  9. C语言-结构体

    C语言中数组是把相同类型的数据类型的变量集中在一起了,而结构体则是把不同类型的变量聚集在一起. 结构体也是一种数据类型,但是它是一种自定义的数据类型,也就是说和使用其他数据类型不一样,我们得先定义这种 ...

  10. Mybatis oracle多表联合查询分页数据重复的问题

    Mybatis oracle多表联合查询分页数据重复的问题 多表联合查询分页获取数据时出现一个诡异的现象:数据总条数正确,但有些记录多了,有些记录却又少了甚至没了.针对这个问题找了好久,最后发现是由于 ...