Arcpy中如何对feature不同的field字段根据其值不同进行不同范围的Buffer操作?

条件如下:

Write a script that creates a 15,000-meter buffer around features in the airports.shp feature class classified as an airport ( based on the FEATURE field ) and a 7,500-meter buffer around features classified as a seaplane base. The results should be two separate feature classes, one for each airport type.

airports.shp里面的FEATURE字段包含airport和seaplane base 两种文本

你可以使用ArcPy中的缓冲区分析和条件语句来实现这个任务。下面是一个示例脚本,可以根据FEATURE字段的值创建不同的缓冲区:

import arcpy  
  
# 设置输入和输出路径  
input_features = "path/to/airports.shp"  
output_folder = "path/to/output/folder"  
  
# 定义机场和海上飞机基地的缓冲区半径  
airport_buffer_distance = 15000  
seaplane_buffer_distance = 7500  
  
# 获取输入要素类中的字段名  
fields = arcpy.ListFields(input_features)  
feature_field = None  
for field in fields:  
    if field.name == "FEATURE":  
        feature_field = field.name  
        break  
  
# 检查FEATURE字段是否存在  
if feature_field is None:  
    raise ValueError("FEATURE field not found in the input feature class.")  
  
# 创建输出要素类名称  
airport_output_fc = os.path.join(output_folder, "airports_buffer")  
seaplane_output_fc = os.path.join(output_folder, "seaplanes_buffer")  
  
# 根据FEATURE字段的值创建不同的缓冲区  
cursor = arcpy.SearchCursor(input_features)  
geometry_type = arcpy.Describe(input_features).shapeType  
  
# 创建输出要素类  
arcpy.CreateFeatureclass_management(output_folder, "airports_buffer", geometry_type)  
arcpy.CreateFeatureclass_management(output_folder, "seaplanes_buffer", geometry_type)  
  
# 迭代输入要素类中的每个特征  
for row in cursor:  
    feature = row.getValue(feature_field)  
    if feature == "airport":  
        # 为机场创建15000米的缓冲区  
        buffer_distance = airport_buffer_distance  
        output_fc = airport_output_fc  
    elif feature == "seaplane base":  
        # 为海上飞机基地创建7500米的缓冲区  
        buffer_distance = seaplane_buffer_distance  
        output_fc = seaplane_output_fc  
    else:  
        continue  # 跳过其他特征  
  
    # 获取当前特征的几何信息  
    geometry = row.SHAPE  
  
    # 创建缓冲区几何对象  
    buffer_geometry = geometry.buffer(buffer_distance)  
  
    # 将缓冲区几何对象转换为点要素类,并添加到输出要素类中  
    point_geom = arcpy.Array([buffer_geometry.firstPoint, buffer_geometry.lastPoint])  
    point_feature = arcpy.Feature()  
    point_feature.geometry = arcpy.Polyline(point_geom, geometry.spatialReference)  
    point_cursor = arcpy.InsertCursor(output_fc)  
    point_cursor.insertRow(point_feature)  
    del point_cursor  
  
# 清理临时对象  
del cursor, point_geom, point_feature, point_cursor, geometry, buffer_geometry

请确保替换脚本中的路径和文件名以匹配你的实际数据。此脚本将根据FEATURE字段的值创建两个单独的缓冲区要素类,一个用于机场(15000米缓冲区),另一个用于海上飞机基地(7500米缓冲区)。