注册 登录  
 加关注
查看详情
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

快乐小屋

 
 
 

日志

 
 

使用python+Arcpy创建自定义Arctoolbox工具  

2012-04-25 09:18:05|  分类: ARCGIS |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |

ArcGIS的ArcToolbox中包含了成千上百个工具。这些工具中,有一部分是用python写成。用python写成的工具,你可以非常简单的查看工具后台代码,并加以扩展和修改。同时,你也可以利用python来创建属于自己的自定义工具。

首先解释一下ArcToolbox中工具的组织形式。在ArcGIS中,一系列工具的集合,叫做工具箱(toolbox)。工具箱之下,可以划分不 同的工具集(toolset)。一个工具可以组织于工具箱下的工具集中,或是直接组织于工具箱下。比如,Clip工具默认情况下是组织在Analysis Tools工具箱下的Extract工具集下。而Create Routes工具则是组织在Linear Referencing Tools工具箱下,不隶属于任何工具集。

在创建自定义工具的时候,首先必须创建一个自定义工具箱,至于是否继续创建工具集,则看个人需要。然后,右键单击你创建的工具箱,或是下级目录的工 具集,选择添加Script即可。选择“Add Script”之后,会弹出一系列向导窗口,按照需要填入所需信息之后就完成了自定义工具的创建。Arcgis Desktop的帮助文档中,关于如何创建自定义工具,啰啰嗦嗦说了一大堆的废话,给人的感觉就是创建一个自定义工具何其复杂。其实,只是将每一个小点都 尽可能的细化了,因此过程才会显得这么繁杂。以上的步骤中,真正需要注意的地方,在我看来,就两点。第一,python代码的编写。第二,参数的设置。其 中,第一点是重中之重。

写到这里,其实一个创建自定义工具的流程完全阐述完毕。但是,千万不要以为完成了以上步骤,就完成了一个工具的创建。上面的种种,其实都没有提及到 python代码的编写。代码的编写,因人而异,这个需要下一番功夫才能掌握。而整个过程的最核心的地方就在于此。水平的高低,完全在这里体现。作为一个 初学者,提供不出更多的建议。成就如何,就看每个人的努力了。

下面,说一下工具参数的问题,以一个小工具为例吧。以下代码实现的功能是,将一个目录下所有的mxd文档导出为pdf文件,并将所有的pdf文件合并为一个。代码实现环境为Arcgis 10,利用到了ArcPy包。


'''..........................................................................................
Tool Name: ExprotToPDF
Version:   ArcGIS 10.
Author:    Fengdjhy.
Required Arguments:    An input directory
                       An output directory
                       An output file name.
Description:   Export lots of mxd files to PDF files and Merge them to  one file finally.
..........................................................................................'''


import arcpy,os

#ExportToPDF
def MergePDF(inDir,outDir,fileName):
    arcpy.env.workspace=inDir
    lists=arcpy.ListFiles("*.pdf")
    pdfFile=arcpy.mapping.PDFDocumentCreate(outDir+"\\"+fileName+".pdf")
    for lst in lists:
        pdfFile.appendPages(inDir+"\\"+lst)
        os.remove(inDir+"\\"+lst)
    pdfFile.saveAndClose()

def ExportToPDF(inDir):
    arcpy.env.workspace=inDir
    lists=arcpy.ListFiles("*.mxd")
    for lst in lists:
        mxd=arcpy.mapping.MapDocument(inDir+"\\"+lst)
        arcpy.mapping.ExportToPDF(mxd,inDir+"\\"+str(str(lst).split('.')[0])+".pdf")
    del mxd
    del lists
   

#The main funtcion
inDirectory=arcpy.GetParameterAsText(0)
outDirectory=arcpy.GetParameterAsText(1)
fileName=arcpy.GetParameterAsText(2)
ExportToPDF(inDirectory)
MergePDF(inDirectory,outDirectory,fileName)

从以上可以看出,这个工具需要三个参数。参数一为需要合并的文档所在目录,参数二为导出的pdf文件的目录,参数三为导出的pdf文件的文件名称。参数一 和参数二维文件目录,类似于再WinForm编程中弹出的文件夹选择窗口,在ArcGIS中提供了workspace类型的参数,可以实现同样的效果。参 数三,直接设定为string类型即可。如下图所示:

  评论这张
 
阅读(1723)| 评论(0)
推荐 转载

历史上的今天

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2018