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:在桌面软件中,工具拖拉到Python命令行窗口,即可查看到工具调用名称,以及相关参数设置要求。

方式2:调用help()方法查看工具调用文档。在桌面软件或者IDE环境中的Python命令行中,输入help(arcpy.toolname)查询。

方式3:直接查看桌面软件帮助中的工具参考。在参考中还包含了示例代码。

在Python中调用地理处理工具

根据地理处理工具调用要求,编写Python调用代码。

技巧2:调用自定义的地理处理模型

对于自定义的地理处理模型,在Python中可以使用两种调用方式:

直接调用

直接调用是将自定义处理模型当作整理看待,调用方式:

arcpy.importToolbox("toolbox_path", "mytoolbox")

arcpy.Mytool_mytoolbox("params")

将模型导出为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)

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")

方式2:相对路径。

借助env.workspace,传入数据路径到地理处理工具函数中。

arcpy.env.workspace = "C:/data/base.gdb"

arcpy.GetCount_management("streams")

(2)中文处理

凡涉及到中文的地方,如中文路径,中文信息输出控制台,建议按如下方式处理:

脚本文件头定义字符编码utf-8,同时脚本文件使用utf-8编码。

中文字符串使用unicode标识,如:print(u"中文")

中文信息输出到磁盘文件,将其转换为utf-8编码。如:output = u"输出内容".encode("utf-8")

中文信息(utf-8编码)读取到内存,将其转换为unicode编码。如:input = f.read().decode("utf-8")

(3)自定义消息中的中文处理

如果使用AddMessages等消息函数输出中文,可按如下两种方式处理:

将所有编码统一到操作系统的默认编码中。如GBK。

获取操作系统编码信息:sys.getfilesystemencoding()、sys.getdefaultencoding()、locale.getdefaultlocale()

如果只能用utf-8,则使用英文输出。

python中没有arcpy怎么办_AGS Python开发-ArcPy开发基础相关推荐

  1. linux 移除python_第16 p,PYthon中的用户交互,Python GUI编程

    大家好,我是杨数Tos,这是<从零基础到大神>系列课程的第16篇文章,第二阶段的课程:Python基础知识:PYthon中的用户交互.Python GUI编程实现方式介绍. 学习本课程,建 ...

  2. python中一共有多少个关键字-Python中关键字有多少个?

    Python中关键词有多少个?Python中关键词目前有31个,可以利用Python的内置的keyword模块进行输出查看. keyword模块Help on module keyword: NAME ...

  3. python中一共有多少个关键字-Python中有几个关键字

    Python中关键词有多少个?Python中关键词目前有31个,可以利用Python的内置的keyword模块进行输出查看. keyword模块 Help on module keyword: NAM ...

  4. python中一共有多少个关键字-Python中所有的关键字

    在python中若想查询python中有哪些关键字可以先导入keyword模块 import keyword #导入关键字模块 print(keyword.kwlist) #查询所有关键字 查询结果: ...

  5. float在python_如何在python中读取.float文件? - python

    Improve this question 我正在处理大脑MRI数据,它是.float数据. 您知道如何在python中使用它吗? 与 with open('[43x25520].float') as ...

  6. 如何在Python中获取图片分辨率?——Python实现获取图片分辨率的代码及详解。

    如何在Python中获取图片分辨率?--Python实现获取图片分辨率的代码及详解. 在进行图片处理或者图片分析的时候,获取图片的分辨率信息是必不可少的.Python提供了许多库可以方便地获取图片的分 ...

  7. python 定义函数方法,python中函数如何定义?python函数的调用方法介绍

    本篇文章给大家带来的内容是关于python中函数如何定义?python函数的调用方法介绍,有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助. 1. 函数的概念,函数是将具有独立功能的代码块 ...

  8. python中with是什么意思,Python中With的用法

    在看Dive Into Python中有关描述文件读写那章节的时候,看到了有关with的用法,查阅下相关资料,记录下来,以备后用. 官方的reference上有关with statement是这样说的 ...

  9. Python 中的 repr (关键词:Python/repr)

    描述 函数str() 用于将值转化为适于人阅读的形式, repr() 函数将对象转化为供解释器读取的形式. repr()函数得到的字符串通常可以用来重新获得该对象,repr()的输入对python比较 ...

最新文章

  1. python数据结构与算法:双向链表
  2. linux rm命令参数及用法详解---linux删除文件或目录命令
  3. 被尘封的故事技能点bug_新月纪元稳定版下载-新月纪元bug修复版1.0 修复版
  4. 15-CSS基础-浮动流
  5. python 线性规划问题_一学高数,线代就头疼?让python帮你解决(内含教程)
  6. zabbix触发器表达式详解
  7. SpringBoot 实现接口参数加密解密功能
  8. 大学数学视频教程整理
  9. 参加2022年7月PMP考试后感受
  10. QQ音乐API koa2实现 - 全接口实现
  11. while用法小简介(涉及EOF用法)
  12. DR800SG的字库
  13. 网友发帖问阿里P7和协和主治医师谁更成功,BAT员工纷纷嘲笑.
  14. 学习篇--FPGA学习网站
  15. 2021年研究生入学考试总结和复试冲刺复习计划
  16. 百度网盘提速加速方法
  17. 微信分享,实现自定义标题、描述、图标
  18. Item 6: Use the explicitly typed initializer idiom when auto deduces undesired types.
  19. Java基础 学习笔记7
  20. 摩托罗拉ME525搜索键改锁屏键

热门文章

  1. python实现感知器算法
  2. 网页宽度为多少才可以打印出A4纸呢
  3. 计算机学院东北大学奖学金2016,2018年命名奖学金基本评选要求汇总表-东北大学软件学院.PDF...
  4. ISO制定的语言,文字标准(zh en)
  5. 家庭财务管理软件c语言,家庭财务管理软件
  6. docker拉镜像、创建容器、停止容器、移除容器、构建镜像
  7. python 求解x=tanx方程
  8. 时间转换datetime
  9. Java OOP 第二章 继承
  10. 微信小程序: 微信小程序-开发者工具添加less插件