写一个Python2.7的arcgis10.22工具箱脚本:多对一图斑时按图斑面积大于多少进行空间连接,并把连接的相同字段的值合并用"/"分开
时间: 2023-12-14 12:37:39 浏览: 108
以下是一个Python 2.7版本的arcgis10.2.2工具箱脚本,实现了多对一图斑时按图斑面积大于某一阈值进行空间连接,并将连接的相同字段的值合并用"/"分开的功能。请注意,该脚本仅作为参考,需要根据具体数据和需求进行修改和完善。
```python
# -*- coding: utf-8 -*-
import arcpy
arcpy.env.overwriteOutput = True
# 输入参数
input_feature_class = arcpy.GetParameterAsText(0) # 输入要素类
join_feature_class = arcpy.GetParameterAsText(1) # 连接要素类
output_feature_class = arcpy.GetParameterAsText(2) # 输出要素类
join_fields = arcpy.GetParameterAsText(3) # 连接字段
merge_fields = arcpy.GetParameterAsText(4) # 合并字段
min_area = arcpy.GetParameter(5) # 最小面积
# 创建空间连接
arcpy.SpatialJoin_analysis(input_feature_class, join_feature_class, output_feature_class, "JOIN_ONE_TO_MANY", "", "", "INTERSECT")
# 创建输出要素类的字段列表
field_list = [f.name for f in arcpy.ListFields(output_feature_class)]
# 创建合并字段的字典
merge_dict = {}
# 遍历输出要素类中的要素
with arcpy.da.UpdateCursor(output_feature_class, field_list) as cursor:
for row in cursor:
# 如果要素面积大于最小面积,则进行合并
if row[0] > min_area:
# 创建合并字段的键值
merge_key = tuple([row[field_list.index(f)] for f in merge_fields.split(";")])
# 如果合并字段的键值不存在,则添加到字典中
if merge_key not in merge_dict:
merge_dict[merge_key] = []
# 将当前要素的连接字段值添加到字典中
join_values = [row[field_list.index(f)] for f in join_fields.split(";")]
merge_dict[merge_key].append(join_values)
# 删除不符合条件的要素
else:
cursor.deleteRow()
# 遍历合并字段的字典,将连接字段的值合并并更新到输出要素类中
with arcpy.da.UpdateCursor(output_feature_class, merge_fields.split(";")) as cursor:
for row in cursor:
merge_key = tuple(row)
if merge_key in merge_dict:
join_values = merge_dict[merge_key]
join_values = ["/".join([str(v) for v in j]) for j in join_values]
row = tuple(join_values)
cursor.updateRow(row)
```
具体使用方法:
1. 将脚本保存为一个.py文件,如"multi_to_one.py";
2. 在ArcGIS 10.2.2中创建一个工具箱(右键空白处,选择"新建"->"工具箱");
3. 在工具箱中右键,选择"添加工具",并填写工具信息,包括工具名称、别名、显示名称、工具提示等;
4. 在新创建的工具下右键,选择"编辑",并在"脚本"中选择刚才保存的.py文件;
5. 在工具参数中设置输入要素类、连接要素类、输出要素类、连接字段、合并字段和最小面积等参数;
6. 点击"确定"保存设置,即可使用该工具进行多对一图斑空间连接和字段合并。
阅读全文