博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
如何使用借助python完成 ARCGIS工具箱的调用
阅读量:5818 次
发布时间:2019-06-18

本文共 4461 字,大约阅读时间需要 14 分钟。

上个月使用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 sysdef 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.pyargv 1:zhaojiedihello 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.3121.2	43.2	0.8101.5	40.2	0.96110.5	35.6	0.4

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

copy 这段代码。

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

修改copy的代码如下

#made by zhaojiedi1992#import modelimport osimport os.pathimport arcpyimport sysif "__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

你可能感兴趣的文章
Sql缓存依赖--数据库缓存
查看>>
Alpha冲刺(3/10)
查看>>
PIE SDK打开网络地图数据
查看>>
LayaAir疑难杂症之一:List渲染无法生效
查看>>
Charpter2 新的测试用例
查看>>
Java中过滤器和拦截器的区别
查看>>
kuangbin专题七 HDU4027 Can you answer these queries? (线段树)
查看>>
div css背景图片不显示
查看>>
POJ-2406-Power Strings
查看>>
CentOS7 vi编辑命令【转】
查看>>
SCRUM的五个价值观
查看>>
nuget pack 时不包含依赖包(而不是引用项目的dll,区别于IncludeReferencedProjects)...
查看>>
第12讲 计数器及其应用
查看>>
图片一直居中,并且窗口变小图片两端缩小,但是图片还是居中。
查看>>
Node.js 文件系统------------读取文件
查看>>
测试人员学习线路图
查看>>
WinCE上的mfc编程对文件的读写方法
查看>>
iframe自适应高度
查看>>
关联表级联删除
查看>>
微软 codeplex 团队
查看>>