python调用arcpy函数_AGS Python开发-ArcPy开发基础
转自
AGS Python开发-ArcPy开发基础
1、Python与ArcGIS关系
ArcGIS提供了ArcPy包,Python是通过该ArcPy包来操作ArcGIS中的功能。ArcPy可以理解为ArcGIS针对Python语言提供的开发API。
2、导入ArcPy与模块搜索路径
(1)导入ArcPy
示例1:import arcpy
示例2:import arcpy.mapping
示例3:from arcpy import env
示例4:from arcpy import env as ENV
(2)模块搜索路径
导入ArcPy时,会先搜索PYTHONPATH环境变量。如何未定义环境变量,则搜索sys.path定义的路径:Python27\ArcGIS10.5\Lib\site-packages和Python27\ArcGISx6410.5\Lib\site-packages。ArcGIS在安装Python时,会在这两个目录下创建Desktop10.5.pth和Server10.5.pth。这两个文件记录了ArcPy需要的路径:
*C:\arcgis\Desktop10.5\bin
C:\arcgis\Desktop10.5\ArcPy
C:\arcgis\Desktop10.5\ArcToolBox\Scripts
•
如果出现提示找不到ArcPy模块的错误,可以手动创建该文件并添加上面的路径。
3、调用地理处理工具和地理处理服务
3.1、调用地理处理工具
所有工具可以ArcPy函数方式调用,也可以工具箱别名的模块调用。
函数方式:arcpy.GetCount_management(features)
工具箱模块方式:arcpy.management.GetCount(features)
3.2、调用自定义地理处理工具
建议在ImportToolbox()中定义自定义工具箱的别名,ArcPy使用arcpy._方式调用。
arcpy.ImportToolbox("c:/mytools/geometrytools.tbx", "mytools")
arcpy.CreateRegularPolygons_mytools(params)
3.3、调用地理处理服务
地理处理服务器名称和工具箱名称使用分号隔开。
arcpy.ImportToolbox("http://flame7/arcgis/services;GP/BufferByVal","mytools")
arcpy.BufferPoints_mytools(inFeatureSet, "5 km")
3.4、调用地理处理工具的技巧
技巧1:调用ArcGIS自带的地理处理工具
ArcGIS提供了数量众多的地理处理工具,这些工具都可以通过ArcPy来调用。在调用地理处理工具时,需要清楚工具的处理流程,以及输入输出参数等信息。为了方便调用与调试,可按如下步骤进行:
1.在桌面软件中运行地理处理工具
在工具运行窗口中可以查看工具说明,以及相关参数设置要求。同时还可以测试输入参数与输出结果。
2.查看地理处理工具调用方式
方式1:在桌面软件中,工具拖拉到Python命令行窗口,即可查看到工具调用名称,以及相关参数设置要求。
方式2:调用help()方法查看工具调用文档。在桌面软件或者IDE环境中的Python命令行中,输入help(arcpy.toolname)查询。
方式3:直接查看桌面软件帮助中的工具参考。在参考中还包含了示例代码。
3.在Python中调用地理处理工具
根据地理处理工具调用要求,编写Python调用代码。
技巧2:调用自定义的地理处理模型
对于自定义的地理处理模型,在Python中可以使用两种调用方式:
1.直接调用
直接调用是将自定义处理模型当作整理看待,调用方式:
arcpy.importToolbox("toolbox_path", "mytoolbox")
arcpy.Mytool_mytoolbox("params")
1.将模型导出为Python脚本,再复用脚本内容
ArcGIS提供了自定义地理处理模型导出为Python脚本的功能,导出的脚本可以直接在python中使用,也可以在其上修改增加自定义的功能。
这种方式可以看作是可视化编码方式,可以减少调用系统地理处理工具的复杂度。
4、ArcPy中的OMD
ArcPy由三大部分组成:ArcPy函数、ArcPy类、ArcPy模块。
(1)ArcPy函数
ArcPy函数用于执行特定的任务,方便执行地理处理工作流。ArcPy中的函数分为两种:地理处理函数和非地理处理函数。所有地理处理工具都以地理处理函数提供。
(2)ArcPy类
ArcPy类存储地理对象相关的信息,通常用于解析地理数据,或者作为地理处理工具的参数。
(3)ArcPy模块
ArcPy模块是将共性的功能以模块方式提供,方便调用。ArcPy模块包括数据访问模块(arcpy.da)、制图模块(arcpy.mapping)、空间分析扩展模块(arcpy.sa)、网络分析扩展模块(arcpy.na)。以及工具类模块:时间模块(arcpy.time)。
4.1、ArcPy中的函数
ArcPy中的函数主要包括了:描述数据的函数(Describe)、判断数据是否存在的函数(Exists)、数据迭代相关的函数(如:ListFields)、外部输入参数相关的函数(如GetParameterAsText)、许可检查相关的函数(如CheckExtension)、环境设置相关的函数(如GetSystemEnvironment)、消息错误处理相关的函数(如GetMessage)
详情参见:http://desktop.arcgis.com/zh-cn/arcmap/latest/analyze/arcpy-functions/alphabetical-list-of-arcpy-functions.htm
4.2、ArcPy中的类
分类主要类说明
要素类或表、栅格类FeatureSet、RecordSet、Raster代表要素图层或者表、栅格图层
要素数据内容相关类Cursor、Row代表要素图层或者表中记录的每行数据
要素图层字段相关类Field、FieldInfo代表要素图层或表的字段信息
几何类型与空间参考Point、Multipoint、PointGeometry、Polyline、Polygon、Extent、SpatialReference
图表类Graph、GraphTemplate如:气泡图、直方图、饼图等
ToolValidator相关类Filter、Parameter、Schema、Value自定义Python工具箱所需要的参数类
异常类ExecuteError、ExecuteWarning
其他核心类环境设置类:env;地理处理结果类:Result;索引类(空间索引和属性索引):Index;多值参数类:ValueTable;SDE SQL操作类:ArcSDESQLExecute;辅助类:Array、RandomNumberGenerator
4.3、ArcPy中的模块
模块名称主要功能
arcpy.da数据访问模块。提供了增、删、查、改数据的类和函数。
arcpy.mapping地图制图模块。提供了操作mxd文档、地图渲染、地图打印输出、地图服务发布等功能。
arcpy.na网络分析扩展模块。用于访问网络分析地理处理工具。
arcpy.sa栅格分析模块。用于访问空间分析地理处理工具。
5、描述数据的函数
通过Describe函数可以查询所有类型数据的属性信息。如:数据几何类型、字段、索引等。不同的数据类型可查询的属性信息不同。
ftClass="D:/mapdata/test/china/chinamap.gdb/citiesbuffer"
ftDesc = arcpy.Describe(ftClass)
print(ftDesc.shapeType)
print(ftDesc.featureType)
print(ftDesc.shapeFieldName)
print(ftDesc.OIDFieldName)
print(len(ftDesc.fields))
print(ftDesc.spatialReference.name)
6、环境设置类
ArcPy中环境设置定义在env类中。
(1)环境设置读取和更改
arcpy.env.scratchWorkspace = "c:/mapdata"
arcpy.env.workspace = "c:/mapdata"
arcpy.env.XYTolerance = 2.5
workspace = arcpy.env.scratchGDB
(2)检查环境变量名称
arcpy.ListEnvironments()
(3)重设环境设置
arcpy.ResetEnvironments()
arcpy.ClearEnvironment("workspace")
7、消息处理
(1)读取消息
在地理处理工具执行过程中,会输出处理消息,消息内容包括:时间、参数、错误等。可通过如下方式获取:
方式1:直接读取
result=arcpy.GetCount_management("D:/mapdata/test/worldshp/cities.shp")
print(arcpy.GetMessageCount())
print(arcpy.GetMessages())
print(arcpy.GetMessage(0))
方式2:从result中读取
result=arcpy.GetCount_management("D:/mapdata/test/worldshp/cities.shp")
print(result.messageCount)
print(result.getMessage(0))
print(result.getMessages(2))
(2)自定义消息
如果是控制台输出,可以直接使用print语句,也可以使用ArcPy提供的消息函数:
arcpy.AddMessage("info")
arcpy.AddWarning("warning")
arcpy.AddError("error")
8、错误处理
(1)ExecuteError类
地理处理工具失败时会抛出arcpy.ExecuteError类。其他的异常可以使用sys.exc_info()获取。
import arcpy
import sys
try:
result = arcpy.GetCount_management("c:/erro.shp")
except arcpy.ExecuteError:
arcpy.AddError(arcpy.GetMessages(2))
except:
e = sys.exc_info()[1]
print(e.args[0])
(2)错误跟踪
在较大复杂的脚本中,可结合sys和traceback模块来查找跟踪错误。
import arcpy
import sys
import traceback
arcpy.env.workspace = "C:/Data/myData.gdb"
try:
arcpy.CreateSpatialReference_management()
except arcpy.ExecuteError:
msgs = arcpy.GetMessages(2)
print(msgs)
except:
# Get the traceback object
#
tb = sys.exc_info()[2]
tbinfo = traceback.format_tb(tb)[0]
pymsg = "PYTHON ERRORS:\nTraceback info:\n" + tbinfo + "\nError Info:\n" + str(sys.exc_info()[1])
msgs = "ArcPy ERRORS:\n" + arcpy.GetMessages(2) + "\n"
print(pymsg)
print(msgs)
(3)Result对象中获取错误消息
result = arcpy.Clip_analysis("roads", "urban_area", "urban_roads")
消息总数:result.messageCount
按索引号获取消息:result.getMessage(index)
按类型获取消息:result.getMessages(severity)
消息类型分:0(消息)、1(警告)、2(错误)
9、许可检查
使用arcpy.CheckExtension("3D")和arcpy.CheckOutExtension("3D")检查许可。
import arcpy
try:
if arcpy.CheckExtension("3D") == "Available":
arcpy.CheckOutExtension("3D")
else:
print("license error")
arcpy.env.workspace = "D:/GrosMorne"
arcpy.HillShade_3d("WesternBrook", "westbrook_hill", 300)
arcpy.Aspect_3d("WesternBrook", "westbrook_aspect")
except arcpy.ExecuteError:
print(arcpy.GetMessages(2))
finally:
arcpy.CheckInExtension("3D")
10、地理数据路径设置与中文处理
(1)路径设置
在访问本地数据时,常需要设置数据存放路径,设置方式有两种:
方式1:绝对路径。
直接将绝对路径传入地理处理工具函数中。
arcpy.GetCount_management(r"c:\temp\streams.shp")
python调用arcpy函数_AGS Python开发-ArcPy开发基础相关推荐
- python 调用 javascript函数
python 调用 javascript函数 # pip install pyexecjs import execjs # 直接执行 print('execjs.eval:', execjs.eval ...
- python调用C函数库
python调用C函数库 (2012-10-31 13:47:50) 转载▼ 标签: 动态链接库 c语言 so ctypes python 分类:Python 背景:工作中,有很多公共类库是使用C语言 ...
- Python 调用C函数
/********************************************************************* Python 调用C函数* 说明:* Tony在处理SQL ...
- python调用c语言函数_从Python调用C函数
python调用c语言函数 We can call a C function from Python program using the ctypes module. 我们可以使用ctypes模块从P ...
- 一文读懂如何用python调用matlab函数(windows环境)
第一步配置环境: 要安装引擎 API,请在操作系统提示符下执行以下命令,其中 matlabroot 是 MATLAB 文件夹的路径.您可能需要管理员权限才能执行这些命令.或者,使用在非默认位置安装用于 ...
- 使用PyO3从Python调用 Rust:加速Python
使用 Rust 加速你的 Python: PyO3使从 Python 调用 Rust 代码变得容易.您可以编写 Rust 库,并依靠 PyO3 和生态系统中maturin的支持工具的组合PyO3来编译 ...
- python中readlines函数用法,python中read() readline()以及readlines()用法
我们谈到"文本处理"时,我们通常是指处理的内容.Python 将文本文件的内容读入可以操作的字符串变量非常容易.文件对象提供了三个"读"方法: .read(). ...
- python中没有arcpy怎么办_AGS Python开发-ArcPy开发基础
1.Python与ArcGIS关系 ArcGIS提供了ArcPy包,Python是通过该ArcPy包来操作ArcGIS中的功能.ArcPy可以理解为ArcGIS针对Python语言提供的开发API. ...
- python调用php命令行,python调用php函数 python怎样调用php文件中的函数详解
前言 python调用php代码实现思路:php文件可通过在terminal中使用php命令行进行调用,因此可使用python开启子进程执行命令行代码.函数所需的参数可通过命令行传递. 测试环境 1. ...
- python调用dll函数_从Python调用DLL函数
我想从Python调用DLL中的函数.但我有个错误:"Attribute Error function not found" 这是我的代码:import os import cty ...
最新文章
- dblink oracle mysql,Oracle dblink的使用
- python 修改文件名_【学习分享】利用python批量修改文件名
- LeetCode-数组-35. 搜索插入位置
- 笔试训练第三次知识点汇总
- linux ram 权限,我如何将Linux二进制文件限制为有限的RAM数量?
- 关于定义视频播放器的界面的相关的类transPortcontroll等
- Educational Codeforces Round 111 (Rated for Div. 2) D. Excellent Arrays 组合数学
- 回溯算法(Backtracking Algorithm)之八皇后问题
- ROS 教程之 network:多台计算机之间网络通信(2)
- 互联网架构,如何进行容量设计?
- ROS的学习(十)rqt_console和roslaunch
- 绿竹生物冲刺港股:年期内亏损超5亿 泰格医药与北京亦庄是股东
- Dart语言学习理由
- Visual Studio 各个版本之间的功能比较
- 明辰智航网络一点通网络性能测试仪可以做什么
- 华为云yum镜像源超慢改用阿里云镜像遇坑解决方法
- 计算机维修的入门知识
- 淘宝滑块 tb滑块 x82y x5sec
- php递归函数return问题
- MySQL 8.0如何配置my.cnf
热门文章
- SQL Server 2005 无法连接服务器(error:10061)
- grasshopper python_【转】精华教学 | GH_Cpython——将原生的 Python 与机器学习框架引入Grasshopper...
- python开发grasshopper插件_Rhino_Grasshopper_Python 开发的正确姿势
- java面试题-基础篇(万字总结,带答案,面试官问烂,跳槽必备)
- 【Python】基于Python的百度迁徙5——实时拥堵与拥堵指数(附代码)
- 戴尔服务器调节风扇转速
- oracle数据库课后报告,ORACLE数据库课程设计报告
- Webpack5构建微前端和Web应用程序2022教程
- ajaxSubmit
- 俄罗斯方块(C语言源代码)