以下是使用 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('脚本执行完成')

请确保在使用脚本之前将输入参数(输入矢量文件和输出路径)替换为您自己的路径。此脚本将按照您的需求依次执行四个步骤,并在满足条件时输出相应的信息。

ArcGIS Python 脚本:补充耕地面积超出最大值分析

原文地址: https://www.cveoy.top/t/topic/UvU 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录