var mdbTemp = this.txtSavePath.Text;
var temp_wsp = Acropolis.Library.ArcObjects.WorkspaceUtility.CreateAccessWorkspace(mdbTemp);
if (temp_wsp == null)
{
throw new Exception("创建临时结果文件失败");
}
//
IGeoProcessorResult result = null;
foreach (var input in this.m_SelectedLayers)
{
var GP = new Geoprocessor();
var pCreator = new ESRI.ArcGIS.DataManagementTools.CreateFeatureclass();
try
{
var shp = input.Obj.DataSourceType == "Shapefile 要素类" || input.Obj.DataSourceType == "Shapefile Feature Class" ? ".shp" : "";
var f1 = input.Obj.FeatureClass.FeatureDataset == null ?
(input.Obj.FeatureClass as IDataset).Workspace.PathName + "\\" + (input.Obj.FeatureClass as IDataset).Name + shp :
input.Obj.FeatureClass.FeatureDataset.Workspace.PathName + "\\" + input.Obj.FeatureClass.FeatureDataset.Name + "\\" + (input.Obj.FeatureClass as IDataset).Name;
var geotype = "";
switch(input.Obj.FeatureClass.ShapeType)
{
case esriGeometryType.esriGeometryPoint: geotype = "POINT"; break;
case esriGeometryType.esriGeometryPolygon: geotype = "POLYGON"; break;
case esriGeometryType.esriGeometryPolyline: geotype = "POLYLINE"; break;
}
pCreator.template = f1;
pCreator.out_name = input.LayerName;
pCreator.geometry_type = geotype;
pCreator.out_path = temp_wsp;
GP.OverwriteOutput = true;
GP.TemporaryMapLayers = false;
result = (IGeoProcessorResult)GP.Execute(pCreator, null);
object sev = 2;
string messages = GP.GetMessages(ref sev);
}
catch
{
string str = ReturnMessages(GP);
MessageBox.Show("分析失败。" + Environment.NewLine + str);
}
finally
{
pCreator = null;
result = null;
GP = null;
GC.Collect();
GC.WaitForFullGCComplete();
}
}
private static string ReturnMessages(Geoprocessor gp)
{
string ms = "";
if (gp.MessageCount > 0)
{
for (int Count = 0; Count <= gp.MessageCount - 1; Count++)
{
ms += "$" + gp.GetMessage(Count) + "\n\n";
}
}
if (ms.Contains("Succeeded") || ms.Contains("成功"))
{
return "";
}
return ms;
}