ArcPy学习笔记(二)访问空间数据

第二章 访问空间数据

1.检查数据的存在性
在使用ArcGIS中的工具时,当输入一个不存在的数据集,工具就会报错,在ArcPy中同样有Exists函数来判断数据集是否存在,返回一个布尔值(True/False)。它可以判断的有当前工作空间中的要素类、属性表、数据集、shp、工作空间、图层等其他文件。

arcpy.Exists(<database>)

下面这段代码是在确认该路径中的Panyu.shp文件是否存在

import arcpy
a=arcpy.Exists("D:/PythonforArcGIS/study/shapefile/GBA/Panyu.shp")
print a

输出结果为
在这里插入图片描述
注意,因为文件较多,输出结果的时间会相对较长

2.ArcPy中的路径
分为两种:
系统路径——windows操作系统可以识别的路径,如上面代码中的D:/PythonforArcGIS/study/shapefile/GBA/Panyu.shp。
目录路径——仅ArcGIS可以识别的路径,如D:/Data/study.gdb\final,其中study.gdb是个数据库,因此只能ArcGIS识别。

3.描述数据
Describe函数可用于描述输入要素类的属性,如要素的类型(点、线、面或其他类型)。这类似于在使用ArcGIS工具时,不同工具要求输入的数据类型不一样,当输入一个错误类型的数据时,工具就会自动提示,因此存在一个内置验证机制。
Describe主要用于确定数据集的形状类型。

import arcpy
a=arcpy.Describe("D:/PythonforArcGIS/study/shapefile/GBA/Panyu.shp")
print a
print a.shapetype

输出结果如下,加上shapetype可以输出其类型
在这里插入图片描述
此外可以添加不同的后缀来进行属性查看,如shapeType、dataType、catalogPath、spatialReference、name、path、file等。
输入.datatype后,返回结果为
在这里插入图片描述
有了Describe函数就可以先确认数据类型,并在符合要求的情况下,再进行裁切。

import arcpy
arcpy.env.workspace="D:/PythonforArcGIS/study/shapefile/GBA"
infc="GBA.shp"
clipfc="Panyu.shp"
outfc="GBA_clip.shp"
des=arcpy.Describe(clipfc)
type=des.shapeType
if type=="Polygon":
    arcpy.Clip_analysis(infc,clipfc,outfc)
else:
    print "The clip features are not polygon"

可以看到输出的文件已成功保存至工作空间中
在这里插入图片描述

4.列出数据
批处理的首要任务之一是为数据创建目录列表,以便在处理过程中可以遍历数据。
ArcPy中的列表函数包括ListFields、ListIndexs、ListDatasets、ListFeatureClasses、ListFiles、ListRasters、ListTables、ListWorkspace和ListVersion。
ListFeatureClasses函数返回当前工作空间中的要素类,语法如下

ListFeatureClasses({wild_card},{feature_type},{feature_dataset})

三个参数分别通过名称、要素类型、要素数据集来限制返回的结果,下面代码返回当前工作空间中的所有的要素类:

import arcpy
arcpy.env.workspace="D:/PythonforArcGIS/study/shapefile/GBA"
fclist=arcpy.ListFeatureClasses()
print fclist

返回
在这里插入图片描述
可以使用通配符*来过滤文件名。例如下面的代码将当前工作空间内以G开头的要素类创建成一个新列表

fclist=arcpy.ListFeatureClasses("G*")

输出结果如下
在这里插入图片描述
当然,还可以通过ListFeatureClasses中的参数进行筛选,第二个参数就是数据类型,该参数可以是point、polygon、polyline、annotation、arc等。

ListRasters函数可用于在当前工作空间中创建栅格数据集列表,语法与上一个相似

ListRasters({wild_card},{raster_type})

注意第二个参数只能填栅格的数据类型,比如tif,如果填shp只会输出空列表

ListFields函数以列表形式返回数据集中某个要素类或某个属性表的字段,语法如下

ListField(dataset,{wild_card},{field_type}

三个参数分别是数据集、名称、字段类型
下图可在第三个类型参数中填的值
在这里插入图片描述

import arcpy
arcpy.env.workspace="D:/PythonforArcGIS/study/shapefile/GBA"
fclist=arcpy.ListFields("Panyu.shp","","string")
print fclist

输出结果我们可以发现不是中文
在这里插入图片描述
经过尝试后,无法直接加上一个.xxx就能让其变为原字段的内容
但可以通过for循环后,对列表中的每个元素进行输出就可以

import arcpy
arcpy.env.workspace="D:/PythonforArcGIS/study/shapefile/GBA"
fclist=arcpy.ListFields("Panyu.shp","","string")
for field in fclist:
    print field.name+""+str(field.length)

注意在单独的field后面家伙是哪个.name即可查看该字段的名称,输出结果如下图
在这里插入图片描述

5.对列表使用for循环
上面那个例子已经用过for循环了,这里可以再举一个

import arcpy
import sys
reload(sys)
sys.setdefaultencoding('utf8')

arcpy.env.workspace="D:/PythonforArcGIS/study/shapefile/GBA"
fclist=arcpy.ListFields("Panyu.shp")
'''for field in fclist:
    print field.name+""+str(field.length)'''

for field in fclist:
    print "{0} is a type of {1} with a length of {2}".format(field.name,field.type,field.length)

第2、3、4行代码是避免出现解码问题报错而加上去的
上面代码输出每一个字段的名字、类型、长度

在这里插入图片描述

6.操作列表
len函数可用于确定列表中的数量
以上面代码变量为例,len(fclist)调用

sort函数可用于对列表排序。默认按字母顺序排序
sort( key=None, reverse=False),False为正序,True为倒序

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值