通过 Python 使用类

类的作用类似于建筑设计蓝图。蓝图为如何创建事物提供了一个框架,类可用于创建对象,即通常所说的实例。ArcPy 类(如 SpatialReferenceExtent 类),往往被作为完整的地理处理工具参数设置的快捷方式,否则,这些参数设置会使用更加复杂的字符串。

ArcPy 包含多个类,包括 SpatialReferenceValueTablePoint。类实例化之后,其属性和方法便可使用。类包含一个或多个方法,称为构造函数。构造函数用于初始化类的新实例。在下例中,SpatialReference(prjFile) 是类的构造函数,它通过读取投影文件创建 spatialRef 对象。

import arcpy

prjFile = "c:/projections/North America Equidistant Conic.prj"
spatialRef = arcpy.SpatialReference(prjFile)

与其他很多类相同,SpatialReference 包含多个方法和属性。基于上一个示例进行构建,您可以访问 spatialRef 的属性。

import arcpy

prjFile = "c:/projections/North America Equidistant Conic.prj"
spatialRef = arcpy.SpatialReference(prjFile)

# Print the SpatialReference's name, and type
#
print spatialRef.name
print spatialRef.type

类可以重复使用;在下例中,通过 Point 类创建了两个唯一的点对象。

import arcpy

pointA = arcpy.Point(2.0, 4.5)
pointB = arcpy.Point(3.0, 7.0)
注注:

对于多数可由类创建的对象,也可通过 CreateObject 函数来创建。但是,通过类创建这种方法更加易用且更易读取。

将类与地理处理工具配合使用

工具参数通常使用简单文本字符串来定义。数据集名称、路径、关键字、字段名称、容差、域名可通过带引号的字符串指定。

对于需要多个属性的较复杂参数,难以使用简单字符串对其进行定义。这种情况下可使用类(例如,SpatialReferenceValueTablePoint 类)来定义这些字符串,而不必输入复杂的长文本字符串。每个工具的文档中都包含一个脚本实例,介绍如何定义和使用各个工具参数。

在下例中,SpatialReference 对象被创建并用来定义由 CreateFeatureClass 工具创建的新要素类的输出坐标系。

import arcpy

inputWorkspace = "c:/temp"
outputName =  "rivers.shp"

prjFile = "c:/projections/North America Equidistant Conic.prj"
spatialRef = arcpy.SpatialReference(prjFile)

# Run CreateFeatureclass using the spatial reference object
#
arcpy.CreateFeatureclass_management(inputWorkspace, outputName, "POLYLINE", 
                                    "", "", "", spatialRef)

该参数的字符串类似如下所示:PROJCS['North_America_Equidistant_Conic',GEOGCS['GCS_North_American_1983',DATUM['D_North_American_1983',SPHEROID['GRS_1980',6378137.0,298.257222101]],PRIMEM['Greenwich',0.0],UNIT['Degree',0.0174532925199433]],PROJECTION['Equidistant_Conic'],PARAMETER['False_Easting',0.0],PARAMETER['False_Northing',0.0],PARAMETER['Central_Meridian',-96.0],PARAMETER['Standard_Parallel_1',20.0],PARAMETER['Standard_Parallel_2',60.0],PARAMETER['Latitude_Of_Origin',40.0],UNIT['Meter',1.0]];IsHighPrecision

相关主题

9/15/2013