(ArcGIS) 为Arcpy创建新函数
我在写毕业论文的时候,想用Python脚本为ArcGIS创建一个新的工具箱。可是我遇到了麻烦,因为Arcpy里现有的功能都不能满足我的需求。所以我想问,能不能在Arcpy里创建一个新的功能,还是说这只能由ESRI的开发者来做呢?
另外一种解决办法是对Spatial Analyst里的Cost Distance工具进行一些修改。那么我还想问,我能访问ArcGIS原生工具的代码吗?如果可以,我能改动它们来实现我的目标吗?还是说这也有限制?
谢谢,
加布里埃尔
3 个回答
我知道这已经晚了一年,但我想给像我这样寻找Python工具箱帮助的人补充一些想法。
为了学习,首先在模型构建器中创建一个模型。这是使用ESRI专有工具的新方法之一。决定你想做什么,然后看看ESRI在GitHub上的资源。那里的开发者有很多开源工具可以在ArcMap中使用。这里有一个这样的资源库:GeospatialPython
顺便提一下,向一个资源库贡献代码是一个很好的简历加分项。
在你创建好工作模型后,右键点击它,在ArcCatalog中选择“导出为Python脚本”。然后在你喜欢的IDE中打开这个脚本,开始整理它吧!
现在你有了一个Python脚本,它可以变成一个Python工具箱。使用gDexter42的链接,开始着手这个工作。
我的团队对Python工具箱有一些有趣的用法,我现在正在创建我的第一个工具箱。
- 我们使用运行脚本来调试我们的软件。(硬编码的参数)
- 我们使用继承来处理那些我们反复使用的函数(class BaseToolboxMixin(object):)关于Mixins的Stack Exchange文章
- 最重要的是,我们围绕这个工具创建了自己的Python模块。
- 我们制作的.pyt文件简单地导入了arcpy和我们创建的模块,从我们在“toolbox_loader.py”文件中创建的列表中执行模块,并有一个类调用最初创建模块的init文件。大约20行代码。
- 随着我们的团队为模块/Python工具箱创建更多工具,我们会把它们添加到列表中。它们将和所有ESRI工具一起出现在我们的工具箱中。今年的开发者峰会上提到过“无缝集成”。
ESRI鼓励创造力和开源使用(可以看看esri leaflet)。我不会因为ESRI的工具是专有的而限制自己的思维。
所有这些功能最初都是在ArcMap中作为一个模型开始的。并不是每个人都需要创建自己的模块——对于大多数任务来说,这完全是多余的——但知道Python功能的上限很高是件好事。我不是一个经验丰富的开发者,但我能在大约25个工作小时内从零开始做出一个功能齐全的Python工具箱。懂行的人可能一个早上就能搞定。
你可以按照这个帮助文档来为ArcPy创建自己的Python工具箱:http://resources.arcgis.com/en/help/main/10.2/index.html#//001500000022000000
另外,看看你现有工具的环境变量,里面可能有你需要的一些选项。
你可以使用Python和Python的arcpy库来创建自己的函数。ESRI的工具都是专有的,所以大多数工具的访问权限是有限制的。你可以查看一下ArcToolbox里的工具,看看哪些可以编辑。例如,Cost Distance工具是受限制的:
而Spline with Barriers工具则可以通过右键点击脚本工具来编辑。