arcpy基础篇(2)-访问空间数据

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循环用来遍历列表中的每个元素,并创建金字塔。

  • 4
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值