|
|
|
|

导入 ArcPy

导入模块 路径和导入 ArcGIS 10 中引入了 ArcPy,这是一个 Python 站点包,它涵盖并进一步加强了 ArcGIS 9.2 中所采用的 arcgisscripting 模块的功能。ArcPy 提供了一种用于开发 Python 脚本的功能丰富的动态环境,同时提供每个...

作者:ESRI来源:ESRI|2017年09月28日
  • 导入模块
  • 路径和导入

ARCGIS 10 中引入了 ArcPy,这是一个 Python 站点包,它涵盖并进一步加强了 ARCGIS 9.2 中所采用的 ARCGISscripting 模块的功能。ArcPy 提供了一种用于开发 Python 脚本的功能丰富的动态环境,同时提供每个函数、模块和类的代码实现和集成文档。

使用以 ArcPy 编写的 ARCGIS 应用程序和脚本的优势在于,可以访问并使用由来自多种不同领域的 GIS 专业人员和程序员开发的大量 Python 模块。使用 Python 中的 ArcPy 的另一个主要原因是,Python 是一种通用的编程语言,易于学习和使用。通过这一解释和动态型编程语言,用户可以在交互式环境中快速地创建脚本原型并进行测试,同时这种编程语言功能强大,可编写大型应用程序。

# Importing arcpy
#
import arcpy

# Set the workspace environment and run Clip_analysis
arcpy.env.workspace = "C:/Data/Tongass"
arcpy.Clip_analysis("standb4", "clipcov", "standby_clip", "1.25")

在导入 ArcPy 之后,可以运行随 ARCGIS 安装的标准工具箱中的所有地理处理工具。

  • 分析工具箱
  • 制图工具箱
  • 转换工具箱
  • 数据管理工具箱
  • 编辑工具箱
  • 地理编码工具箱
  • 线性参考工具箱
  • 多维工具箱
  • 空间统计工具箱

导入模块

模块通常是一个包含函数和类的 Python 文件。ArcPy 由一系列模块支持,包括数据访问模块 (arcpy.da)、制图模块 (arcpy.mapping)、ArcGIS Spatial Analyst 模块 (arcpy.sa) 以及 ArcGIS Network Analyst 模块 (arcpy.na)。

要导入整个模块,请使用“导入”模块:

# Import only arcpy.mapping
#
import arcpy.mapping

当然,Python 还具有很多其他核心模块和第三方模块。如果还想使用 Python 的核心 ossys 模块,可以使用相似的导入方式:

# Import arcpy, os and sys
#
import arcpy
import os
import sys

在很多情况下,用户可能不想使用整个模块或无需使用整个模块。如果只导入某一模块的一部分,可以使用 from-import 语句。在下例中,将导入 env 类(env 类包含所有地理处理环境)。现在无需以 arcpy.env 的形式访问环境,而可以将其简化为 env

# Import env from arcpy and set the workspace environment
#
from arcpy import env
env.workspace = "c:/data"

遵循相同的思路,有时用户可能需要注意:如何对模块或模块的一部分进行标识以使脚本更具可读性,以及对于首选项来说默认名称可能过长。在上述任一情况下,均可以使用 from-import-as 的形式。与先前的示例相同,下面的示例中也将导入 env 类,但会指定 ENV 作为 env 类的名称:

# Import env from arcpy as ENV and set the workspace environment
#
from arcpy import env as ENV
ENV.workspace = "c:/data"

可以使用相同方式导入制图模块:

# Import the mapping module from arcpy as MAP and create a MapDocument
#  object
#
from arcpy import mapping as MAP
mxd = MAP.MapDocument("C:/maps/basemap.mxd")

其他版本的导入操作使用 from-import-* 的形式。模块的内容将被直接导入到命名空间中,这表示用户随后可以直接使用所有这些内容,而无需为它们添加前缀。例如:

# Import management from arcpy as * 
#
from arcpy.management import *

但是,使用此方法存在一些风险。具有相同名称的其他对象、变量、模块等将被覆盖,另外在使用大型模块时,命名空间可能会变得异常拥挤和杂乱。可以此方式考虑该问题:在下例中,管理模块和分析模块都将被导入为 *。这两个模块都具有“裁剪”工具。如果现在尝试使用“裁剪”工具,那么实际使用的会是哪种“裁剪”工具?答案是后者,但是此方法可能导致在阅读脚本时出现不确定或难以阅读的情况。

# Import the management and analysis modules from arcpy as *
#
from arcpy.management import *
from arcpy.analysis import *

# Which Clip is it?
#
Clip("standb4", "clipcov", "standby_clip", "1.25")

但是在某些情况下,from-import-* 可以简化代码,例如,在使用 ArcGIS Spatial Analystsa 模块的情况下。sa 模块的优势之一在于,可以在一行中嵌套多个类和函数以生成输出栅格对象。

许可:

以下两个实例都需要 ArcGIS Spatial Analyst 来运行。

# Import arcpy and the sa module as *
#
import arcpy
from arcpy.sa import *

arcpy.CheckOutExtension("spatial")

# Get input parameters
#
inRaster1 = arcpy.GetParameterAsText(0)
inRaster2 = arcpy.GetParameterAsText(1)
inRaster3 = arcpy.GetParameterAsText(2)

outRaster = (Raster(inRaster1) + (Raster(inRaster2) - Raster(inRaster3)))

现在比较下一个代码块,此代码块使用常规 import-from 语句。现在假设再向代码中添加一些类和函数 - 即使只为每个函数和类添加 sa.,代码的体积也将迅速增加,这将破坏可读性并且使代码行变得更加庞大。

# Import arcpy and the sa module
#
import arcpy
from arcpy import sa

arcpy.CheckOutExtension("spatial")

# Get input parameters
#
inRaster1 = arcpy.GetParameterAsText(0)
inRaster2 = arcpy.GetParameterAsText(1)
inRaster3 = arcpy.GetParameterAsText(2)

outRaster = (sa.Raster(inRaster1) + (sa.Raster(inRaster2) - sa.Raster(inRaster3)))

路径和导入

使用导入语句时,Python 将在以下位置中(并按以下顺序)查找匹配该名称的模块:

  1. 在 PYTHONPATH 系统环境变量中指定的路径
  2. 一组标准 Python 文件夹(当前文件夹、c:\python2x\libc:\python2x\Lib\site-packages 等)
  3. 在 1 和 2 中找到的任意 .pth 文件中所指定的路径

有关这方面的详细信息,请参阅以下内容:http://docs.python.org/install/index.html#modifying-python-s-search-path。

如果尚未安装 Python 2.7,则此程序使用 ArcGIS 10.5.1 产品的安装程序来安装。该安装程序还会将文件 Desktop10.3.pth(或者 Engine10.3.pth 或 Server10.3.pth)添加到 python27\Lib\site-packages 中。此文件中包含两行内容为系统中 ArcGIS 安装程序的 arcpy 和 bin 文件夹路径。在 Python 2.7 版本中,要成功导入 ArcPy 需要这两个路径。

使用导入语句时,Python 将参照系统的 PYTHONPATH 环境变量来查找模块文件。此变量将设置为一系列目录。

提示:

如果导入 ArcPy 的操作导致以下任一种错误,将无法找到所需模块:

  • 导入错误:未找到名称为 arcpy 的模块
  • 导入错误:未找到名称为 arcgisscripting 的模块

要解决此问题,请使用 Windows 资源管理器浏览至 python27\Lib\site-packages 文件夹,然后添加或编辑 Desktop10.3.pth 文件。此文件应包含以下三行内容(如果与实际不符,请将其更改为您的系统路径):

c:\Program Files\ArcGIS\Desktop10.3\arcpy
c:\Program Files\ArcGIS\Desktop10.3\bin
c:\Program Files\ArcGIS\Desktop10.3\ArcToolbox\Scripts

相关主题

  • 什么是 ArcPy?

上一篇:创建数据列表

下一篇:Python 快速浏览