5、使用python进行地理处理(2)

感觉很多内容没有必要太了解,只是知道有这样一回事就行。在实际的学习中,感觉并不太遇到。

5.11 环境的使用

环境本质上是影响工具运行方式的隐藏参数。环境是控制地理处理工作流的基础。
环境作为 env 类的属性公开。这些属性检索当前值或设置它们。每个属性都有一个名称和一个标签。标签显示在 ArcGIS Pro 的环境对话框中,但 Python 仅适用于名称。从环境类访问属性的语法是:

arcpy.env.<property>

例如:

import arcpy
arcpy.env.workspace = "C:/Data"

env 类有许多其他属性。完整列表可在 ArcPy 文档中找到。
一些重要的属性包括范围、输出坐标系、临时工作空间和 XY 域。某些属性特定于要素类或栅格数据集。例如,像元大小、压缩和掩码仅用于栅格数据集。以下代码将单元格大小设置为 30:

import arcpy
arcpy.env.cellSize = 30

此代码意味着,无论输入栅格的像元大小如何,地理处理工具创建的任何输出栅格都将使用 30 的像元大小创建。单位由输出的坐标系设置,另一个环境。
env 类的属性不仅指定运行地理处理工具的环境,还可以用于检索它们的当前值。例如,以下代码检索 XY 容差的当前设置:

import arcpy
print(arcpy.env.XYTolerance)

运行代码会打印 XY Tolerance 参数的当前值。除非先前已设置该值,否则将打印默认值 None。
要查看 env 类的所有属性的完整列表,请使用 dir() 函数,如下所示:

import arcpy
print(dir(arcpy.env))

在第 3 章中,地理处理选项包括允许地理处理工具覆盖现有数据集的选项。在 ArcGIS Pro 中,此选项不是环境对话框的一部分,而是地理处理下工程的选项对话框中的一个单独条目。在 ArcPy 中,overwriting是 env 类的一个属性。此 overwriteOutput 属性的默认值为 False。以下代码将值设置为 True:
**

import arcpy
arcpy.env.overwriteOutput = True

测试代码时,通常在脚本中设置此属性,因为它允许您覆盖同一脚本早期运行的输出,而无需手动删除文件或重命名输出

5.12 工具消息的使用

运行工具时,会写入有关工具执行成功或失败的消息。
工具和用户之间的通信是使用消息完成的。这些消息中的典型信息包括以下内容:
运行工具的确切时间开始和结束
关于运行工具的进度信息(信息消息)
运行工具中潜在问题的警告(警告消息)
阻止工具完成的任何错误(错误消息) 我们学习的关键是懂得去看错误的消息,去搜索其他人对错误的解决办法。
在这里插入图片描述
在这里插入图片描述
在上面看到的都是成功执行后的情况。
在python直接输出的消息并不会太多,可以使用 arcpy.GetMessages() 函数得到输出消息。

print(arcpy.GetMessages())

一般情况下成功运行后,消息并不是太重要,只是作为一个验证;出错后,消息才更重要。
在这里插入图片描述
有时在运行中并不会报错,但是出现了警告,很多人直接将其忽略,但是有时候还是需要检查一下。
警告和错误消息都附有一个六位数的 ID 代码。 ID 代码已记录在案,每个 ID 代码的描述可能有助于确定潜在问题的原因以及如何处理这些问题。
我们可以凭借警告和错误的ID码去官网寻找技术支持。
当然在输出消息的时候可以通过设置索引号,只输出某个消息:

print(arcpy.GetMessage(0))

如果程序运行产生了大量的消息,我们可能不知道有多少,可以使用消息计数功能。

arcpy.GetMessageCount()

当仅仅检索最后一条消息时,可以使用:

count = arcpy.GetMessageCount()
print(arcpy.GetMessage(count-1))

注意:地理处理工具消息是由单个字符串组成,各个消息由换行符 (\n) 分隔。因此,不能使用反向索引,即 arcpy.GetMessage(-1)) 不会返回最后一条消息。

除了获取消息数量之外,您还可以使用 arcpy.GetMaxSeverity() 函数查询消息的最大严重性,如下所示: print(arcpy.GetMaxSeverity()) 在前面运行 Clip 工具的示例中,运行代码将返回值 0,因为只有信息消息。如果程序运行有错误,就会返回2

尽管 GetMessage()、GetMessageCount() 和 GetMaxSeverity() 函数很有用,但实际上 GetMessages() 函数使用最广泛。当工具失败时,消息是最重要的,因此 GetMessages() 函数通常与错误处理技术结合使用。

到目前为止讨论的函数允许您从上次运行的工具中检索消息,因为消息由 ArcPy 维护。但是,一旦运行另一个工具,您就无法再从之前运行的工具中检索消息。即使在运行多个工具后仍要检索消息,您可以使用 Result 对象来检索和解释地理处理工具消息。地理处理操作的结果将作为对象返回,而不是运行工具来创建保存到磁盘的新输出文件。例如:

import arcpy
arcpy.env.workspace = "C:/Data"
myresult = arcpy.GetCount_management("streams.shp")
count = result.messageCount
print(result.getMessage(count-1))

Result 类有几个属性和方法。 messageCount 属性返回消息的数量,getMessage() 返回特定的消息。

请注意,语法与使用通用消息函数相似但不完全相同。使用 arcpy.GetMessage() 时,您正在调用一个函数,而使用.getMessage() 时,您正在检索对象的属性。与调用消息函数相比,Result 类有几个优点,最值得注意的是消息可以在运行多个工具后维护。 Result 类还具有几个附加属性和方法,包括用于计算输出数量的选项以及使用地理处理工具的特定输出的能力。

5.13 许可的使用

ArcGIS Pro 扩展模块中的工具(例如 3D Analyst 或 Spatial Analyst)需要该扩展模块的额外许可。因此,如果您没有 Spatial Analyst 许可并尝试运行属于 Spatial Analyst 工具箱的工具,则该工具将无法运行。

import arcpy
arcpy.sa.Slope("C:/Data/dem", "DEGREE")
ERROR 000824: The tool is not licensed.
Failed to execute (Slope).

错误000824表示坡度处理工具没有许可。

arcgis pro有三种许可方式:
Named User license 指定的用户许可
Single Use license 单机版许可
Concurrent Use license 浮动许可

指定用户许可是 ArcGIS Pro 的默认许可类型。产品类型和扩展由管理员分配给组织的成员。您可以在 ArcGIS Pro 中的project–licence下查看许可。该图显示了一个典型示例,但产品类型和扩展因用户而异。通过要求用户登录以使用 ArcGIS Pro 来控制许可。
在这里插入图片描述
使用指定用户许可(ArcGIS Pro 最常见的许可类型)时,产品级别和扩展名由用户帐户设置,并且可从 ArcPy 自动获得。因此,某些函数(例如 arcpy.CheckOutExtension()arcpy .CheckInExtension())无效,仅在使用并发许可证时才需要使用。
在 Python 中运行的每个地理处理工具都会检查以确保它具有正确的许可证。为避免脚本因未经许可的工具而失败,您可以在脚本开头检查许可证。可以检查以下六种产品的许可证:

arcview (Basic)
arceditor (Standard)
arcinfo (Advanced)
engine (Engine runtime)
enginegeodb (Engine Geodatabase Update)
arcserver (Server)

可以通过在导入 ArcPy 之前导入相应的产品模块来设置产品级别。但是通常不需要在 Python 中设置产品级别。
例如,要将桌面产品许可级别设置为 ArcGIS Desktop Basic (arcview),脚本将以以下代码开头:

import arcview
import arcpy

只有在独立脚本中才需要设置产品和扩展。如果您在 ArcGIS Pro 的 Python 窗口中运行工具或在 ArcGIS Pro 中使用 Python 脚本工具,则许可已在应用程序中设置。

arcpy.CheckProduct() 函数可以检查请求的许可证是否可用。例如,以下代码确定 ArcGIS Desktop Advanced (arcinfo) 许可是否可用:

if arcpy.CheckProduct("arcinfo") == "Available":

可以使用arcpy.ProductInfo检查当前产品的许可证。

import arcpy
print(arcpy.ProductInfo())

使用arcpy.ChexkExtension检查产品许可是否是有效的。

import arcpy
arcpy.CheckExtension("spatial")

扩展的许可证名称也不区分大小写。此外,许可证名称不使用任何空格。例如,Data Reviewer 扩展的许可名称是 DataReviewer,也可以写成 datareviewer。

ArcGIS Pro 最广泛使用的许可类型是指定用户许可。对于这种类型的许可证,在您的脚本中使用 CheckExtension() 函数检查任何必要扩展的许可证的可用性很重要。但是,如果没有可用的许可证,则无法使用 ArcPy 扩展,这只能通过管理用户帐户来解决。

原书中介绍了很多内容,没有完全详细的介绍,在实际使用过程中,我们用到了之后再进行处理就行,或直接先打开arcgis pro,查看一下各个拓展模块的许可,不也是很方便。
当然,这就需要当代码移植到别人电脑时,别人也去检查一下许可。

5.14 访问arcgis pro官网的帮助

我认为学会访问官网的技术支持是很重要的,很多内容网上都没有解答,官网提供了很多详细的信息。
https://pro.arcgis.com/zh-cn/pro-app/latest/help/main/welcome-to-the-arcgis-pro-app-help.htm
在这里插入图片描述
在官网可以查看不同版本的帮助、使用工具名进行搜索、还提供了python语法的例子等。

本章需要记住的知识点:

原文:

The ArcPy package provides access from Python to the geoprocessing functionality in ArcGIS Pro. ArcPy is organized in modules, functions, and classes.

Nearly all geoprocessing tools in ArcGIS Pro are provided as functions of ArcPy. Once ArcPy is imported into a Python script, you can run the geoprocessing tools found in the standard toolboxes that are installed with ArcGIS Pro. The syntax for running a tool is arcpy. <toolname_toolboxalias>(). The documentation for each tool provides details on the required and optional parameters needed for a tool to run. Additional nontool functions in ArcPy are available to support geoprocessing and other tasks.

Classes in ArcPy are used to create objects. Commonly used classes are the env class and the SpatialReference class. The syntax for setting the property of a class is arcpy.. = .

Messages that result from running a tool can be retrieved using message functions, including GetMessages(), GetMessage(), and GetMaxSeverity(). Messages can consist of information, warning, or error messages.

Several functions are available to check available licenses for products and extensions, to check out licenses, and to check licenses back in.

The help pages of ArcGIS Pro contain many examples of Python code, including the help pagesfor individual geoprocessing tools.

翻译:

ArcPy 包提供从 Python 访问 ArcGIS Pro 中的地理处理功能。 ArcPy 以模块、函数和类的形式进行组织。

ArcGIS Pro 中几乎所有的地理处理工具都作为 ArcPy 的功能提供。将 ArcPy 导入 Python 脚本后,您可以运行随 ArcGIS Pro 一起安装的标准工具箱中的地理处理工具。运行工具的语法是 arcpy.<工具名_工具箱别名>(<参数>)。每个工具的文档都提供了有关运行工具所需的必需参数和可选参数的详细信息。 ArcPy 中的其他非工具函数可用于支持地理处理和其他任务。

ArcPy 中的类用于创建对象。常用的类是 env 类和 SpatialReference 类。设置类属性的语法是 arcpy..<属性> = <值>。

运行工具产生的消息可以使用消息函数检索,包括 GetMessages()、GetMessage() 和 GetMaxSeverity()。消息可以包含信息、警告或错误消息。

有多种功能可用于检查产品和扩展的可用许可证、签出许可证以及重新签入许可证。
ArcGIS Pro 的帮助页面包含许多 Python 代码示例,包括各个地理处理工具的帮助页面。

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值