先来一段简单的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