上个月使用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 = -;
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程序调用了呢。

如何使用借助python完成 ARCGIS工具箱的调用的更多相关文章

  1. 使用python制作ArcGIS插件(2)代码编写

    使用python制作ArcGIS插件(2)代码编写 by 李远祥 上一章节已经介绍了如何去搭建AddIn的界面,接下来要实现具体的功能,则到了具体的编程环节.由于使用的是python语言进行编程,则开 ...

  2. 使用python制作ArcGIS插件(1)工具介绍

    使用python制作ArcGIS插件(1)工具介绍 by 李远祥 ArcGIS从10.0开始支持addin(ArcGIS软件中又叫作加载项)的方式进行插件制作.相对于以往9.x系列,addin的无论是 ...

  3. 《零基础学习Python制作ArcGIS自定义工具》课程简介

    Python for ArcGIS Python for ArcGIS是借助Python语言实现ArcGIS自动化行为的综合,它不止是如课程标题所述的“制作ArcGIS自定义工具”,还包括使用Pyth ...

  4. 【转载】Python与ArcGIS Engine的集成

    本文转载自Fransico<Python与ArcGIS Engine的集成>   1 在Python中调用AO类库 1.1  准备工作 本文所使用环境:ArcGIS 10.0.Python ...

  5. 使用python制作ArcGIS插件(5)其他技巧

    使用python制作ArcGIS插件(5)其他技巧 by 李远祥 使用python做插件开发,除了了解ArcToolBox工具之外,还需要在了解ArcPy的相关函数和接口.只有掌握了这些,才可以顺利的 ...

  6. 使用python制作ArcGIS插件(4)界面交互

    使用python制作ArcGIS插件(4)界面交互 by 李远祥 插件界面部分,除了一开始在设计器中设计的这些界面元素之外,还可以与操作系统进行一些输入输出的交互,这部分的实现全部在pythonadd ...

  7. 使用python制作ArcGIS插件(3)ArcPy的使用说明

    使用python制作ArcGIS插件(3)ArcPy的使用说明 by 李远祥 ArcPy 是一个以成功的 arcgisscripting 模块为基础并继承了 arcgisscripting 功能进而构 ...

  8. ArcGis Python脚本——ArcGIS 中使用的 Python 是什么版本

    Python 编程语言用于自 9.0 起的各版本 ArcGIS 中,并被整合到 ArcMap 和 ArcGIS for Server 的自动安装中. ArcGIS 将在完整安装过程中安装下列 Pyth ...

  9. 借助python工具从word文件中抽取相关表的定义,最后组装建表语句-非常好

    借助python工具从word文件中抽取表的定义,最后组装建表语句-非常好 --如有转载请以超链接的方式注明原文章出处,谢谢大家.请尊重每一位乐于分享的原创者 1.python脚本 ## -*- co ...

随机推荐

  1. 浅谈JS面向对象

    浅谈JS面向对象 一 .什么是面向过程 就是分析出解决问题所需要的步骤,然后用函数把这些步骤一步一步实现,使用的时候一个一个依次调用就可以了.注重代码的过程部分. 二.什么是面向对象 最先出现在管理学 ...

  2. ubuntu18.04搭建nfs

    1.服务端安装 #apt-get update -y #apt-get install -y nfs-kernel-server #apt-get enable nfs-kernel-server 2 ...

  3. sql语句创建数据表

    unsigned 数值类型 无符号化 AUTO_INCREMENT 自增长 PRIMARY KEY 唯一主键 COMMENT 备注信息 BIT 类型只有1和0两个值 enum 枚举数值类型 UNIQU ...

  4. mycat跟踪分析

    mycat版本1.6 192.168.5.66 从 192.168.5.67主 一个user表 验证主从 log4j2修改日志level为debug schema.xml配置 启动服务,打开日志tai ...

  5. 深入C#

     深入C# String类 C#中的String类他是专门处理字符串的(String),他在System的命名空间下,在C#中我们使用的是string 小写的string只是大写的String的一个别 ...

  6. msfconlose基本命令

    命令 简介 back 从当前上下文 banner 显示显示一个令人敬畏的metasploit横幅 cd 更改当前工作目录 color 切换颜色 connect 与主机通信 edit 使用$ VISUA ...

  7. vuex简单使用

    1.创建src/store/index.js----仓库所在地----暴露store 2.main.js入口文件处引入store,挂载到Vue根实例中 3.创建store/movie.js-----电 ...

  8. MySQL 优化实战记录

    阅读本文大概需要 2 分钟. 背景 本次SQL优化是针对javaweb中的表格查询做的. 部分网络架构图 业务简单说明 N个机台将业务数据发送至服务器,服务器程序将数据入库至MySQL数据库.服务器中 ...

  9. 第73节:Java中的HTTPServletReauest和HTTPServletResponse

    第73节:Java中的HTTPServletReauest和HTTPServletResponse HTTP协议 客户端与服务器端通讯的一种规则. request: 请求行 请求头 请求体 respo ...

  10. Python学习笔记【第十二篇】:Python异常处理

    什么是异常 异常就是程序运行时发生错误的信号,在python中,错误触发的异常如下 错误类型分为两种:语法错误和业务逻辑错. 异常的类型 AttributeError 试图访问一个对象没有的树形,比如 ...