扩大
缩小

如何使用借助python完成 ARCGIS工具箱的调用

上个月使用python调用arcgis工具箱完成了火点txt文件转shp文件的小功能, 感觉很不错, 写下这篇博客希望对大家有所帮助。

1.环境介绍:

  系统: win8.1(64位)

  arcgis:desktop10.2

2.ARCGIS 工具箱简单介绍:

 

工具英文名称 工具中文名称
3D Analyst toolbox
 

三维分析工具箱

Data Reviewer toolbox 绘图工具箱
Conversion toolbox 转换工具箱
Data Management toolbox 数据管理工具箱
Data Reviewer toolbox 数据检查工具箱
Geostatistical Analyst 地统计分析
Spatial Analyst toolbox 空间分析工具箱
Spatial Statistics toolbox 空间统计工具箱

详细帮助页面可以参考 : http://help.arcgis.com/zh-cn/arcgisdesktop/10.0/help/index.html#/na/00r90000001n000000/

3.使用python代码完成arcgis工具箱的调用

3.1.在介绍这个调用之前,先学习一个简单的python程序

import sys
def hello(name):
    print "hello " + name +"!"

if "__main__" == __name__:
    #get count of parameter
    nLen = len(sys.argv)
    #print parametes
    for i in range(0, nLen):
        print ("argv %d:%s"%(i, sys.argv[i]))
    #call method hello
    hello(sys.argv[1])

这个python程序的功能很简单的, 就是接收一个name, 打印hello name!。 我们需要将这个文本保存到本地,修改名字为hello.py,主要扩展名为.py 。 这个hello.py就是python程序的源码文件了。接着打开命令行(win +r) 输入 d:\Python27\ArcGIS10.2\python.exe e:\test\hello.py zhaojiedi 回车就完成了程序的调用。d:\Python27\ArcGIS10.2\python.exe 是你python程序的所在位置,用于解释后面的python程序文件,e:\test\hello.py是你编写的python文件位置,zhaojiedi 这个就是你要传递给python程序的参数。这里是一个参数的, 如果多个参数, 参数中间空格分隔即可。

下面是我调用的输出结果

argv 0:E:\test\hello.py
argv 1:zhaojiedi
hello zhaojiedi!

通过以上的简单小程序,就可以完成python程序接收外部参数,完成指定的功能啦。

 3.2.接下来使用c#调用下这个python文件。(当然可以使用其他语言调用了,这里使用c#语言演示下,其他语言同理)

  void  TestPython(string name)
  {
    string pythonExe =  @"d:\Python27\ArcGIS10.2\python.exe";
    string pythonFile = @"e:\test\hello.py";
    string outMessage = "";
    //创建一个进程
    Process process = new Process();
    //设置进程的exe文件
    process.StartInfo.FileName =pythonExe;
    //设置启动参数
    process.StartInfo.Arguments = string.Format(" {0} {1}", pythonFile, "zhaojiedi"); 
    //设置窗口风格
    process.StartInfo.WindowStyle = ProcessWindowStyle.Normal;
    process.StartInfo.CreateNoWindow = false;
    //是否使用shell ,这个是false的时候才可以将下面的重定向参数设置为true
    process.StartInfo.UseShellExecute = false;
    //设置重定向
    process.StartInfo.RedirectStandardError = true;
    process.StartInfo.RedirectStandardInput = true;
    process.StartInfo.RedirectStandardOutput = true;
    //初始化退出码
    exitCode = -1;
    try
    {
        process.Start();
   //获取重定向的结果信息。    outMessage
= process.StandardOutput.ReadToEnd(); process.WaitForExit(); exitCode = process.ExitCode; } catch (Exception ex) { //todo log }
   //在终端打印结果信息。   Console.WriteLine(outMessage);
//todo 判断退出码 }

3.3. 有了上面的基础, 接下来就可以我们的正题啦, 了解arcgis工具, 并使用python调用。

 这里提供一个样例 , 就是通过python程序完成txt文本文件的点转矢量shp文件。

 在arcgis中我们可以使用工具箱的Data management Tools | Layer and Table Views | Make XY EventLayer 这个工具 添加txt文本文件,如下图:

data.txt 内容如下(中间制表符分割)

101.2	35.1	0.3
121.2	43.2	0.8
101.5	40.2	0.96
110.5	35.6	0.4

点击OK 我们就可以将txt文件中经纬度转成要素(还不是矢量文件呢)。 点击ToolHelp(上图中的按钮) 获取工具帮助信息,弹出如下帮助信息。

copy 这段代码。

在打开arcgis 工具箱 Convert Tools | ToShapeFile | Feature Class To ShapeFile ,点击ToolHelp 获取工具帮助信息,copy调用样例。

修改copy的代码如下

#made by zhaojiedi1992
#import model
import os
import os.path
import arcpy
import sys

if "__main__" == __name__:
    nLen = len(sys.argv)
    for i in range(0, nLen):
        print ("argv %d:%s\n"%(i, sys.argv[i]))
    print "===parm ready============ Start ................"
  #get parameter
txtFile = sys.argv[1] curDir = os.path.split(txtFile)[0]; filename = os.path.split(txtFile)[1]; arcpy.env.workspace = curDir lonField = "Field1" latField = "Field2" featureLayer = filename.replace(".txt",""); sharpFile = txtFile.replace(".txt",".shp") if os.path.exists(sharpFile): os.remove(sharpFile) print "txtFile" + ":\t" + txtFile print "curDir" + ":\t" + curDir print "filename" + ":\t" + filename print "featureLayer" + ":\t" + featureLayer #step1 Creates an XY layer try: # Make the XY event layer... arcpy.MakeXYEventLayer_management(txtFile, lonField, latField, featureLayer) except: # If an error occurred print the message to the screen print arcpy.GetMessages() #step2 feature to sharpfile arcpy.FeatureClassToShapefile_conversion([featureLayer], curDir) print "===========================end============================================\n"

保存这个python代码为txtToShp.py,打开命令行就可以调用了d:\Python27\ArcGIS10.2\python.exe e:\test\txtToShp.py e:\test\data.txt, 当然可以使用3.2中的方法创建一个进程去调用python.exe解析python程序完成调用。

把结果的data.shp文件加载到arcgis中如下图:

看完我的这个文章是不是感觉,arcgis 工具箱手工点击实现的功能都可以通过python程序调用了呢。

 

posted on 2016-08-19 10:45  LinuxPanda  阅读(8175)  评论(0编辑  收藏  举报

导航