ArcGIS是我们地理信息工作者的得力助手,强大的空间分析功能让数据处理变得轻松。然而,当我们将多个要素合并成一个新图层时,常常会遇到一个棘手的问题:原始的图层名称、要素名称或者别名都不见了!这给后续的数据管理和分析带来了不便。
假设你手头有几张不同地区的城市分布图,为了方便分析,你将它们合并成一张全国的城市图层。合并后,新的图层中每个城市的属性表里,只剩下枯燥的FID编号,再也找不到它们原本所属的图层名称、城市名称或者别名了。这就好比一群来自五湖四海的朋友聚在一起,却都变成了没有名字的“路人甲”,多尴尬啊!
为了解决这个难题,我们特意编写了一段简单易用的Python脚本。它的作用就像一位“姓名侦探”,能帮你快速找到每个要素的名称信息,并将它们整齐地写入属性表中。这样你合并后就不用担心无法区分了。
# -*- coding: gbk -*-
import arcpy
def add_field_and_calculate_feature_name(input_features, name_options):
try:
arcpy.env.overwriteOutput = True
input_features_list = input_features.split(";")
name_options_list = [opt.strip() for opt in name_options.split(";")] # 去除选项中的空格
for input_feature in input_features_list:
field_name = "名称计算"
field_names = [field.name for field in arcpy.ListFields(input_feature)]
if field_name not in field_names:
arcpy.AddField_management(input_feature, field_name, "TEXT", field_length=255)
desc = arcpy.Describe(input_feature)
feature_name = "DefaultFeatureName" # 默认值
# 根据选项选择对应的名称
if u"图层名" in name_options_list:
feature_name = input_feature # 直接使用输入参数的名称作为图层名
elif u"要素名" in name_options_list:
feature_name = desc.baseName
elif u"要素别名" in name_options_list:
feature_name = desc.aliasName
# 使用更新光标计算新字段
with arcpy.da.UpdateCursor(input_feature, [field_name]) as cursor:
for row in cursor:
row[0] = feature_name
cursor.updateRow(row)
except Exception as e:
arcpy.AddError(u"Error: {}".format(str(e)))
if __name__ == "__main__":
input_features = arcpy.GetParameterAsText(0)
name_options = arcpy.GetParameterAsText(1)
add_field_and_calculate_feature_name(input_features, name_options)
操作简单:无需复杂的编程知识,只需打开ArcGIS的脚本工具,复制粘贴脚本代码,设置好参数就能运行。
功能强大:支持同时处理多个图层,不仅能提取原始图层名称,还能提取要素名称和别名。
灵活选择:你可以自由选择将哪些名称信息写入属性表,甚至可以自定义字段名称。
安全可靠:脚本自带错误处理机制,如果遇到问题会及时报错,保证你的数据安全。
小贴士:
如果你想将名称信息写入已有的字段,只需将脚本中的field_name变量修改为对应的字段名称即可。
脚本默认使用GBK编码,如果你的数据使用其他编码,请修改脚本开头的coding参数。
有了这个Python脚本,再也不用担心要素合并后名称信息丢失的问题了。快来试试吧,让你的数据管理更加井井有条!如果需要做好的工具箱在公众号后台回复“要素名称”获取。
最后,感谢您的阅读和支持。如果您觉得这篇文章对您有所帮助,请不要吝啬您的关注、点赞、在看、收藏和转发。您的每一个反馈都是我们继续前进的动力。让我们共同期待,在GIS的世界里,探索更多的可能,创造更多的价值。