大赵传奇

GIS解决方案,webgis , 桌面、数据、服务--QQ276605216

  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理
            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;
        }

 

posted on 2020-12-02 22:51  赵长青  阅读(228)  评论(0)    收藏  举报