每当在脚本中执行工具时,都会需要 ArcGIS 许可。此外,运行 ArcGIS 扩展模块中的工具,如 ArcGIS Spatial Analyst extension,也需要针对该模块的许可。如果无法获得必要的许可,工具将运行失败并返回错误消息。例如,如果您安装有 ArcGIS Desktop Basic 的许可,并试图运行需要 Desktop Standard 或 Desktop Advanced 的许可,则工具将运行失败。
使用 Desktop Basic 或 Desktop Standard 许可时,脚本应将产品设置为 ArcGIS Desktop Basic 或 Desktop Standard。同样,使用 Engine 或 EngineGeoDB 许可时,脚本应将产品设置为 Engine 或 EngineGeoDB。如果未明确设置许可,将根据首次访问 ArcPy 工具、函数或类时的最高可用许可等级初始化许可。
每种工具都将执行检查以确保具有相应的许可。如果不具有所需的许可,工具将运行失败。为避免脚本在执行到一半时失败,可以在脚本开头执行检查,以尽早发现失败。
Desktop、Engine/Server 许可
产品模块会在导入 arcpy 前导入,以定义脚本使用的 Desktop 许可。CheckProduct 函数可用于检查 Desktop 许可的可用性,而 ProductInfo 函数能报告当前的产品许可。
扩展模块许可
可以从许可管理器中获取扩展模块许可,并在不再需要时将其归还。CheckExtension 函数用于查看是否存在可为特定类型的扩展模块检出的许可,而 CheckOutExtension 会真正获取许可。脚本获取到扩展模块许可后,即可执行扩展模块工具。脚本使用完特定扩展模块中的工具后,应使用 CheckInExtension 函数将许可归还给许可管理器,以便其他应用程序使用。当脚本完成时,所有检出的扩展模块许可和设置的产品许可都将归还给许可管理器。
下面的示例将执行一些 ArcGIS 3D Analyst 工具,并将 Desktop 产品许可设置为 ArcGIS Desktop Basic,因为执行扩展模块中的工具时不需要 ArcGIS Desktop Advanced 的许可。如果未明确设置 ArcGIS Desktop Basic 的许可,并且无可用的 ArcGIS Desktop Advanced 许可,则脚本将失败,因为运行扩展模块工具需要 Desktop 许可。
class LicenseError(Exception):
pass
# Set desktop license used to Basic (keyword is arcview)
#
import arcview
import arcpy
try:
if arcpy.CheckExtension("3D") == "Available":
arcpy.CheckOutExtension("3D")
else:
# Raise a custom exception
#
raise LicenseError
arcpy.env.workspace = "D:/GrosMorne"
arcpy.HillShade_3d("WesternBrook", "westbrook_hill", 300)
arcpy.Aspect_3d("WesternBrook", "westbrook_aspect")
except LicenseError:
print("3D Analyst license is unavailable")
except arcpy.ExecuteError:
print(arcpy.GetMessages(2))
finally:
# Check in the ArcGIS 3D Analyst extension
#
arcpy.CheckInExtension("3D")
上例中,ArcGIS 3D Analyst extension 通过 finally 子句检入,从而确保无论是否出现异常都会检回该扩展模块。
返回值 Failed、Unavailable 或 NotLicensed 表示无法成功检出扩展模块。
以下是扩展模块名称及其扩展编码名称:
扩展 | 扩展编码 |
---|---|
ArcGIS 3D Analyst extension | 3D |
ArcGIS Data Interoperability extension for Desktop | DataInteroperability |
ArcGIS Data Reviewer Desktop | Datareviewer |
ArcGIS Aviation Airports | Airports |
ArcGIS Aviation Charting | Aeronautical |
ArcGIS Bathymetry | 深海探测 |
ArcGIS Maritime | Nautical |
ArcGIS Geostatistical Analyst extension | GeoStats |
ArcGIS Network Analyst extension | 网络 |
ArcGIS Spatial Analyst extension | 空间 |
ArcGIS Schematics extension | Schematics |
ArcGIS Tracking Analyst extension | 追踪 |
ArcGIS Workflow Manager (Classic) Desktop | JTX |
ArcScan | ArcScan |
ArcGIS Business Analyst | Business |
ArcGIS Defense Mapping | 国防 |
ArcGIS Production Mapping | Foundation |
ArcGIS Roads and Highways | 高速公路 |
StreetMap | StreetMap |
产品编码名称
产品编码 |
---|
ArcView(等效于 ArcGIS Desktop Basic 许可) |
ArcEditor(等效于 ArcGIS Desktop Standard 许可) |
ArcInfo(等效于 ArcGIS Desktop Advanced 许可) |
引擎 |
EngineGeoDB |
ArcServer |
许可函数
函数 | 说明 | ||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
CheckExtension(extension) | 核查是否存在可为特定类型的扩展模块检出的许可。
| ||||||||||||||||
CheckInExtension(extension) | 归还许可以便其他应用程序使用。
| ||||||||||||||||
CheckOutExtension(extension) | 获取许可。
| ||||||||||||||||
CheckProduct(code) | 检查申请的许可是否可用。
| ||||||||||||||||
ProductInfo() | 返回当前产品许可。
| ||||||||||||||||
SetProduct(code) | 定义 Desktop 许可。
|