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) + " "; } } if (ms.Contains("Succeeded") || ms.Contains("成功")) { return ""; } return ms; }