需求:仅根据某一属性,分割图层,并以属性值命名图层名称保存。
众所周知,ArcGIS ArcToolbox中通过Split可以实现图形分割一个图层,以属性值命名图层,如下图所示。
本文仅仅依据属性值,将一个shp图层,自动分割成多个图层shp。当然如果不嫌麻烦,可以通过选中feature,使用export,逐批次导出图形,也可以实现,实现该功能主要是分割大量数据,节省时间。
使用VS C# 2012 ArcEngine10.2二次开发,操作模式如下图:
一、实现界面如下图:
二、执行步骤:
1.选择输入图层(shp、gdb等arcgis通用图层);
2.选择属性列(split field)
3.选择一个或多个属性值
4.保存导出shp图层,图层名以属性值命名。
三、输出结果shp图层,如下图:
四、关键代码
public void SplitByFieldShp(IFeatureClass inputFeatureClass, string inputfieldValue, string outputPath)
{
//创建一个Geoprocessor工具类
Geoprocessor geoprocessor = new Geoprocessor();
try
{
//1.创建一个临时图层
geoprocessor.OverwriteOutput = true;
MakeFeatureLayer makefeature = new MakeFeatureLayer();
makefeature.in_features = inputFeatureClass;
makefeature.out_layer = "temp_lyr";//临时图层名称
geoprocessor.Execute(makefeature, null);
//2.通过属性查找feature
SelectLayerByAttribute selectTool = new SelectLayerByAttribute();
selectTool.in_layer_or_view = makefeature.out_layer;
selectTool.selection_type = "NEW_SELECTION";
selectTool.where_clause = selectField + " = '" + inputfieldValue + "'";
geoprocessor.Execute(selectTool, null);
//3.导出选择图层
ESRI.ArcGIS.DataManagementTools.CopyFeatures copyfeature = new ESRI.ArcGIS.DataManagementTools.CopyFeatures();
copyfeature.in_features = selectTool.out_layer_or_view;
copyfeature.out_feature_class = outputPath + @"\" + inputfieldValue + ".shp";
geoprocessor.Execute(copyfeature, null);
}
catch (Exception ex)
{
//如果出错,输出GP内部错误信息
object sev = null;
string msgs = geoprocessor.GetMessages(ref sev);
MessageBox.Show(msgs);
}
}
五、小结:如其说依据分割功能,不如说实现了选择功能,然后导出符合条件的要素。提供关键代码,一起学习共享。