ArcGIS Python 脚本:补充耕地面积超出最大值分析
以下是使用 arcpy 库编写的根据您的需求的脚本:
import arcpy
# 设置输入参数
input_vector1 = r'path\to\vector1.shp'
input_vector2 = r'path\to\vector2.shp'
input_vector3 = r'path\to\vector3.shp'
output_path = r'path\to\output\folder'
# 第一步:矢量3擦除矢量1
erased_output = r'in_memory\erased_output'
# 使用 arcpy.Erase_analysis 函数执行擦除操作
# 输入参数:擦除范围矢量、擦除矢量、输出矢量路径
# 擦除范围矢量:矢量1,擦除矢量:矢量3,输出矢量路径:erased_output
# 如果输出结果不为空,则结束,并输出'报备坐标超出红线区域'
# 如果输出结果为空,则继续进行下一步
# arcpy.Erase_analysis(input_vector1, input_vector3, erased_output)
# 判断输出结果是否为空
if arcpy.management.GetCount(erased_output)[0] != '0':
print('报备坐标超出红线区域')
else:
# 第二步:矢量2与矢量3相交得到矢量4
intersect_output = r'in_memory\intersect_output'
# 使用 arcpy.Intersect_analysis 函数执行相交操作
# 输入参数:相交矢量列表、输出矢量路径
# 相交矢量列表:矢量2、矢量3,输出矢量路径:intersect_output
# arcpy.Intersect_analysis([input_vector2, input_vector3], intersect_output)
# 在矢量4中新建一个双精度字段mj
arcpy.AddField_management(intersect_output, 'mj', 'DOUBLE')
# 计算字段mj的值
# 使用 arcpy.da.UpdateCursor 获取更新游标
# 输入参数:矢量路径、要更新的字段列表
# 矢量路径:intersect_output,要更新的字段列表:'SHAPE@', 'mj'
# 使用 with 语句确保游标在结束后自动关闭
# arcpy.da.UpdateCursor(intersect_output, ['SHAPE@', 'mj'])
with arcpy.da.UpdateCursor(intersect_output, ['SHAPE@', 'mj']) as cursor:
# 遍历游标中的每一条记录
for row in cursor:
# 获取记录的面积
area = row[0].getArea()
# 获取记录的 XZGDL 字段值
xzgdl = row[0].getValue('XZGDL')
# 计算 mj 字段值
row[1] = area * xzgdl
# 更新记录
cursor.updateRow(row)
# 第三步:融合矢量4中字段地块号中值相同的,统计字段mj,统计类型为sum
dissolved_output = r'in_memory\dissolved_output'
# 使用 arcpy.Dissolve_management 函数执行融合操作
# 输入参数:输入矢量路径、输出矢量路径、融合字段、统计字段列表
# 输入矢量路径:intersect_output,输出矢量路径:dissolved_output,融合字段:'地块号',统计字段列表:[['mj', 'SUM']]
# arcpy.Dissolve_management(intersect_output, dissolved_output, '地块号', [['mj', 'SUM']])
# 第四步:在矢量4中新建双精度字段bj
arcpy.AddField_management(dissolved_output, 'bj', 'DOUBLE')
# 计算字段bj的值
# 使用 arcpy.da.UpdateCursor 获取更新游标
# 输入参数:矢量路径、要更新的字段列表
# 矢量路径:dissolved_output,要更新的字段列表:'SUM_mj', 'BCGDMJ', 'bj'
# arcpy.da.UpdateCursor(dissolved_output, ['SUM_mj', 'BCGDMJ', 'bj'])
with arcpy.da.UpdateCursor(dissolved_output, ['SUM_mj', 'BCGDMJ', 'bj']) as cursor:
# 遍历游标中的每一条记录
for row in cursor:
# 计算 bj 字段值
row[2] = row[0] - row[1]
# 更新记录
cursor.updateRow(row)
# 按属性选择bj<0
selection_expression = 'bj < 0'
# 使用 arcpy.Select_analysis 函数执行属性选择操作
# 输入参数:选择矢量路径、输出矢量路径、选择表达式
# 选择矢量路径:dissolved_output,输出矢量路径:output_path + '\补充耕地面积超出最大值.shp',选择表达式:selection_expression
# arcpy.Select_analysis(dissolved_output, output_path + '\补充耕地面积超出最大值.shp', selection_expression)
print('脚本执行完成')
请确保在使用脚本之前将输入参数(输入矢量文件和输出路径)替换为您自己的路径。此脚本将按照您的需求依次执行四个步骤,并在满足条件时输出相应的信息。
原文地址: https://www.cveoy.top/t/topic/UvU 著作权归作者所有。请勿转载和采集!