如何使用借助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程序调用了呢。

 

转载于:https://www.cnblogs.com/zhaojiedi1992/p/zhaojiedi_python_003.html

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值