需求描述:
一个矢量数据含有多个字段,按其中一个字段将数据划分为多个矢量数据,这里按xname字段值进行划分:
代码主要分为两部分:1、遍历字段值 2、根据字段值进行划分
涉及的方法有Arcpy中da模块的SearchCursor方法来查看属性表,以及Select_analysis筛选方法
(1)设置输入要素、输出路径、拆分字段:
in_feature = "E:/ArcGIS/TCM/datas/hege2/jisuan/hebing2.shp" # 拆分要素
out_folderpath = "E:/ArcGIS/TCM/datas/class/" # 输出路径
split_field= "xname" # 拆分标准字段
其中输出路径以“/”结尾,为了与字段名拼接出输出文件路径。
(2)用with语句进行编写:
field_data_list =[]
with arcpy.da.SearchCursor(in_feature,split_field) as cursor:
count = 0
for row in cursor:
if row[0] not in field_data_list:
field_data_list.append(row[0])
for select_data in field_data_list:
count += 1
arcpy.Select_analysis(in_feature, out_folderpath + select_data + '.shp',
split_field + "=" + "'" + select_data + "'")
print count
该部分包含两个循环,首先遍历矢量要素,用field_data_list变量用来存储遍历的结果,即该数据中xname字段究竟有多少个值。再对结果进行筛选,筛选出条件满足split_field + "=" + "'" + select_data + "'"的结果,单独输出shp文件。count可以查看总要素个数。
完整代码如下:
# coding=utf-8
import arcpy
in_feature = "E:/ArcGIS/TCM/datas/hege2/jisuan/hebing2.shp" # 拆分要素
out_folderpath = "E:/ArcGIS/TCM/datas/class/" # 输出路径
split_field= "xname" # 拆分标准字段
field_data_list =[]
with arcpy.da.SearchCursor(in_feature,split_field) as cursor:
count = 0
for row in cursor:
if row[0] not in field_data_list:
field_data_list.append(row[0])
for select_data in field_data_list:
count += 1
arcpy.Select_analysis(in_feature, out_folderpath + select_data + '.shp',
split_field + "=" + "'" + select_data + "'")
print count