上一章已经介绍了如何构建AddIn接口。 接下来要实现具体的功能,就要到具体的编程环节了。 由于语言是用来编程的,因此开发人员需要掌握一些基本的编程技能。 有些知识不是本章的重点。 开发者可以通过百度等方式获取相关知识。 它还在其帮助文档中为我们提供了一些推荐的教程。 下面的灰色文字是官方帮助中的一些文字摘录。
它是一种不受限制的、跨平台的开源编程语言,功能强大且易于学习。 因此得到了广泛的使用和支持。 要了解更多相关信息,请访问。
在 9.0 社区中引入。 从那时起,它就被认为是地理处理用户选择的脚本语言,并且不断发展。 每个版本都进一步增强了体验,为您提供更多功能以及更丰富、更友好的体验。
ESRI 完全接受了它,并认为它是一种满足我们用户社区需求的语言。 以下只是一些优点:
易于学习,非常适合初学者,也非常适合专家
高度可扩展,适合大型项目或小型一次性程序(称为脚本)
便携、跨平台
可嵌入(可编写脚本)
稳定成熟
庞大的用户社区
它已扩展成为数据分析、数据转换、数据管理和地图自动化的语言,从而有助于提高工作效率。
学习
下面包含的信息无意作为语言参考。 相反,我们根据说明如何编写地理处理脚本的示例和概念介绍了一些语法和行为。
强烈建议您使用适当的参考书来进一步理解此处提供的信息。 对于初学者,推荐以下两本书:《学习》(作者:Mark Lutz 和 David,出版商:O'&)和《核心编程》(作者:J. Chun,出版商:Hall),两本书都提供了详细的介绍语言一致且内容不重叠。 还有许多其他书籍涵盖了它们的特定用途,并且定期出版新书,因此可以探索可用的内容。 网站上提供了完整的文档,但内容非常简洁,主要面向开发人员。 还有一个大型在线社区,其中包含许多在线资源,您可以从主页访问这些资源。
教程
如果您是初学者,我们建议您遵循此处列出的一些外部教程。
本教程是文档本身的一部分。
针对非程序员,为编程经验有限的人员提供教程。
语言参考介绍了语法和语义。
程序员教程
这里列出的外部教程主要面向以前学习过其他编程语言(Perl、Basic、C)的人。
本教程是文档本身的一部分。
对于程序员来说,为具有其他编程语言经验的人提供教程。
言归正传,如何在工程中编程。 首先,您可以打开项目文件夹中的目录,并使用文本编辑器或其他编辑工具打开.py文件。 py文件中已经包含了一些初始化代码,那么我们需要在事件或者界面初始化中添加适当的脚本。下图是设计器自动生成的代码。
弧线
班级():
“““ 为了 。 ()”””
定义(自我):
自己。 = 正确
自己。 = 假
定义(自我):
经过
班级():
“““ 为了 。 ()”””
定义(自我):
自己。 = 正确
自己。 = 假
定义(自我):
经过
班级():
""" 为 box()"""
定义(自我):
self.items = [“项目1”,“项目2”]
自己。 = 正确
自己。 = 正确
自己。 =''
self.width = ''
def(自身,):
经过
def(自身,文本):
经过
def(自身,):
经过
定义(自我):
经过
定义(自我):
经过
班级():
“““ 为了 ()”””
定义(自我):
self.items = [“项目1”,“项目2”]
自己。 = 正确
自己。 = 正确
自己。 =''
self.width = ''
def(自身,):
经过
def(自身,文本):
经过
def(自身,):
经过
定义(自我):
经过
定义(自我):
经过
可以看到这段代码给我们预留了两个事件接口和两个操作按钮的事件接口。
那么使用什么样的代码编辑器呢? 我觉得你可以根据自己的习惯来确定编辑器。 我个人更喜欢轻量级的++,通过安装插件就可以编写代码。 当然,你也可以使用内置的文本编辑器来编写,但效果不是很理想。 如果你想要代码提示和可调试性,你可以安装微软的并在安装过程中选择编辑器。 可以用ArcPy实现代码提示并调试程序,但是比较大。 初学者或者简单的应用不妨考虑++,一个轻量级的编辑工具。
首先可以看到这个py文件中有两个包,一个是ArcPy,另一个是ArcPy。 这两个都是自我维护的包。其中ArcPy允许我们编写功能,比如里面的所有工具
在ArcPy中调用时,ArcPy也会对原来的进行简单的封装,封装一些特殊的对象,以方便开发。比如双击【裁剪】工具,调出该工具,可以看到【工具帮助】按钮,如下图所示。
单击此按钮可进入该工具的帮助。 帮助中除了工具的使用方法和原理,以及各个参数的说明外,还包括ArcPy的调用。如下
例如,帮助说明了如何通过arcpy调用裁剪工具以及如何设置各个参数。 可以看到,arcpy的调用非常简洁,参数的格式也多种多样。 它们可以是要素类和图层的名称,也可以是直接获取的变量。 arcpy的其他介绍可以参考中文帮助,里面有非常详细的说明,可以帮助我们更快的设计插件。
使用++打开目录下的.py文件,开始编辑。 第一步是解释字符集问题。 我们使用的是汉字,所以必须在文件顶部添加gbk字符集。然后需要定义一些变量,比如记录存储路径、裁剪数据、裁剪图层等,如下代码所示
#=国标
弧线
AB类:
="" #记录保存路径
=[] #需要裁剪的图层列表
="" #用于裁剪的图层
这里定义了一个类来记录一些基本信息,后面会分别对这些变量进行赋值。
接下来我们看看如何设置项目。 该插件的思路是获取mxd中的一个图层作为裁剪的范围图层。 当然,这个层必须先准备好并加载到mxd中,它的作用就是指定这个层。 但至于是哪一层,需要先获取地图文档中的所有图层,然后提供一个下拉列表。 在列表中选择一个图层后,将该图层分配给AB类的变量。 这也是一种常见的编程实践。 看看下面的代码是如何实现的。 后面一系列的事件已经定义好了,我们分别给事件添加代码。
class(): #选择要裁剪的图层
""" 为 box()"""
定义(自我):
mxd = arcpy..('')
df = arcpy..(mxd,“图层”)[0]
对于 arcpy 中的 lyr..(mxd,"",df):
AB..(lyr.name)
self.items = AB.
自己。 = 正确
自己。 = 正确
自己。 =''
self.width = ''
def(自身,):
AB。 =
打印AB。
经过
def(自身,文本):
经过
def(自身,):
经过
定义(自我):
经过
定义(自我):
经过
从上面的代码可以看到,在初始化时,arcpy. 用来获取mxd文档中的所有图层,并将这些图层添加到AB类的数组中,并用数组来记录这些图层,然后给这个数组分配项,这样就可以看到所有的图层了这个mxd中的。
该事件用于响应选择操作。 在这种情况下,您需要从mxd中选择一个图层作为指定的裁剪范围。 可以看到,选定的值直接赋给AB。 其他事件不需要代码。 从这个例子中可以看出,就像搭积木一样,一些功能很快就堆积在一起了。 这就是我们选择使用它进行开发的原因。
第二个是用于保存实际裁剪数据的路径。 由于设计器中没有给出标签或文本控件,所以我们只能使用我们选择的保存路径。 这里不需要做任何事情,只需要保留原来的代码即可。选择路径后我们将给它实际的路径值。 原代码如下
class(): #用于真实路径
#用于显示路径
“““ 为了 ()”””
定义(自我):
自己。 = 正确
自己。 = 正确
自己。 =''
self.width = ''
def(自身,):
经过
def(自身,文本):
经过
def(自身,):
经过
定义(自我):
经过
定义(自我):
经过
接下来就是在选择路径按钮下弹出选择文件夹或者gdb(也是文件夹)的路径。 如果选择文件级别,则保存的数据为。 如果选择的文件夹正好是,arcpy会自动将数据保存到gdb中。 这非常人性化,不需要任何代码来识别和控制它。 是文件夹还是gdb,更别说控制导出的数据格式了。看下面的代码
班级():
#选择存储路径
“““ 为了 。 ()”””
定义(自我):
自己。 = 正确
自己。 = 假
定义(自我):
AB.=.("选择存储路径")
.items=[AB.,'']
经过
在这种情况下,请使用 . 打开路径选择器。 这些接口操作都是由包来实现的。 我们只需要进行一个简单的调用即可。 选择好路径后,将路径分配给A B.,先记录一下。 然后不忘初衷,显示.items中指定的路径。
之前的代码都无法实现裁剪。 它们都是交互式脚本代码。 那么接下来的裁剪功能就是核心了。 点击行按钮后,我们需要调用crop函数来进行批量裁剪。 那么,我们在上面的交互中就已经完成了所有与剪裁相关的变量。 我们先看一下批量裁剪的功能,就是对每个元素进行裁剪操作,并将结果保存在图层中。 命名方式与图层名称一致。
班级():
#执行最终操作
“““ 为了 。 ()”””
定义(自我):
自己。 = 正确
自己。 = 假
定义(自我):
mxd = arcpy..('')
df = arcpy..(mxd,“图层”)[0]
对于 arcpy 中的 lyr..(mxd,"",df):
=u'切割'+lyr.name+u'…'
= AB.+"/"+lyr.name
arcpy..Clip(lyr., AB.,) #核心代码
打印“裁剪结束”
经过
如您所见,最核心的剪切代码是 arcpy..Clip 函数。 这个函数就是我们上面提到的工具箱中的工具。 它已经在其中实现了,只需要一条语句来调用它。 关键的部分是我们使用for循环来实现遍历和批量裁剪。 与工具中的批量处理不同,该批量裁剪工具裁剪出的名称可以我们自己处理,这就避免了所有结果中的_clip后缀。
我们来看看这个工具的所有代码。 几行非常简短的代码就实现了一个简单实用的工具。
#=国标
弧线
AB类:
="" #记录保存路径
=[] #需要裁剪的图层列表
="" #用于裁剪的图层
班级():
#选择存储路径
“““ 为了 。 ()”””
定义(自我):
自己。 = 正确
自己。 = 假
定义(自我):
AB.=.("选择存储路径")
.items=[AB.,'']
经过
班级():
#执行最终操作
“““ 为了 。 ()”””
定义(自我):
自己。 = 正确
自己。 = 假
定义(自我):
mxd = arcpy..('')
df = arcpy..(mxd,“图层”)[0]
对于 arcpy 中的 lyr..(mxd,"",df):
=u'切割'+lyr.name+u'…'
= AB.+"/"+lyr.name
arcpy..Clip(lyr., AB.,) #核心代码
打印“裁剪结束”
经过
class(): #选择要裁剪的图层
""" 为 box()"""
定义(自我):
mxd = arcpy..('')
df = arcpy..(mxd,“图层”)[0]
对于 arcpy 中的 lyr..(mxd,"",df):
AB..(lyr.name)
self.items = AB.
自己。 = 正确
自己。 = 正确
自己。 =''
self.width = ''
def(自身,):
AB。 =
打印AB。
经过
def(自身,文本):
经过
def(自身,):
经过
定义(自我):
经过
定义(自我):
经过
class(): #用于真实路径
#用于显示路径
“““ 为了 ()”””
定义(自我):
自己。 = 正确
自己。 = 正确
自己。 =''
self.width = ''
def(自身,):
经过
def(自身,文本):
经过
def(自身,):
经过
定义(自我):
经过
定义(自我):
经过
代码实现后,确保没有问题。 记得重新执行项目目录下的.py脚本,生成新文件。 在安装这个新插件之前,您需要在插件管理器中删除原来的插件,然后重新安装新插件。 到这一步,插件就基本完成了。 如果你想更进一步,那么执行后,将mxd中所有图层的数据源设置为裁剪后的数据源,从而达到所见即所得的结果。
好了,今天的主题就讲到这里吧,不管如何,能帮到你我就很开心了,如果您觉得这篇文章写得不错,欢迎点赞和分享给身边的朋友。