使用python制作ArcGIS插件(3)ArcPy的使用说明
使用python制作ArcGIS插件(3)ArcPy的使用说明
by 李远祥
ArcPy 是一个以成功的 arcgisscripting 模块为基础并继承了 arcgisscripting 功能进而构建而成的站点包。目的是为以实用高效的方式通过 Python 执行地理数据分析、数据转换、数据管理和地图自动化创建基础。
该包提供了丰富纯正的 Python 体验,具有代码自动完成功能(输入关键字和点即可获得该关键字所支持的属性和方法的弹出列表;从中选择一个属性或方法即可将其插入),并针对每个函数、模块和类提供了参考文档。
在 Python 中使用 ArcPy 的另一个主要原因是,Python 是一种通用的编程语言。Python 是一种支持动态输入的解释型语言,适用于交互式操作以及为称为脚本的一次性程序快速制作原型,同时其具有编写大型应用程序的强大功能。用 ArcPy 编写的 ArcGIS 应用程序的优势在于,可以使用由来自多个不同领域的 GIS 专业人员和程序员组成的众多 Python 小群体开发的附加模块。
上述灰色字体介绍部分来自ArcGIS的官方帮助说明,可以帮助大家了解ArcPy的来龙去脉。从帮助上看出,Arcpy可以做的几项重要的工作,地理数据分析、数据转换、数据管理和地图自动化创建。其中,地理数据分析、数据转换、数据管理都是toolbox的工具都可以实现,地图自动化创建则是需要工具以外的东西,则需要开放更多的接口进行地图的交互。
接下来可以看看ArcPy到底提供了哪些操作的接口。学习ArcPy最重要的还是使用Desktop的帮助,这个帮助基本上就是一个cookbook,所需要的都可以在帮助里面找到,可以根据帮助看看那些操作能用,哪些不能用。

从帮助里面可以看到ArcPy里面设计到的功能部分,涉及到常规操作的一些函数、类、数据接入、制图等,还有提供一些非工具调用的扩展模块的特殊接口,这些接口都是交互性的接口。如果希望能够完全使用python进行插件开发,那必须掌握工具的调用(也就是说知道哪些工具能实现什么什么功能),以及ArcPy的函数和类,与地图交互部分,必须掌握Mapping模块,因为该模块涉及到地图的交互操作。
ArcPy函数部分,基本上将AO常用的操作部分进行了封装,而且调用相当简介。可以看到游标、字段、地理数据库管理等的接口。

例如看搜索游标的调用实例,相对与AO来说,简直就是简单到极致,完全符合常规的思维模式。指定数据源,查找字段等就能查出结果。
import arcpy
fc = "c:/data/base.gdb/roads"
field = "StreetName"
cursor = arcpy.SearchCursor(fc)
for row in cursor:
print(row.getValue(field))
例如列出数据,非常简介的调用,遍历出各种数据的列表

调用也是非常简单
import arcpy
# For each field in the Hospitals feature class, print
# the field name, type, and length.
fields = arcpy.ListFields("c:/data/municipal.gdb/hospitals")
for field in fields:
print("{0} is a type of {1} with a length of {2}"
.format(field.name, field.type, field.length))
从这两个例子可以看出,ArcPy的设计都是以极简思维去设计接口和函数的,尽可能符合人类思维模式,避免了像其他高级语言那样严格的通过定义变量、变量类型等严格的操作。
再看涉及到的类型,一些常规的细粒度控制也做得相当不错。哪怕是图形的控制,都可以通过ArcPy来控制。

例如创建一个面,通过ArcPy只需要几行简单的代码,完成面要素创建并加入到已有的面图层中
import arcpy
# A list of features and coordinate pairs
feature_info = [[[1, 2], [2, 4], [3, 7]],
[[6, 8], [5, 7], [7, 2], [9, 5]]]
# A list that will hold each of the Polygon objects
features = []
for feature in feature_info:
# Create a Polygon object based on the array of points
# Append to the list of Polygon objects
features.append(
arcpy.Polygon(
arcpy.Array([arcpy.Point(*coords) for coords in feature])))
# Persist a copy of the Polyline objects using CopyFeatures
arcpy.CopyFeatures_management(features, "c:/geometry/polygons.shp")
在制图方面,同样可以看到一些细粒度的控制,如涉及到地图文档控制、符号控制等

可以说,这些都是可以从各个细节地方去控制地图,并做出一些交互操作。掌握了这些基本的函数和类,对于基本一定GIS基础的开发人员来说,基本上可以制作出各种的插件了,避免使用AO去做长周期的开发。
个人认为,如果将ArcGIS插件式开发定义为使用ArcPy去开发的话,那就太局限了。因为python是一个优秀的语言,有着活跃的开发社区,有非常多的优秀算法和优秀的资源,可以通过python的模式而不是仅仅限于ArcPy去开发插件,这才能做出更加优秀的功能。
使用python制作ArcGIS插件(3)ArcPy的使用说明的更多相关文章
- 使用python制作ArcGIS插件(5)其他技巧
使用python制作ArcGIS插件(5)其他技巧 by 李远祥 使用python做插件开发,除了了解ArcToolBox工具之外,还需要在了解ArcPy的相关函数和接口.只有掌握了这些,才可以顺利的 ...
- 使用python制作ArcGIS插件(2)代码编写
使用python制作ArcGIS插件(2)代码编写 by 李远祥 上一章节已经介绍了如何去搭建AddIn的界面,接下来要实现具体的功能,则到了具体的编程环节.由于使用的是python语言进行编程,则开 ...
- 使用python制作ArcGIS插件(1)工具介绍
使用python制作ArcGIS插件(1)工具介绍 by 李远祥 ArcGIS从10.0开始支持addin(ArcGIS软件中又叫作加载项)的方式进行插件制作.相对于以往9.x系列,addin的无论是 ...
- 使用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 ...
- ArcGis Python脚本——ArcGIS 中使用的 Python 是什么版本
Python 编程语言用于自 9.0 起的各版本 ArcGIS 中,并被整合到 ArcMap 和 ArcGIS for Server 的自动安装中. ArcGIS 将在完整安装过程中安装下列 Pyth ...
- 【转载】Python与ArcGIS Engine的集成
本文转载自Fransico<Python与ArcGIS Engine的集成> 1 在Python中调用AO类库 1.1 准备工作 本文所使用环境:ArcGIS 10.0.Python ...
- 如何使用借助python完成 ARCGIS工具箱的调用
上个月使用python调用arcgis工具箱完成了火点txt文件转shp文件的小功能, 感觉很不错, 写下这篇博客希望对大家有所帮助. 1.环境介绍: 系统: win8.1(64位) arcgis:d ...
随机推荐
- CodeForces 617A Elephant
C语言语法入门题 #include<cstdio> #include<cstring> #include<vector> #include<cmath> ...
- linux下利用curl监控web应用状态
监控机器列表文件: server.list 建立监控脚本: webstatus.sh #!/bin/sh monitor_dir=/home/admin/monitor/ #Log记 ...
- (简单) POJ 1860 Currency Exchange,SPFA判圈。
Description Several currency exchange points are working in our city. Let us suppose that each point ...
- [iOS Animation]-CALayer 绘图效率
绘图 不必要的效率考虑往往是性能问题的万恶之源. ——William Allan Wulf 在第12章『速度的曲率』我们学习如何用Instruments来诊断Core Animation性能问题.在构 ...
- mysql管理---表分区
一.什么是表分区 通俗地讲表分区是将一大表,根据条件分割成若干个小表.mysql5.1开始支持数据表分区了. 如:某用户表的记录超过了600万条,那么就可以根据入库日期将表分区,也可以根据所在地将表分 ...
- Spring ---annotation (重点)--AutoWired 不常用
1. 默认按类型 by type, 如果想用byname, 使用@Qualifier 2. 如果写在set上, @qualifier需要写在参数上 bean.xml: 默认bytype去找set方法, ...
- 关于iOS后台模式
https://onevcat.com/2013/08/ios7-background-multitask/ http://zhidao.baidu.com/link?url=NUOMrLGB6Odr ...
- 使用Tomcat搭建图片服务器,使图片能够用链接访问
在后台和前端交互时,遇到了后台存储的图片,前端根据地址无法访问,使用Tomcat搭建图片服务器 1.找到tomcat下的server.xml文件 2.配置文件下加入service节点 <!--为 ...
- iOS 之 手势
手势操作,有一个总的抽象类UIGestureRecognizer,用于检测设备的所有手势.其下有多个子类: 拍击UITapGestureRecognizer (任意次数的拍击) 向里或向外捏UIPin ...
- 闭包用法,延迟tab
var changeTab =( function () { var timeId = 0; return function (tabId) { if (timeId) { clearTimeout( ...