我有一个各县shp文件,我想要拆分成不同的要素,命名根据NAME字段进行命名,字段值是字符串,以下为基于arcpy的python实现代码。(python2.7)
python
import arcpy
import os
# 设置工作空间和输入的 shapefile 文件路径
arcpy.env.workspace = r"E:\geo\county"
input_shp = r"E:\geo\县.shp"
# 检查 NAME 字段是否存在
field_list = arcpy.ListFields(input_shp)
field_names = [field.name for field in field_list]
if "NAME" not in field_names:
print("NAME 字段不存在于输入的 shapefile 中。")
arcpy.Quit()
# 使用 SearchCursor 遍历每个要素,并根据 NAME 字段进行拆分
with arcpy.da.SearchCursor(input_shp, ["NAME", "SHAPE@"]) as cursor:
for row in cursor:
name_value = row[0] # 获取 NAME 字段的值
feature_geom = row[1] # 获取要素的几何对象
# 创建新的 shapefile 名称,并确保合法性
output_name = arcpy.ValidateTableName(name_value) # 使用 ValidateTableName 确保合法的名称
output_shp = os.path.join(arcpy.env.workspace, output_name + ".shp")
# 如果同名文件已经存在,则添加数字以避免冲突
if arcpy.Exists(output_shp):
counter = 1
while arcpy.Exists(output_shp):
counter += 1
output_shp = os.path.join(arcpy.env.workspace, output_name + "_" + str(counter) + ".shp")
# 使用 FeatureClassToFeatureClass_conversion 方法将单个要素导出为新的 shapefile
where_clause = u'"NAME"=\'{}\''.format(name_value) # 使用 unicode 字符串处理非ASCII字符
arcpy.FeatureClassToFeatureClass_conversion(in_features=input_shp,
out_path=arcpy.env.workspace,
out_name=output_name,
where_clause=where_clause,
field_mapping=None,
config_keyword=None)
# 设置导出的 shapefile 的空间参考
arcpy.DefineProjection_management(output_shp, feature_geom.spatialReference)
# 打印已导出的要素名称和路径
print(u"已导出要素 {} 到 {}".format(name_value, output_shp))
print("所有要素拆分完成。")