arcgis python 代码调试(使用python制作ArcGIS插件第三期)

arcgis python 代码调试(使用python制作ArcGIS插件第三期)(1)

ArcPy 是一个以成功的 ArcGISscripting 模块为基础并继承了 arcgisscripting 功能进而构建而成的站点包。目的是为以实用高效的方式通过 python 执行地理数据分析、数据转换、数据管理和地图自动化创建基础。

该包提供了丰富纯正的 Python 体验,具有代码自动完成功能(输入关键字和点即可获得该关键字所支持的属性和方法的弹出列表;从中选择一个属性或方法即可将其插入),并针对每个函数、模块和类提供了参考文档。

在 Python 中使用 ArcPy 的另一个主要原因是,Python 是一种通用的编程语言。Python 是一种支持动态输入的解释型语言,适用于交互式操作以及为称为脚本的一次性程序快速制作原型,同时其具有编写大型应用程序的强大功能。用 ArcPy 编写的 ArcGIS 应用程序的优势在于,可以使用由来自多个不同领域的 GIS 专业人员和程序员组成的众多 Python 小群体开发的附加模块。

上述蓝色字体介绍部分来自ArcGIS的官方帮助说明,可以帮助大家了解ArcPy的来龙去脉。从帮助上看出,Arcpy可以做的几项重要的工作,地理数据分析、数据转换、数据管理和地图自动化创建。其中,地理数据分析、数据转换、数据管理都是toolbox的工具都可以实现,地图自动化创建则是需要工具以外的东西,则需要开放更多的接口进行地图的交互。

接下来可以看看ArcPy到底提供了哪些操作的接口。学习ArcPy最重要的还是使用Desktop的帮助,这个帮助基本上就是一个cookbook,所需要的都可以在帮助里面找到,可以根据帮助看看那些操作能用,哪些不能用。

arcgis python 代码调试(使用python制作ArcGIS插件第三期)(2)

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

ArcPy函数部分,基本上将AO常用的操作部分进行了封装,而且调用相当简介。可以看到游标、字段、地理数据库管理等的接口。

arcgis python 代码调试(使用python制作ArcGIS插件第三期)(3)

例如看搜索游标的调用实例,相对与AO来说,简直就是简单到极致,完全符合常规的思维模式。指定数据源,查找字段等就能查出结果。

import arcpy

fc = "c:/data/base.gdb/roads"

field = "StreetName"

cursor = arcpy.SearchCursor(fc)

for row in cursor:

print(row.getValue(field))

例如列出数据,非常简介的调用,遍历出各种数据的列表

arcgis python 代码调试(使用python制作ArcGIS插件第三期)(4)

调用也是非常简单

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来控制。

arcgis python 代码调试(使用python制作ArcGIS插件第三期)(5)

例如创建一个面,通过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")

在制图方面,同样可以看到一些细粒度的控制,如涉及到地图文档控制、符号控制等

arcgis python 代码调试(使用python制作ArcGIS插件第三期)(6)

可以说,这些都是可以从各个细节地方去控制地图,并做出一些交互操作。掌握了这些基本的函数和类,对于基本一定GIS基础的开发人员来说,基本上可以制作出各种的插件了,避免使用AO去做长周期的开发。

个人认为,如果将ArcGIS插件式开发定义为使用ArcPy去开发的话,那就太局限了。因为python是一个优秀的语言,有着活跃的开发社区,有非常多的优秀算法和优秀的资源,可以通过python的模式而不是仅仅限于ArcPy去开发插件,这才能做出更加优秀的功能。

更多精彩内容,尽在51GIS学院

欢迎您关注我们官网和公众号,获取更多自然资源领域知识

,

免责声明:本文仅代表文章作者的个人观点,与本站无关。其原创性、真实性以及文中陈述文字和内容未经本站证实,对本文以及其中全部或者部分内容文字的真实性、完整性和原创性本站不作任何保证或承诺,请读者仅作参考,并自行核实相关内容。文章投诉邮箱:anhduc.ph@yahoo.com

    分享
    投诉
    首页