ArcPy常用基础功能

  先来一段简单的ArcPy脚本:

# -*-coding:utf-8-*-
import arcpy

try:
    source_path_name = r"F:/GIS测试数据/测试.gdb"
    source_name = "DLTB"
    target_name = "Target_copy"

    arcpy.env.workspace = source_path_name

    #  覆盖已存在数据
    arcpy.env.overwriteOutput = True
    print "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_AREA
with 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 values
for i in range(0, 25):
    cursor.insertRow([i, 100])
del cursor

5、令牌

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

ObjectID字段的令牌:OID@
shape字段的令牌:SHAPE@
要素质心的令牌:SHAPE@XY
X、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])

转载来自:https://www.jianshu.com/p/3355b6efc0d6

你可能感兴趣的:(ArcPy,python,数据库)