1.检查数据的存在性
在Python脚本中,可以使用Exists函数来检查当前工作空间中的要素类、属性表、数据集、shapefile、工作空间、图层以及其他文件是否存在。
Exists函数的语法如下:
arcpy.Exists(<dataset>)
下面的代码用于确定某个shapefile文件是否存在:
import arcpy
print arcpy.Exists("C:/Data/streams.shp")
函数的返回值(True或False)会输出到屏幕上。
在ArcPy中,需要区分两种类型的路径:
系统目录–Windows操作可以识别的路径
目录路径—仅ArcGIS可以识别的路径
os.path.exists
这样的内置函数可以判断系统路径是否存在,但是这些函数无法处理目录路径。
目录路径的相关说明:
文件地理数据库的后缀.gdb,例如study.gdb
个人地理数据库的后缀为.mdb,例如study.mdb
企业地理数据库的后缀为.sde,例如study.sde
2.描述数据
地理处理工具可以处理所有类型的数据。每种数据类型都有其特定的属性,这些属性可以用于控制脚本工作流。Describe函数可确定输入要素类的属性,例如要素的类型(点、线、面或者其他类型)。可以使用Describe函数确定输入数据集的形状类型。
描述数据集的语法如下:
import arcpy
<variable> = arcpy.Describe(<input dataset>)
2.1形状
下面一段代码描述了一个shapefile,然后输出它的形状类型。
import arcpy
desc = arcpy.Describe("C:/Data/streams.shp")
print desc.shapeType
由于Describe对象中有许多不同的属性,所以需要将这些属性分组。有一个属性组是FeatureClass。shapeType属性就属于该属性组。FeatureClass属性组为要素数据类型(例如geodatabase)提供了访问接口。
下面的代码首先确定裁剪要素的形状类型,并在形状类型为多边形时,运行Clip工具。
import arcpy
arcpy.env.workspace = "c:/Data"
infc = "streams.shp"
clipfc = "study.shp"
outfc = "streams_clip.shp"
desc = arcpy.shapeType
if type == "Polygon":
arcpy.Clip_analysis(infc, clipfc, outfc)
else:
print "The clip feature are not polygons."
2.2数据类型和空间参考
在Descibea函数中还有很多属性组,比如Dataset属性组,包括数据集的类型和空间参考等属性。下面的代码描述了一个shapefile文件,并输出数据集的类型和空间参考的名称。
import arcpy
fc = "C:/Data/stream.shp"
desc = arcpy.Describe(fc)
sr = desc.spatialReference
print "Dataset type:" + desc.datasetType
print "Spatial reference:" + sr.name
2.3路径和名称
Descibe函数返回一个具有很多属性的Describe对象。这些属性包括文件路径、目录路径、名称、文件名称和基本名称等。
import arcpy
arcpy.env.workspace = "C:/Data/study.gdb"
element = "roads"
desc = arcpy.Describe(element)
print "Data Type:" + desc.dataType
print "File path:" + desc.path
print "Catalog path:" + desc.catalogpath
print "File name" + desc.file
print "Base name:" + desc.baseName
print "Name:" + desc.name
运行后结果如下:
3.列出数据
批处理的首要任务之一就是为数据创建目录列表,以便在处理过程中可以遍历数据。ArcPy中的列表函数包括ListFields、ListIndexs、ListDatasets、ListFeatureClasses、ListRasters、ListTables、ListWorkspace和ListVersions
。这些函数都是类似的,a)其中一些函数需要输入数据集,因为这些函数所要处理的数据存储在数据集中。b)其他函数则不需要输入数据集,但是需要设置当前的工作空间的路径。因为在函数的参数列表中并没有可以设置工作空间的参数。所有函数都具有一个通配符参数(*),一个通配符定义了一个名称过滤器,只有符合名称过滤器中的规则,数据才能输入到列表中。
3.1 ListFeatureClasses
ListFeatureClasses函数返回当前工作空间中的要素类。语法如下:
ListFeatureClasses({wild_crad}, {feature_type}, {feature_dataset})
这个函数有三个可选参数。这三个参数分别通过名称要素类型和要素数据集来限制返回的结果。下面的代码返回当前工作空间中所有的要素类:
import arcpy
from arcpy import env
env.workspace = "C:/Data"
fclist = arcpy.ListFeatureClasses()
3.1.1通配符
所有的列表函数都返回一个Python列表。
可以使用通配符过滤文件名,从而限制输出到列表的数据集。例如下面的代码将当前空间以w开头的要素类创建成一个新的列表。
fclict = arcpy.ListFeatureClasses("w*")
3.1.2要素类型
在ListFeatureClasses函数中,第二个参数是要素类型。这个擦书可将列表的内容限制为特定的数据类型,例如仅匹配点要素类。
fclist = arcpy.ListFeatureClasses("", "point")
第二个要素类型参数可以是annotation、arc、dimension、edge、junction、label、line、multipatch、node、point、polygon、polyline、region、route和tic。
3.2 ListRasters
可以使用ListRasters
函数在当前工作空间中创建栅格数据集列表,其语法与ListFeatureClasses类似:
ListRasters({wild_card}, {raster_type})
例如将输出列表中的栅格数据限定为TIFF影像,
rasterlist = arcpy.ListRasters(“”,“tif”)
3.3ListFields
ListFields函数以列表的形式返回数据集中某个要素类或属性表的字段,其语法如下:
ListFields(dataset, {wild_crad}, {filed_type})
ListFields函数有三个参数,分别是名称、字段类型和数据集。其中。数据集是必选参数。字段列表就是从所设置的数据集或属性表中获得。例如下面的代码将shapefile中所有的字段创建成一个字段列表。
import arcpy
from arcpy import env
env.workspace = "D:/Data"
fieldList = arcpy.ListFields("roads.shp")
另外两个参数可以通过名称和字段类型限制输出到列表中的字段。下面的代码将shapefile中所有的整型字段创建成一个列表。
fileldlist = arcpy.ListFields(“roads.shp”, “”, “Integer”)
有效的字段类型包括ALL、BLOB(二进制对象)、Date、Geometry、GuID(全局唯一标识符)、Integer、OID(对象标识符)、Raster、Single、SmallInteger和String。上述字段都以字符串格式表示,且不区分大小写。
ListField函数返回的是一个字段对象列表,而其他大多数列表函数返回的是一个字符串列表。字段对象的属性包括字段名、别名、类型和长度。例如,下面的脚本创建了一个仅包含字符串类型的字段列表,并且输出列表中每个字符串的长度。
import arcpy
from arcpy import env
env.workspace = "C:/Data"
fieldList = arcpy.ListFields("roads.shp", "", "string")
for field in fieldList:
print field.name + " " + str(field.length)
length属性返回一个整数,并以字符串的形式输出。
4.列表使用for循环
可以使用批处理对一个需要处理的列表进行操作。
import arcpy
from arcpy import env
env.workspace = "C:/Data"
tifflist = arcpy.ListRaster("", "TIF")
for tiff in tifflist:
arcpy.BuildPyramids_management(tifff)
在这个例子中,ListRaster函数用来创建一个TiFF文件列表。for循环用来遍历列表中的每个元素,并创建金字塔。