2000字范文,分享全网优秀范文,学习好帮手!
2000字范文 > ArcPy常用基础功能

ArcPy常用基础功能

时间:2024-05-24 00:54:30

相关推荐

ArcPy常用基础功能

先来一段简单的ArcPy脚本:

# -*-coding:utf-8-*-import arcpytry:source_path_name = r"F:/GIS测试数据/测试.gdb"source_name = "DLTB"target_name = "Target_copy"arcpy.env.workspace = source_path_name# 覆盖已存在数据arcpy.env.overwriteOutput = Trueprint "Copy {0} to {1}".format(source_name, target_name)arcpy.Copy_management(source_name, target_name)except arcpy.ExecuteError:print arcpy.GetMessages()except Exception as e:print e.message

1、环境变量设置(env)

1.1、设置当前工作空间,将指定的工作空间用作地理处理工具输入和输出的默认位置。

arcpy.env.workspace = r"F:/GIS测试数据/测试.gdb"

1.2、覆盖任何现有输出。设置为True时,工具将执行并覆盖输出数据集。设置为False时,将不会覆盖现有输出,工具将返回错误。

arcpy.env.overwriteOutput = True

1.3、设置XY容差

arcpy.env.XYTolerance = "0.01 meters"

1.4、输出去除M值

arcpy.env.outputMFlag = "Disabled"

1.5、输出去除Z值

arcpy.env.outputZFlag = "Disabled"

2、列表函数

2.1、ListDatasets:列出工作空间中的所有数据集。可针对数据集名称和数据集类型指定搜索条件,从而限制返回的列表。

print "存在数据集 {0}".format(arcpy.ListDatasets('*'))

2.2、ListFeatureClasses:列出工作空间中的要素类,受名称、要素类型和可选要素数据集的限制。

print "存在要素类 {0}".format(arcpy.ListFeatureClasses(feature_type="Point"))

2.3、ListTables:按名称和表类型列出工作空间中的表

print "存在表 {0}".format(arcpy.ListTables())

2.4、ListRasters:按名称和栅格类型返回工作空间中的栅格列表。

print "存在栅格数据 {0}".format(arcpy.ListRasters())

2.5、ListFields:列出指定数据集中的要素类、shapefile 或表中的字段。返回的列表可用针对名称和字段类型的搜索条件进行限制,并将包含字段对象。

for field in arcpy.ListFields("F:/GIS测试数据/测试.gdb/DLTB"):print "{0} is a type of {1} with a length of {2}".format(field.name, field.type, field.length)

3、属性信息(Describe)

ftDesc = arcpy.Describe(source_name)

3.1、获取要素类属性

print "要素类的要素类型 {0}".format(ftDesc.featureType)print "是否有Z值 {0}".format(ftDesc.hasZ)print "是否有M值 {0}".format(ftDesc.hasM)print "指示要素类是否具有空间索引 {0}".format(ftDesc.hasSpatialIndex)print "Shape 字段的名称 {0}".format(ftDesc.shapeFieldName)print "几何形状类型 {0}".format(ftDesc.shapeType)

3.2、数据集属性

print "空间坐标系名称 {0}".format(ftDesc.spatialReference.name)

4、游标操作

4.1、查询游标(SearchCursor):

从表中检索的每一行都会作为一组字段值而返回。会按照提供给游标的 field_names 参数的相同顺序返回这些值。游标的 fields 属性也可用于确定字段值的顺序。

with arcpy.da.SearchCursor(r"F:\GIS测试数据\测试.gdb\XZQ", ["OID@"]) as cursor:for row in cursor:print "OID:{0}".format(row[0])

通过以下方式获取记录数:

# 方式一count = len([feature[0] for feature in arcpy.da.SearchCursor(source_name, "OID@")])# 方式二count = int(arcpy.GetCount_management(source_name).getOutput(0))

4.2、更新游标(UpdateCursor)

# 删除地类编码为0101的记录with arcpy.da.UpdateCursor(r'F:\GIS测试数据\测试.gdb\YBH', ['OID@'], "DLBM = '0101'") as cursor:for row in cursor:cursor.deleteRow()

# 将面积值赋值给NEW_AREAwith arcpy.da.UpdateCursor(r"F:\GIS测试数据\测试.gdb\XZQ", ["NEW_AREA", "SHAPE@AREA"]) as cursor:for row in cursor:row[0] = row[1]cursor.updateRow(row)

4.3、插入游标(InsertRow)

cursor = arcpy.da.InsertCursor("c:/base/data.gdb/roads_lut", ["roadID", "distance"])# Create 25 new rows. Set the initial row ID and distance valuesfor i in range(0, 25):cursor.insertRow([i, 100])del cursor

5、令牌

令牌是字段的一种快捷访问方式。常用令牌:

ObjectID字段的令牌:OID@shape字段的令牌:SHAPE@要素质心的令牌:SHAPE@XYX、Y坐标的令牌:SHAPE@X、SHAPE@Y坐标JSON字符串的令牌:SHAPE@JSON面积和长度的令牌:SHAPE@AREA、SHAPE@LENGTH

with arcpy.da.SearchCursor(r"F:\GIS测试数据\测试.gdb\XZQ",["OID@", "SHAPE@", "SHAPE@XY", "SHAPE@X", "SHAPE@Y", "SHAPE@AREA", "SHAPE@LENGTH","SHAPE@JSON"], "OBJECTID=1") as cursor:for row in cursor:print "OID:{0};Feature:{1};质心:{2};X坐标:{3};Y坐标:{4};面积:{5};长度:{6};" \"坐标JSON字符串:{7}".format(row[0], row[1], row[2], row[3], row[4], row[5], row[6], row[7])

转载来自:/p/3355b6efc0d6

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。