2ArcPy文档格式.docx
《2ArcPy文档格式.docx》由会员分享,可在线阅读,更多相关《2ArcPy文档格式.docx(37页珍藏版)》请在冰豆网上搜索。
TEXT"
arcpy.CalculateField_management("
!
shape.length@miles!
"
PYTHON_9.3"
arcpy.FeatureClassToFeatureClass_conversion("
DatabaseConnections/MySDE.sde/PortlandDataset"
streets"
执行地理处理工具时,工具的结果会返回到result对象中。
通常,该对象是由工具生成或更新的输出数据集的路径。
在其他情况下,它可能会包含其他类型的值,如数值或布尔值。
如果工具的输出是多值参数,则这些值可在列表中以列表的形式返回。
以下代码示例显示了如何捕获返回值以及这些值的具体内容:
返回输出要素类的路径,该结果可用作其他函数的输入;
返回要素数目。
例1.3从工具获取结果
result=arcpy.Buffer_analysis("
rivers"
riverBuf"
50METERS"
printresult
C:
\Portland\Portland_OR.gdb\riverBuf
arcpy.Clip_analysis("
result,"
streets_50m_of_rivers"
result=arcpy.GetCount_management("
printresult.getOutput(0)
54
2、使用环境设置
可将地理处理环境设置视为影响工具执行结果的附加参数。
这些参数与正常的工具参数不同,因为它们是通过工具单独进行设置的,并且供工具在运行时查询和使用。
诸如感兴趣区域、输出数据集的坐标系以及新栅格数据集的像元大小等环境设置均可通过工具进行指定和支持。
可通过env类来获得属性形式的环境设置。
这些属性可用于检索和设置当前环境值。
下面是如何使用环境值的示例:
例1.4设置工作空间环境
arcpy.env.workspace="
/data/Portland.gdb"
streetBuf"
arcpy.env.spatialGrid1=arcpy.CalculateDefaultSpatialGridIndex_management("
).getOutput(0)
ifarcpy.env.cellSize!
=30:
arcpy.env.cellSize=30
3、使用函数
函数是用于执行某项特定任务并能够纳入更大的程序的已定义功能。
除工具之外,ArcPy还提供了多种函数,用来更好地支持地理处理工作流。
函数可用于列出某些数据集、检索数据集的属性、检查数据是否存在、在将表添加到地理数据库之前验证表名称,或执行其他许多有用的脚本任务。
以下示例代码显示的是获得数据的属性:
例1.5使用函数
importarcpy
#printsTrue
printarcpy.Exists("
)
#printsNAD_1983_StatePlane_Oregon_North_FIPS_3601_Feet
sr=arcpy.Describe("
).spatialReference
printsr.name
4、使用类
ArcPy类,如SpatialReference和Extent类,通常用作地理处理工具参数设置的快捷方式,否则的话,这些参数会使用更加复杂的字符串。
类的作用类似于建筑设计蓝图。
蓝图为如何创建事物提供了一个框架,而类则可用来创建对象,即通常所称的实例。
例1.6使用类
spatial_ref=arcpy.SpatialReference("
HawaiiAlbersEqualAreaConic"
5、使用模块
ArcPy包含涉及其他ArcGIS领域的模块。
有一系列模块支持ArcPy,包括数据访问模块(arcpy.da)、制图模块(arcpy.mapping)、ArcGISSpatialAnalyst扩展模块(arcpy.sa)和ArcGISNetworkAnalyst扩展模块(arcpy.na)。
例如,arcpy.sa模块中的工具将使用SpatialAnalyst工具箱中的工具,但被配置为支持“地图代数”。
因此,执行arcpy.sa.Slope与执行SpatialAnalyst工具箱中的坡度工具的作用是相同的。
第2章使用ArcPy准备工作
2.1导入ArcPy
在导入ArcPy之后,可以运行随ArcGIS安装的标准工具箱中的所有地理处理工具。
例2.1导入ArcPy
#Importingarcpy
模块为通常包含函数和类的Python文件。
有一系列模块支持ArcPy,包括制图模块(arcpy.mapping)、SpatialAnalyst模块(arcpy.sa)和GeostatisticalAnalyst模块(arcpy.ga)。
要导入整个模块,请使用导入模块:
例2.2导入模块
#Importonlyarcpy.mapping
importarcpy.mapping
在很多情况下,用户可能不想使用整个模块或无需使用整个模块。
如果只导入某一模块的一部分,可以使用from-import语句。
在下例中,将导入env类(env类包含所有地理处理环境)。
现在无需以arcpy.env的形式访问环境,而可以将其简化为env。
例2.3导入部分模块
#Importenvfromarcpyandsettheworkspaceenvironment
fromarcpyimportenv
env.workspace="
/data"
遵循相同的思路,有时用户可能需要注意:
如何对模块或模块的一部分进行标识以使脚本更具可读性,以及对于首选项来说默认名称可能过长。
在上述任一情况下,均可以使用from-import-as的形式。
与先前的示例相同,下面的示例中也将导入env类,但会指定ENV作为env类的名称:
例2.4使用别名
#ImportenvfromarcpyasENVandsettheworkspaceenvironment
fromarcpyimportenvasENV
ENV.workspace="
模块的内容将被直接导入到命名空间中,这表示用户随后可以直接使用所有这些内容,而无需为它们添加前缀。
使用此方法存在一些风险。
具有相同名称的其他对象、变量、模块等将被覆盖,另外在使用大型模块时,命名空间可能会变得异常拥挤和杂乱。
此方法可能导致在阅读脚本时出现不确定或难以阅读的情况。
但是在某些情况下,from-import-*可以简化代码,例如,在使用ArcGISSpatialAnalyst扩展模块的sa模块的情况下。
sa模块的优势之一在于,可以在一行中嵌套多个类和函数以生成输出栅格对象。
例2.5直接导入
#Importarcpyandthesamodule
fromarcpyimportsa
arcpy.CheckOutExtension("
spatial"
#Getinputparameters
inRaster1=arcpy.GetParameterAsText(0)
inRaster2=arcpy.GetParameterAsText
(1)
inRaster3=arcpy.GetParameterAsText
(2)
outRaster=(sa.Raster(inRaster1)+(sa.Raster(inRaster2)-sa.Raster(inRaster3)))
2.2地理处理环境设置(env)
每个工具都含有一组用于执行操作的参数。
其中一些参数在所有工具中通用,如容差或输出位置。
这些参数可从所有工具在运行期间使用的地理处理环境中获得默认值。
执行某一工具时,当前环境设置也可用作全局输入参数值。
诸如感兴趣区域、输出数据集的空间参考以及新栅格数据集的栅格像元大小等设置都可以使用地理处理环境指定。
1、获取和设置环境设置
环境设置以env类的属性的方式公开。
这些属性可用于检索或设置当前值。
每个环境设置都有一个名称和一个标注。
标注显示在ArcGIS中的环境设置对话框上。
名称用在脚本或ArcGIS应用程序的命令行中。
环境可作为环境类中的读/写属性进行访问,方法为arcpy.env.<
环境名称>
。
还可以利用Python的from-import语句简化代码,而不必为每个环境名称都添加arcpy.env前缀。
例2.6设置环境值
#Settheworkspaceenvironmentsetting#
/St_Johns/data.gdb"
#SettheXYToleranceenvironmentsetting#
env.XYTolerance=2.5
#Calculatethedefaultspatialgridindex,divideinhalf,then
#setthespatialgrid1environmentsetting#
result=arcpy.CalculateDefaultGridIndex_management("
roads"
env.spatialGrid1=float(result.getOutput(0))/2
#Cliptheroadsbytheurbanareafeatureclass#
arcpy.Clip_analysis("
"
urban_area"
urban_roads"
例2.7获取和设置环境值
#Checkthecurrentrastercellsizeandmakesureitisacertainsize
#forstandardoutput#
/avalon/data"
ifenv.cellSize<
10:
env.cellSize=10
elifenv.cellSize>
20:
env.cellSize=20
arcpy.HillShade_3d("
island_dem"
island_shade"
300)
设置环境值时要注意拼写和大小写。
将值指定给arcpy.env.Workspace与设置arcpy.env.workspace(注:
arcpy.env.workspace是正确的格式)是不同的。
2、使用环境设置处理临时数据
临时地理数据库和临时文件夹是提供保证存在的地理数据库和文件夹位置的只读环境。
这意味着,您可以随时可靠地使用地理数据库或文件夹,而不必创建或管理一个。
例2.8处理临时数据
inputFC=arcpy.GetParameterAsText(0)
clipFC=arcpy.GetParameterAsText
(1)
outputFC=arcpy.GetParameterAsText
(2)
#UsescratchGDBenvironmenttowriteintermediatedata#
tempData=arcpy.CreateScratchName(workspace=arcpy.env.scratchGDB)
bufferResult=arcpy.Buffer_analysis(inputFC,tempData,"
arcpy.Clip_analysis(clipFC,bufferResult,outputFC)
3、重新设置环境
由于地理处理环境对工具操作和输出有着很大的影响,因此需要保证能够追踪环境设置并在必要时将其重置为默认状态。
可使用ResetEnvironments函数恢复默认环境值,或者可以使用ClearEnvironment函数重置特定环境。
例2.9重新设置环境
#Resetgeoprocessingenvironmentsettings
arcpy.ResetEnvironments()
#Resetaspecificenvironmentsetting
arcpy.ClearEnvironment("
workspace"
4、env常用设置
环境设置以ArcPyenv类的属性的方式公开。
表2-1env常用属性
属性
说明
数据类型
cellSize
(读写)
支持“像元大小”环境设置的工具可以设置在操作时使用的输出栅格像元大小或分辨率。
默认输出分辨率由最粗糙的输入栅格数据集决定。
String
extent
支持“输出范围”环境的工具只会处理落入此设置中所指定范围内的要素或栅格。
mask
支持“掩膜”环境的工具只会考虑运行过程中落入分析掩膜范围内的像元。
nodata
支持NoData环境设置的工具将仅处理其中NoData有效的栅格
spatialGrid1
spatialGrid2
spatialGrid3
遵循“输出空间格网1、2和3”环境的工具将创建具有指定空间索引格网的要素类(如果要素类支持空间索引格网)。
Double
tileSize
支持“分块大小”环境的工具用于为存储在数据块中的栅格设置分块大小。
workspace
支持“当前工作空间”环境设置的工具将指定的工作空间用作地理处理工具输入和输出的默认位置。
XYDomain
支持“输出XY属性域”环境的工具可为输出地理数据集的x,y属性域设置特定范围。
XYResolution
支持此环境的工具可将x,y分辨率应用到输出地理数据集中。
XYTolerance
支持此环境的工具会覆盖在地理数据库内创建的地理数据集上的默认x,y容差。
2.3访问许可和扩展模块
每当在脚本中执行工具时,都会需要ArcGIS许可。
此外,运行ArcGIS扩展模块中的工具,如ArcGISSpatialAnalyst扩展模块,也需要针对该模块的许可。
如果无法获得必要的许可,工具将运行失败并返回错误消息。
例如,如果您安装有ArcGISforDesktopBasic的许可,并试图运行需要Standard或Advanced的许可,则工具将运行失败。
使用ArcGISforDesktopBasic或Standard许可时,脚本应将产品设置为Basic或Standard。
同样,使用Engine或EngineGeoDB许可时,脚本应将产品设置为Engine或EngineGeoDB。
如果未明确设置许可,将根据首次访问ArcPy工具、函数或类时的最高可用许可等级初始化许可。
每种工具都将执行检查以确保具有相应的许可。
如果不具有所需的许可,工具将运行失败。
为避免脚本在执行到一半时失败,可以在脚本开头执行检查,以尽早发现失败。
注意:
只有在独立脚本中才必须设置产品和扩展模块。
如果从Python窗口运行工具或者使用脚本工具,产品已在应用程序内进行设置,激活的扩展模块取决于“扩展模块”对话框。
1、Desktop、Engine/Server许可
产品模块会在导入arcpy前导入,以定义脚本使用的Desktop许可。
CheckProduct函数可用于检查Desktop许可的可用性,而ProductInfo函数能报告当前的产品许可。
例2.10检查ArcGISforDesktopAdvanced许可。
importsys
arcpy.env.workspace="
/data/world.gdb"
ifarcpy.CheckProduct("
ArcInfo"
)=="
Available"
:
arcpy.PolygonToLine_management("
Lakes"
LakeLines"
else:
msg='
ArcGISforDesktopAdvancedlicensenotavailable'
print(msg)
sys.exit(msg)
2、扩展模块许可
可以从许可管理器中获取扩展模块许可,并在不再需要时将其归还。
CheckExtension函数用于查看是否存在可为特定类型的扩展模块检出的许可,而CheckOutExtension会真正获取许可。
脚本获取到扩展模块许可后,即可执行扩展模块工具。
脚本使用完特定扩展模块中的工具后,应使用CheckInExtension函数将许可归还给许可管理器,以便其他应用程序使用。
当脚本完成时,所有检出的扩展模块许可和设置的产品许可都将归还给许可管理器。
下面的示例将执行一些ArcGIS3DAnalyst工具,并将Desktop产品许可设置为ArcGISforDesktopBasic,因为执行扩展模块中的工具时不需要ArcGISforDesktopAdvanced的许可。
如果未明确设置ArcGISforDesktopBasic的许可,并且无可用的ArcGISforDesktopAdvanced许可,则脚本将失败,因为运行扩展模块工具需要Desktop许可。
例2.11检查ArcGIS3DAnalyst扩展模块许可
classLicenseError(Exception):
pass
#SetdesktoplicenseusedtoArcGISforDesktopBasic#
importarcview
try:
ifarcpy.CheckExtension("
3D"
arcpy.CheckOutExtension("
else:
#Raiseacustomexception#
raiseLicenseError
env.workspace="
D:
/GrosMorne"
arcpy.HillShade_3d("
WesternBrook"
westbrook_hill"
arcpy.Aspect_3d("
westbrook_aspect"
exceptLicenseError:
print"
3DAnalystlicenseisunavailable"
except:
printarcpy.GetMessages
(2)
finally:
#CheckintheArcGIS3DAnalyst扩展模块#
arcpy.CheckInExtension("
第3章Python调用地理处理工具
3.1地理处理工具
1、地理处理
地理处理适合于各类使用ArcGIS的用户。
无论是初学者还是高级用户,地理处理都可能是日常使用ArcGIS的重要组成部分。
地理处理的基本目的是提供用于执行分析和管理地理数据的工具和框架。
地理处理所提供的建模和分析功能使得ArcGIS成为一个完整的地理信息系统。
地理处理提供了大量成套工具,用于执行从简单的缓冲区和面叠加到复杂的回归分析和影像分类等各项GIS任务。