初识arcpy

1.导入ArcPy

在使用ArcPy之前,需要先导入ArcPy站点包。因此,在常见的地理处理脚本中,第一行代码会是:

import arcpy

在导入ArcPy之后,可以运行ArcGIS标准工具箱中的所有地理处理工具。ArcPy包含很多模块,其中有两个专业模块,分别是自动化制图模块(arcpy.mapping)和地图代数模块(arcpy.sa)。可以使用以下语句导入这些模块:

import arcpy.mapping

在编写ArcGIS脚本时,一般要先设置当前工作空间。例如,下面的代码会将C:/Data设置为当前工作空间。
import arcpy
arcpy.env.workspace=r’C:\Data’
在ArcPy中,地理处理环境参数可以通过env类的属性进行设置。

2.使用地理处理工具

ArcPy可以访问ArcGIS for Desktop中的地理处理工具。在Python脚本里,可以通过工具的名称来调用工具。利用Python调用工具的方法有两种。最早是通过调用函数的形式调用工具,所有工具在ArcPy中均已函数的形式提供。一个ArcPy函数针对某一个特定的任务完成相应的功能。

2.1通过函数调用工具

语法如下:

arcpy.<toolname_tool_boxalias>(<parameters>)

下面是运行Clip工具的代码:

import arcpy
arcpy.env = r'C:/Data'
arc.Clip_analysis("streams.shp", "study.shp", "result.shp")

2.2通过匹配工具箱别名的形式调用工具

以这种方式调用工具首先要引用工具箱的别名,随后是工具名,最后是工具参数。具体语法如下:

arcpy.<toolboxalias>.<toolname>(<parameters>)

下面是运行Clip工具的代码:

import arcpy
arcpy.env = r'C:/Data'
arc.analysis.Clip("streams.shp", "study.shp", "result.shp")

两种方法具有同样的效果。

2.3指定可选参数

可选参数在参数列表中总是位于必选参数的后面,但是有时一些可选参数也是需要设置的,有可能需要跳过一些可选参数。
下面以Buffer工具的语法为例:

Buffer_analysis(in_feature, out_feature, buffer_distance_or_field, {line_side}, {line_end_type}, {dissolve_option}, {dissolve_field})

我们可以通过设置参数为空字符串(”“)或井号(”#“)以及明确指定要使用的参数名称及其参数值来进行设置。
方法1:设置空字符

arcpy.Buffer_analysis("roads", "buffer", "100METERS", "", "","LIST","Code")

方法二:井号

arcpy.Buffer_analysis("roads", "buffer", "100METERS", "#", "#","LIST","Code")

方法三:明确参数名

arcpy.Buffer_analysis("roads", "buffer", "100METERS", dissolve_option="LIST",dissolve_field="Code")

4.getOuput

尽管很多工具都只有一个输出,但是也有一部分工具有多个输出。结果对象中getOutput方法可以通过索引值来获得指定的输出。获取地理处理结果的通用方法如下:

import arcpy
arcpy.env.workspace = "C:/Data/study.gdb"
buffer = arcpy.Buffer_analysis("str", ''str_buf", "100 METERS")
count = arcpy.GetCOunt_mangement(buffer).getOutput(0)
print str(count)

5.使用地理处理工具箱

ArcPy站点包被导入Python后,就可以使用ArcGIS所有的系统工具。在Python中导入自定义工具箱,也可以使用其中的自定义工具,所以即使自定义工具箱被添加到ArcToolbox中,如果没有使用import语句导入,那么也无法使用Python访问这些工具。

5.1导入工具箱

import arcpy
arcpy.ImportToolbox(path)

ImportToolbox函数引用的是磁盘上实际的工具箱文件(.tbx),而不是仅仅引用工具名称。

5.2获取工具

在导入工具箱后,利用Python获取工具的语法如下:
arcpy._
如果一个工具箱没有别名,则可以通过ImportToolbox函数的第二个参数,设置一个临时别名,具体的代码如下:

arcpy.ImportToolbox("sampletools.tbx", mytools)

一旦设置了别名,就可以通过Python访问工具箱的工具。假如文件sampletools.tbx包含一个叫做MyModel的工具,访问这个工具的代码如下:

arcpy.MyModel_mytools(<parameters>)

或者

arcpy.mytools.MyModel(<parameters>)

ImportToolbox函数还可以用于从网络或者本地服务器上加载地理处理服务。

6访问语法

6.1 Usage

在Python中,可以通过Usage函数获取工具的语法。例如,下面的代码输出了Editing Tools工具箱中所有的语法:

import arcpy
tools = arcpy.ListTools("*_analysis")
for tool in tools:
print arcpy.Usage(tool)

6.2 help

另一种在Python中访问语法的方法就是使用Python内置的help函数。例如,下面的代码将输出Clip工具的语法:

print help(arcpy.Clip_analysis)

7环境设置

环境设置是控制地理处理工具流的重要基础。env类的属性包含了一系列的地理处理环境,属性可以写入和读取具体值。访问env类属性的代码如下:

arcpy.env.<environmentName>

7.1工作空间

例如,可以使用以下代码设置当前工作空间:

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

7.2类属性

env类中还有很多其他的属性。在ArcPy帮助文档中可以找到完整的列表,例如长度、输出坐标系,临时工作空间和XY域。下面将栅格大小设置为30:

import arcpy
arcpy.env.cellSize = 30

env类属性不仅可以进行环境的设置,也可以读取现有的环境的设置值。例如下面的代码读取了XY容差。

import arcpy
print env.XYTolerance

可以使用ArcPy ListEnvironments函数获得一个包含所有地理处理环境的列表:

import arcpy
print arcpy.ListEnvironments()

此外,ArcGIS中的地理处理选项也可以实现某些特定环境设置,例如覆盖地理处理操作的输出.

import arcpy
from arcpy import env
env.overwriteOutput = True

8 工具消息

工具运行时,相关信息会被记录下来。从ArcToolbox中运行运行工具时,如果没有启用后台处理,那么地理处理信息就会显示在进度对话框中;从Python窗口中运行工具时,只会显示错误消息。
当运行一个独立的脚本时,这些消息不回在窗口中显示,但是可以通过Python脚本获取这些消息,并对其进行查询,打印或将其写入文件。
所有消息都具有严重性属性,即信息性、警告或错误。其中0表示信息性,1表示警告,2表示错误。

8.1GetMessage

最近一次执行工具所生成的消息由ArcPy进行保存,并且可以使用GetMessage函数进行查询。
例如,当运行一个Clip工具时,获取其消息的代码如下:

import arcpy
arcpy.env.workspace = "C:/Data"
infc = "streams.shp"
clipfc = "study.shp"
outfc = "result.shp"
arcpy.Clip_analysis(infc, clipfc, outfc)
print arcpy.GetMessages()

代码运行的结果如下:
在这里插入图片描述

8.2GetMessageCount

GetMessageCount函数会返回最近一次执行工具时所生成的消息数。

arcpy.GetMessageCount()

8.3GetMaxSverity

此外,还可以使用GetMaxSeverity函数查询最严重的消息。

print arcpy.GetMaxSeverity()

8.4getMessage

结果类中很多属性和函数,getMessage返回特定的消息。例如运行下面代码可以查看消息,并打印最后一条消息。

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

当使用arcpy.GetMessage()时,是在调用一个函数;而使用.getMessag()时,是在查询一个对象的属性。使用结果类比直接调用函数更具有优势,最为显著的一点就是在运行多个工具之后,仍然可以保留结果对象上的消息。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值