Esempio n. 1
0
        public IFeatureClass Intsect(IFeatureClass _pFtClass, IFeatureClass _pFtOverlay, string _FilePath, string _pFileName)
        {
            IFeatureClassName pOutPut = new FeatureClassNameClass();

            pOutPut.ShapeType = _pFtClass.ShapeType;

            pOutPut.ShapeFieldName = _pFtClass.ShapeFieldName;

            pOutPut.FeatureType = esriFeatureType.esriFTSimple;

            IWorkspaceName pWsN = new WorkspaceNameClass();

            pWsN.WorkspaceFactoryProgID = "esriDataSourcesFile.ShapefileWorkspaceFactory";

            pWsN.PathName = _FilePath;

            IDatasetName pDatasetName = pOutPut as IDatasetName;

            pDatasetName.Name = _pFileName;

            pDatasetName.WorkspaceName = pWsN;

            IBasicGeoprocessor pBasicGeo = new BasicGeoprocessorClass();

            IFeatureClass pFeatureClass = pBasicGeo.Intersect(_pFtClass as ITable, false, _pFtOverlay as ITable, false, 0.1, pOutPut);

            return(pFeatureClass);
        }
Esempio n. 2
0
        /// <summary>
        /// 求交,暂时未用
        /// </summary>
        /// <param name="_pFtClass"></param>
        /// <param name="_pFtOverlay"></param>
        /// <param name="_FilePath"></param>
        /// <param name="_pFileName"></param>
        /// <returns></returns>
        public IFeatureClass Intsect(IFeatureClass _pFtClass, IFeatureClass _pFtOverlay, string _FilePath, string _pFileName)
        {
            //设置输出
            IFeatureClassName pOutPut = new FeatureClassNameClass();

            pOutPut.ShapeType      = _pFtClass.ShapeType;
            pOutPut.ShapeFieldName = _pFtClass.ShapeFieldName;
            pOutPut.FeatureType    = esriFeatureType.esriFTSimple;
            //set output location and feature class name
            IWorkspaceName pWsN = new WorkspaceNameClass();

            pWsN.WorkspaceFactoryProgID = "esriDataSourcesFile.ShapefileWorkspaceFactory";
            pWsN.PathName = _FilePath;
            //也可以用这种方法,IName 和IDataset的用法
//             IWorkspaceFactory pWsFc = new ShapefileWorkspaceFactoryClass();
//             IWorkspace pWs = pWsFc.OpenFromFile(_FilePath,0);
//             IDataset pDataset = pWs as IDataset;
//             IWorkspaceName pWsN = pDataset.FullName as IWorkspaceName;

            IDatasetName pDatasetName = pOutPut as IDatasetName;

            pDatasetName.Name          = _pFileName;
            pDatasetName.WorkspaceName = pWsN;

            IBasicGeoprocessor pBasicGeo     = new BasicGeoprocessorClass();
            IFeatureClass      pFeatureClass = pBasicGeo.Intersect(_pFtClass as ITable, false, _pFtOverlay as ITable, false, 0.1, pOutPut);

            return(pFeatureClass);
        }
Esempio n. 3
0
        //批次报批研判
        private static void pcbpJudge(IFeatureLayer pChangeFeaLayer, IFeatureLayer pcbpFeaLayer, IWorkspace pOutWorkSpace, bool useSelection,SysCommon.CProgress vProgress)
        {
            ITable pChangeTable = pChangeFeaLayer as ITable;
            ITable pcbpTable = pcbpFeaLayer as ITable;
            double rol = 0.0001;
            IFeatureClass pcbpFeaClass = pcbpFeaLayer.FeatureClass;
            //创建结果地物类名称
            IFeatureClassName pResFeaClassName = new FeatureClassNameClass();
            String fcName = pcbpFeaClass.AliasName.Trim().Substring(pcbpFeaClass.AliasName.Trim().IndexOf(".") + 1)+"_res";
            IDataset pOutDataset = (IDataset)pOutWorkSpace;
            IDatasetName pOutDatasetName = (IDatasetName)pResFeaClassName;
            pOutDatasetName.WorkspaceName = (IWorkspaceName)pOutDataset.FullName;
            pOutDatasetName.Name = fcName;
            IBasicGeoprocessor pGeoProcessor = new BasicGeoprocessorClass();
            //叠置分析
            pGeoProcessor.Intersect(pChangeTable, useSelection, pcbpTable, false, rol, pResFeaClassName);

            //从叠置结果生成报表
            string connstr = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + pOutDatasetName.WorkspaceName.PathName;
            OleDbConnection oledbconn = new OleDbConnection(connstr);
            oledbconn.Open();
            ModTableFun.DropTable(oledbconn, "tmprel");
            string sqlstr = "select "+g_XZQHDM+","+g_TBBH+","+g_MJ+" as jctbmj,"+g_PC  +",shape_area as " +g_MJ+",shape_area as zb,"+g_GWYPFWH+" as bpwh,"+g_SGTTPFWH+","+g_SGTJPFWH+" into tmprel from " + fcName;
                            //行政区划代码,编号,监测图斑面积,报批名称,计算面积,占比,批准文号(三个批准文号的备选字段)
            OleDbCommand oledbcomm = oledbconn.CreateCommand();
            oledbcomm.CommandText = sqlstr;
            oledbcomm.ExecuteNonQuery();

            oledbcomm.CommandText = "update tmprel set zb="+g_MJ+"/jctbmj*100";
            oledbcomm.ExecuteNonQuery();
            //报批文号为空,则取省林业厅批复文号
            oledbcomm.CommandText = "update tmprel set bpwh=" + g_SGTTPFWH + " where bpwh is null and " + g_SGTTPFWH + "  is not null";
            oledbcomm.ExecuteNonQuery();
            //报批文号为空,则取省市林业局批复文号
            oledbcomm.CommandText = "update tmprel set bpwh=" + g_SGTJPFWH + " where bpwh is null and " + g_SGTJPFWH + " is not null";
            oledbcomm.ExecuteNonQuery();
            //报表模板路径
            string Templatepath = Application.StartupPath + "\\..\\Template\\批次报批研判模板.cel";
            oledbconn.Close();
            //生成报表对话框
            FormFlexcell frm;
            ModFlexcell.m_SpecialRow = -1;
            ModFlexcell.m_SpecialRow_ex = -1;
            ModFlexcell.m_SpecialRow_ex2 = -1;
            frm = ModFlexcell.SendDataToFlexcell(connstr, "监测图斑报批情况表", "tmprel", g_XZQHDM + "," + g_TBBH + ",jctbmj," + g_PC + "," + g_MJ + "," + g_ZB + ",bpwh", "", Templatepath, 4, 2);

            AxFlexCell.AxGrid pGrid = frm.GetGrid();
            string excelPath = m_WorkPath + "\\监测图斑报批情况表.xls";
            pGrid.ExportToExcel(excelPath);
            
            //frm.SaveFile(m_WorkPath + "\\监测图斑报批情况表.cel");
            //弹出报表
            ModStatReport.OpenExcelFile(excelPath);
            
        }
Esempio n. 4
0
        //森林资源/地类图斑研判
        private static void dltbJudge(IFeatureLayer pChangeFeaLayer, IFeatureLayer dltbFeaLayer, IWorkspace pOutWorkSpace, bool useSelection,SysCommon.CProgress vProgress)
        {
            ITable pChangeTable = pChangeFeaLayer as ITable;
            ITable pcbpTable = dltbFeaLayer as ITable;
            IFeatureClass dltbFeaClass = dltbFeaLayer.FeatureClass;
            double rol = 0.0001;
            IFeatureClassName pResFeaClassName = new FeatureClassNameClass();
            //创建结果地物类名称
            String fcName = dltbFeaClass.AliasName.Trim().Substring(dltbFeaClass.AliasName.Trim().IndexOf(".") + 1)+"_res";
            IDataset pOutDataset = (IDataset)pOutWorkSpace;
            IDatasetName pOutDatasetName = (IDatasetName)pResFeaClassName;
            pOutDatasetName.WorkspaceName = (IWorkspaceName)pOutDataset.FullName;
            pOutDatasetName.Name = fcName;
            IBasicGeoprocessor pGeoProcessor = new BasicGeoprocessorClass();
            //叠置分析
            pGeoProcessor.Intersect(pChangeTable, useSelection, pcbpTable, false, rol, pResFeaClassName);

            //从叠置结果生成报表
            string connstr = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + pOutDatasetName.WorkspaceName.PathName ;
            OleDbConnection oledbconn = new OleDbConnection(connstr);
            oledbconn.Open();
            ModTableFun.DropTable(oledbconn, "tmprel");
            string sqlstr = "select "+g_XZQHDM+","+g_TBBH+","+g_MJ+" as jctbmj,"+g_TBBH+"_1,"+g_DLBM+","+g_TBMJ+","+g_TBDLMJ+",shape_area as jsmj,shape_area as mj,shape_area as zb into tmprel from " + fcName;
                            //行政区划代码,编号,面积,图斑编号,地类编码,图斑面积,图斑地类面积,计算面积,占比
            OleDbCommand oledbcomm = oledbconn.CreateCommand();
            oledbcomm.CommandText = sqlstr;
            oledbcomm.ExecuteNonQuery();
            //叠置结果地类面积计算方法:  面积=叠置结果计算面积*地类图斑地类面积/地类图斑总面积
            oledbcomm.CommandText = "update tmprel set mj=jsmj*"+g_TBDLMJ+"/"+g_TBMJ+"";
            oledbcomm.ExecuteNonQuery();
            //计算占比
            oledbcomm.CommandText = "update tmprel set zb=mj/jctbmj*100";
            oledbcomm.ExecuteNonQuery();
            //报表模板路径
            oledbconn.Close();
            string Templatepath = Application.StartupPath + "\\..\\Template\\森林资源现状研判模板.cel";
            //生成报表对话框
            FormFlexcell frm;
            ModFlexcell.m_SpecialRow = -1;
            ModFlexcell.m_SpecialRow_ex = -1;
            ModFlexcell.m_SpecialRow_ex2 = -1;
            frm = ModFlexcell.SendDataToFlexcell(connstr, "监测图斑地类情况表", "tmprel", g_XZQHDM + "," + g_TBBH + ",jctbmj," + g_TBBH + "_1,"+g_DLBM+"," + g_MJ + "," + g_ZB, "", Templatepath, 4, 2);

            AxFlexCell.AxGrid pGrid = frm.GetGrid();
            string excelPath = m_WorkPath + "\\监测图斑地类情况表.xls";
            pGrid.ExportToExcel(excelPath);
            
            //frm.SaveFile(m_WorkPath + "\\监测图斑地类情况表.cel");
            //弹出报表
            ModStatReport.OpenExcelFile(excelPath);
            
        }
Esempio n. 5
0
        public void OutPut(AxMapControl pMapControl, String Path, String Name)
        {
            // set output featureclass name and shape type
            IFeatureClassName pOutName;

            pOutName = new FeatureClassNameClass();

            pOutName.FeatureType = esriFeatureType.esriFTSimple;

            pOutName.ShapeFieldName = "Shape";

            pOutName.ShapeType = this.pFeatureClass1.ShapeType;

            //set output location and feature class name

            IWorkspaceName pWsN;

            pWsN = new WorkspaceNameClass();

            pWsN.WorkspaceFactoryProgID = "esriDataSourcesFile.ShapefileWorkspaceFactory";


            //IWorkspaceFactory pWFC;能用Factory实现,对这些对象间的关系还有点模糊。

            // pWFC = new WorkspaceFactoryClass();

            // pWsN = pWFC.Create(Path, "Test", null, 0);

            // IFeatureWorkspace pShape;



            pWsN.PathName = Path;

            IDatasetName pDN;

            pDN = pOutName as IDatasetName;

            pDN.Name = Name;

            pDN.WorkspaceName = pWsN;
            //set tolerence

            double tol = 0.1;

            IBasicGeoprocessor pBGP;

            pBGP = new BasicGeoprocessorClass();

            pBGP.SpatialReference = pMapControl.Map.SpatialReference;

            IFeatureClass pOutClass;

            pOutClass = pBGP.Intersect(this.pTable1, false, this.pTable2, false, tol, pOutName);

            // pOutClass = pBGP.Union(this.pTable1, false, this.pTable2, false, tol, pOutName);

            // pOutClass= pBGP.Clip(this.pTable1, false, this.pTable2, false, tol, pOutName);

            /*  IArray pArry;
             *
             * pArry = new ArrayClass();
             *
             * pArry.Add(pTable1);
             *
             * pArry.Add(this.pTable2);
             * pOutClass = pBGP.Merge(pArry, this.pTable1, pOutName);
             */

            //ITable pToutTable;

            //  pToutTable = new TableClass();

            //IField  pField;

            // pField =pFeatureLayer1 .FeatureClass .Fields .get_Field (pFeatureClass1 .FindField ("name"));


            IFeatureLayer pOutLayer;

            pOutLayer = new FeatureLayerClass();

            pOutLayer.FeatureClass = pOutClass;

            pOutLayer.Name = pOutClass.AliasName;

            pMapControl.AddLayer(pOutLayer);
        }
Esempio n. 6
0
        public IFeatureClass Intsect(IFeatureClass _pFtClass, IFeatureClass _pFtOverlay, string _FilePath, string _pFileName)
        {
            IFeatureClassName pOutPut = new FeatureClassNameClass();

            pOutPut.ShapeType = _pFtClass.ShapeType;

            pOutPut.ShapeFieldName = _pFtClass.ShapeFieldName;

            pOutPut.FeatureType = esriFeatureType.esriFTSimple;

            IWorkspaceName pWsN = new WorkspaceNameClass();

            pWsN.WorkspaceFactoryProgID = "esriDataSourcesFile.ShapefileWorkspaceFactory";

            pWsN.PathName = _FilePath;

            IDatasetName pDatasetName = pOutPut as IDatasetName;

            pDatasetName.Name = _pFileName;

            pDatasetName.WorkspaceName = pWsN;

            IBasicGeoprocessor pBasicGeo = new BasicGeoprocessorClass();

            IFeatureClass pFeatureClass = pBasicGeo.Intersect(_pFtClass as ITable, false, _pFtOverlay as ITable, false, 0.1, pOutPut);

            return pFeatureClass;
        }
Esempio n. 7
0
        public void OutPut(AxMapControl pMapControl, String Path,String Name)
        {
            // set output featureclass name and shape type
            IFeatureClassName pOutName;

            pOutName = new FeatureClassNameClass();

            pOutName.FeatureType = esriFeatureType.esriFTSimple;

            pOutName.ShapeFieldName = "Shape";

            pOutName.ShapeType = this.pFeatureClass1.ShapeType;

            //set output location and feature class name

            IWorkspaceName pWsN;

            pWsN = new WorkspaceNameClass();

            pWsN.WorkspaceFactoryProgID = "esriDataSourcesFile.ShapefileWorkspaceFactory";

            //IWorkspaceFactory pWFC;����Factoryʵ�֣�����Щ�����Ĺ�ϵ���е�ģ����

               // pWFC = new WorkspaceFactoryClass();

               // pWsN = pWFC.Create(Path, "Test", null, 0);

               // IFeatureWorkspace pShape;

            pWsN.PathName = Path;

            IDatasetName pDN;

            pDN = pOutName as IDatasetName;

            pDN.Name = Name;

            pDN.WorkspaceName = pWsN;
            //set tolerence

            double tol = 0.1;

            IBasicGeoprocessor pBGP;

            pBGP = new BasicGeoprocessorClass();

            pBGP.SpatialReference = pMapControl.Map.SpatialReference;

            IFeatureClass pOutClass;

            pOutClass = pBGP.Intersect(this.pTable1, false, this.pTable2, false, tol, pOutName);

               // pOutClass = pBGP.Union(this.pTable1, false, this.pTable2, false, tol, pOutName);

              // pOutClass= pBGP.Clip(this.pTable1, false, this.pTable2, false, tol, pOutName);

              /*  IArray pArry;

            pArry = new ArrayClass();

            pArry.Add(pTable1);

            pArry.Add(this.pTable2);
            pOutClass = pBGP.Merge(pArry, this.pTable1, pOutName);
               */

            //ITable pToutTable;

              //  pToutTable = new TableClass();

            //IField  pField;

               // pField =pFeatureLayer1 .FeatureClass .Fields .get_Field (pFeatureClass1 .FindField ("name"));

            IFeatureLayer pOutLayer;

            pOutLayer = new FeatureLayerClass();

            pOutLayer.FeatureClass = pOutClass;

            pOutLayer.Name = pOutClass.AliasName;

            pMapControl.AddLayer(pOutLayer);
        }
Esempio n. 8
0
        //森林用途研判
        private static void tdytJudge(IFeatureLayer pChangeFeaLayer, IFeatureLayer tdytFeaLayer, IWorkspace pOutWorkSpace, bool useSelection,SysCommon.CProgress vProgress)
        {
            ITable pChangeTable = pChangeFeaLayer as ITable;
            ITable tdytTable = tdytFeaLayer as ITable;
            double rol = 0.0001;
            IFeatureClass tdytFeaClass = tdytFeaLayer.FeatureClass;
            //创建结果地物类名称
            IFeatureClassName pResFeaClassName = new FeatureClassNameClass();
            String fcName = tdytFeaClass.AliasName.Trim().Substring(tdytFeaClass.AliasName.Trim().IndexOf(".") + 1)+"_res";
            IDataset pOutDataset = (IDataset)pOutWorkSpace;
            IDatasetName pOutDatasetName = (IDatasetName)pResFeaClassName;
            pOutDatasetName.WorkspaceName = (IWorkspaceName)pOutDataset.FullName;
            pOutDatasetName.Name = fcName;
            IBasicGeoprocessor pGeoProcessor = new BasicGeoprocessorClass();
            //叠置分析
            pGeoProcessor.Intersect(pChangeTable, useSelection, tdytTable, false, rol, pResFeaClassName);

            //从叠置结果生成报表
            string connstr = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + pOutDatasetName.WorkspaceName.PathName;
            OleDbConnection oledbconn = new OleDbConnection(connstr);
            oledbconn.Open();
            ModTableFun.DropTable(oledbconn,"tmprel");
            string sqlstr = "select "+g_XZQHDM+","+g_TBBH+","+g_MJ+" as jctbmj,"+g_TDYTFQBH+","+g_TDYTFQDM+",shape_area as jsmj,shape_area as mj,shape_area as zb into tmprel from " + fcName;
                            //行政区划代码,编号,监测图斑面积,规划图斑编号,规划用地用途代码
            OleDbCommand oledbcomm = oledbconn.CreateCommand();
            oledbcomm.CommandText = sqlstr;
            oledbcomm.ExecuteNonQuery();

            oledbcomm.CommandText = "update tmprel set zb=mj/jctbmj*100";
            oledbcomm.ExecuteNonQuery();

            ModTableFun.DropTable(oledbconn ,"森林用途字典");
            CopyTdytDictionary(oledbconn);//从业务库里面拷贝森林用途字典过来
            
            //根据森林用途字典更新森林用途名称
            oledbcomm.CommandText = "alter table tmprel add tdytmc text(30)";
            oledbcomm.ExecuteNonQuery();
            oledbcomm.CommandText = "update tmprel set tdytmc=" + g_TDYTFQDM;
            oledbcomm.ExecuteNonQuery();
            if (ModTableFun.isExist(oledbconn,"森林用途字典"))
            {               
                oledbcomm.CommandText = "update tmprel a,森林用途字典 b set a.tdytmc=b.森林用途分区类型 where a." + g_TDYTFQDM + "=b.代码";
                oledbcomm.ExecuteNonQuery();
            }
            //报表模板路径
            string Templatepath = Application.StartupPath + "\\..\\Template\\森林资源规划研判模板.cel";
            //生成报表对话框
            oledbconn.Close();
            FormFlexcell frm;
            ModFlexcell.m_SpecialRow = -1;
            ModFlexcell.m_SpecialRow_ex = -1;
            ModFlexcell.m_SpecialRow_ex2 = -1;
            //规划图斑没有图斑编号怎么办??暂时使用森林用途分区编号
            frm = ModFlexcell.SendDataToFlexcell(connstr, "监测图斑规划情况表", "tmprel", g_XZQHDM + "," + g_TBBH + ",jctbmj,TDYTFQBH,tdytmc," + g_MJ + "," + g_ZB, "", Templatepath, 4, 2);
            //弹出报表对话框

            AxFlexCell.AxGrid pGrid = frm.GetGrid();
            string excelPath = m_WorkPath + "\\监测图斑规划情况表.xls";
            pGrid.ExportToExcel(excelPath);

            //frm.SaveFile(m_WorkPath + "\\监测图斑规划情况表.cel");
            ModStatReport.OpenExcelFile(excelPath);
            
        }
Esempio n. 9
0
        public Hashtable GetDataSummary(string layerName, string summaryFields, string dissolveField, bool selectedOnly = false)
        {
            Hashtable result = new Hashtable();
            ILayer layer = this._getLayerByName(layerName);
            if (layer != null && layer is IFeatureLayer)
            {
                ITable inputTable = (ITable)layer;
                IWorkspaceName wsName =  ((IDataset)(this._tempWorkspace)).FullName as IWorkspaceName;

                /*
                ShapefileWorkspaceFactoryClass tempWSFactory = new ShapefileWorkspaceFactoryClass();
                IWorkspace tempWS = tempWSFactory.OpenFromFile(System.IO.Path.GetTempPath(), 0);
                IWorkspaceName wsName = ((IDataset)(tempWS)).FullName as IWorkspaceName;
                */
                TableNameClass outputName = new TableNameClass();
                outputName.Name = layerName + "_summary_" + DateTime.Now.ToString("MM_dd_yy_H_mm_ss");
                outputName.WorkspaceName = wsName;

                if (inputTable.FindField(dissolveField) > 0)
                {
                    BasicGeoprocessorClass basicGeopro = new BasicGeoprocessorClass();
                    ITable resultTable = basicGeopro.Dissolve(inputTable, selectedOnly, dissolveField, summaryFields, outputName);
                    
                    result.Add("workspace", this._tempWorkspace.PathName);
                    result.Add("table", outputName.Name);

                    // Create a data graph.
                    IDataGraphT dataGraphT = new DataGraphTClass();
                    // Add the graph series.
                    ISeriesProperties seriesProps = dataGraphT.AddSeries("bar:vertical");
                    seriesProps.SourceData = resultTable;

                    seriesProps.SetField(0, resultTable.Fields.get_Field(1).Name);
                    seriesProps.SetField(1, resultTable.Fields.get_Field(2).Name);
                    seriesProps.LabelField = resultTable.Fields.get_Field(1).Name;

                    // Set titles.
                    dataGraphT.GeneralProperties.Title = "Bar Chart";
                    dataGraphT.AxisProperties[1].Title = dissolveField;
                    
                    // Update the data graph.
                    dataGraphT.Update(null);
                    // Export the graph to file (the format depends on the file extension).
                    string tempDir = System.IO.Path.GetTempPath();
                    string outImageFile = System.IO.Path.Combine(tempDir, outputName.Name + ".bmp");

                    if (System.IO.File.Exists(outImageFile))
                    {
                        System.IO.File.Delete(outImageFile);
                    }

                    dataGraphT.ExportToFile(outImageFile);

                    result.Add("graph", outImageFile);

                }
                
                
            }
            return result;
        }
Esempio n. 10
0
        //added by chulili 20110914 指定范围森林资源现状统计,指定范围来自一个地物类
        //changed by chulili 20110919 删除行政区编码参数,改为从数据中直接获取
        private void DoImportAreaLandUseStatic(string XmlPath, IFeatureClass pImportFeaClass, string strYear, string strAreaUnit, int FractionNum, bool SelectTDLY, bool SelectZTGH, string ResultPath, SysCommon.CProgress pProgress)
        {
            string StaticConfigPath = Application.StartupPath + "\\..\\Res\\Xml\\StatisticConfig.xml";

            SysCommon.ModSysSetting.CopyConfigXml(Plugin.ModuleCommon.TmpWorkSpace, "查询配置", StaticConfigPath);
            //读取xml文件
            XmlDocument pXmlDoc = new XmlDocument();

            pXmlDoc.Load(StaticConfigPath);
            //读取
            ModStatReport.WriteStaticLog("读取统计配置");
            if (pProgress != null)
            {
                pProgress.SetProgress("读取统计配置...");
            }
            string strSearch     = "//StatisticConfig";
            string LayerTreePath = Application.StartupPath + "\\..\\Res\\Xml\\展示图层树0.xml";

            SysCommon.ModSysSetting.CopyLayerTreeXmlFromDataBase(Plugin.ModuleCommon.TmpWorkSpace, LayerTreePath);
            XmlNode pXmlNode = pXmlDoc.SelectSingleNode(strSearch);

            if (pXmlNode == null)
            {
                if (pProgress != null)
                {
                    pProgress.Close();
                }
                System.IO.File.Delete(StaticConfigPath);
                System.IO.File.Delete(LayerTreePath);
                return;
            }
            //直接从数据源中获取地物类
            if (pProgress != null)
            {
                pProgress.SetProgress("获取统计图层...");
            }
            ModStatReport.WriteStaticLog("读取统计配置中的行政区");
            IFeatureClass pXZQFeatureClass = null;
            XmlNode       pXZQNode         = null;

            try
            {
                pXZQNode = pXmlNode["XZQ"];
            }
            catch (Exception err)
            { }
            //获取行政区划层
            if (pXZQNode != null)
            {
                string strNodeKey = "";
                if ((pXZQNode as XmlElement).HasAttribute("TableNodeKey"))
                {
                    strNodeKey = pXZQNode.Attributes["TableNodeKey"].Value;
                }
                ModStatReport.WriteStaticLog("读取行政区层");
                pXZQFeatureClass = SysCommon.ModSysSetting.GetFeatureClassByNodeKey(Plugin.ModuleCommon.TmpWorkSpace, LayerTreePath, strNodeKey);
            }
            if (pXZQFeatureClass == null)
            {
                if (pProgress != null)
                {
                    pProgress.Close();
                }
                MessageBox.Show("未找到行政区划图层!请检查配置文件");
                ModStatReport.WriteStaticLog("未找到行政区划图层,退出");
                System.IO.File.Delete(StaticConfigPath);
                System.IO.File.Delete(LayerTreePath);
                return;
            }
            //string workpath = Application.StartupPath + @"\..\OutputResults\统计成果\" + System.DateTime.Now.ToString("yyyyMMddHHmmss");
            ModStatReport.WriteStaticLog("创建临时成果数据库");
            string strMDBName    = "ImportStatistic" + System.DateTime.Now.ToString("yyyyMMddHHmmss") + ".mdb";
            string workSpaceName = ResultPath + "\\" + strMDBName;

            //判断结果目录是否存在,不存在则创建
            if (System.IO.Directory.Exists(ResultPath) == false)
            {
                System.IO.Directory.CreateDirectory(ResultPath);
            }
            //创建一个新的mdb数据库,并打开工作空间
            if (pProgress != null)
            {
                pProgress.SetProgress("创建结果库...");
            }
            IWorkspace        pOutWorkSpace    = ChangeJudge.CreatePDBWorkSpace(ResultPath, strMDBName);
            IFeatureWorkspace pOutFeaWorkSpace = pOutWorkSpace as IFeatureWorkspace;

            //叠置分析
            if (pProgress != null)
            {
                pProgress.SetProgress("进行叠置分析...");
            }
            //行政区划叠置
            string            strXZQResName   = "XZQ_RES";
            IFeatureClassName pResDataName    = new FeatureClassNameClass();
            IDataset          pOutDataset     = (IDataset)pOutWorkSpace;
            IDatasetName      pOutDatasetName = (IDatasetName)pResDataName;

            pOutDatasetName.WorkspaceName = (IWorkspaceName)pOutDataset.FullName;
            pOutDatasetName.Name          = strXZQResName;
            IBasicGeoprocessor pGeoProcessor = new BasicGeoprocessorClass();
            double             rol           = 0.001;

            ModStatReport.WriteStaticLog("叠置行政区图层");
            pGeoProcessor.Intersect(pXZQFeatureClass as ITable, false, pImportFeaClass as ITable, false, rol, pResDataName);
            string strXZQCode = ModStatReport.GetXZQcode(workSpaceName, strXZQResName);

            if (strXZQCode.Equals(""))
            {
                if (pProgress != null)
                {
                    pProgress.Close();
                }
                MessageBox.Show("找不到导入区域所在的行政区!请验证导入区域与行政区划图层的位置关系。");
                ModStatReport.WriteStaticLog("找不到导入区域所在的行政区,退出");
                pResDataName  = null;
                pGeoProcessor = null;
                pXmlDoc       = null;
                System.IO.File.Delete(StaticConfigPath);
                System.IO.File.Delete(LayerTreePath);
                return;
            }
            string DLTBNodeKey = "";
            string XZDWNodeKey = "";
            string LXDWNodeKey = "";
            string JBNTNodeKey = "";
            string YTFQNodeKey = "";
            string JSYDNodeKey = "";

            IFeatureClass pDLTBFeaCls = null;
            IFeatureClass pXZDWFeaCls = null;
            IFeatureClass pLXDWFeaCls = null;

            string strDLTBResName = "DLTB_RES";
            string strXZDWResName = "XZDW_RES";
            string strLXDWResName = "LXDW_RES";

            IFeatureClass pJBNTFeaCls = null;
            IFeatureClass pYTFQFeaCls = null;
            IFeatureClass pJSYDFeaCls = null;

            string strJBNTResName = "JBNT_RES";
            string strYTFQResName = "YTFQ_RES";
            string strJSYDResName = "JSYD_RES";

            if (SelectTDLY)
            {
                ModStatReport.WriteStaticLog("获取叠置行政区内的森林资源图层标识号");
                ModStatReport.GetTDLYLayerKey(XmlPath, strXZQCode, strYear, out DLTBNodeKey, out XZDWNodeKey, out LXDWNodeKey);
                ModStatReport.WriteStaticLog("获取叠置行政区内的森林资源图层");
                pDLTBFeaCls = SysCommon.ModSysSetting.GetFeatureClassByNodeKey(Plugin.ModuleCommon.TmpWorkSpace, XmlPath, DLTBNodeKey);
                pXZDWFeaCls = SysCommon.ModSysSetting.GetFeatureClassByNodeKey(Plugin.ModuleCommon.TmpWorkSpace, XmlPath, XZDWNodeKey);
                pLXDWFeaCls = SysCommon.ModSysSetting.GetFeatureClassByNodeKey(Plugin.ModuleCommon.TmpWorkSpace, XmlPath, LXDWNodeKey);

                pProgress.SetProgress("正在叠置分析地类图斑数据...");
                pOutDatasetName.Name = strDLTBResName;
                ModStatReport.WriteStaticLog("叠置分析地类图斑图层");
                pGeoProcessor.Intersect(pDLTBFeaCls as ITable, false, pImportFeaClass as ITable, false, rol, pResDataName);
                IFeatureClass pTBFeaCls = pOutFeaWorkSpace.OpenFeatureClass(strDLTBResName);
                SysCommon.modCalArea.CalCulateAllipsoidArea(pTBFeaCls, "TBMJ", 114);
                //线状地物叠置
                if (pXZDWFeaCls != null)
                {
                    pProgress.SetProgress("正在叠置分析线状地物数据...");
                    pOutDatasetName.Name = strXZDWResName;
                    //叠置分析
                    ModStatReport.WriteStaticLog("叠置分析线状地物图层");
                    pGeoProcessor.Intersect(pXZDWFeaCls as ITable, false, pImportFeaClass as ITable, false, rol, pResDataName);
                }
                else
                {
                    strXZDWResName = "";
                }

                //零星地物叠置
                if (pLXDWFeaCls != null)
                {
                    pProgress.SetProgress("正在叠置分析零星地物数据...");
                    pOutDatasetName.Name = strLXDWResName;
                    //叠置分析
                    ModStatReport.WriteStaticLog("叠置分析零星地物图层");
                    pGeoProcessor.Intersect(pLXDWFeaCls as ITable, false, pImportFeaClass as ITable, false, rol, pResDataName);
                }
                else
                {
                    strLXDWResName = "";
                }
                try
                {
                    pProgress.SetProgress("正在组织森林资源现状数据...");
                    ModStatReport.WriteStaticLog("拷贝行政区字典");
                    CopyPasteGDBData.CopyPasteGeodatabaseData(Plugin.ModuleCommon.TmpWorkSpace, pOutWorkSpace, Plugin.ModuleCommon.TmpWorkSpace.ConnectionProperties.GetProperty("User").ToString() + ".行政区字典表", esriDatasetType.esriDTTable);
                    //CopyPasteGDBData.CopyPasteGeodatabaseData(Plugin.ModuleCommon.TmpWorkSpace, pOutWorkSpace, Plugin.ModuleCommon.TmpWorkSpace.ConnectionProperties.GetProperty("User").ToString() + ".森林用途字典", esriDatasetType.esriDTTable);
                }
                catch
                { }
            }
            if (SelectZTGH)
            {
                ModStatReport.WriteStaticLog("获取叠置行政区内的总体规划图层标识号");
                ModStatReport.GetZTGHLayerKey(XmlPath, strXZQCode, out JBNTNodeKey, out YTFQNodeKey, out JSYDNodeKey);
                pJBNTFeaCls = SysCommon.ModSysSetting.GetFeatureClassByNodeKey(Plugin.ModuleCommon.TmpWorkSpace, XmlPath, JBNTNodeKey);
                pYTFQFeaCls = SysCommon.ModSysSetting.GetFeatureClassByNodeKey(Plugin.ModuleCommon.TmpWorkSpace, XmlPath, YTFQNodeKey);
                pJSYDFeaCls = SysCommon.ModSysSetting.GetFeatureClassByNodeKey(Plugin.ModuleCommon.TmpWorkSpace, XmlPath, JSYDNodeKey);

                //基本农田叠置
                if (pJBNTFeaCls != null)
                {
                    pProgress.SetProgress("正在叠置分析基本农田数据...");
                    pOutDatasetName.Name = strJBNTResName;
                    //叠置分析
                    ModStatReport.WriteStaticLog("叠置分析基本农田图层");
                    pGeoProcessor.Intersect(pJBNTFeaCls as ITable, false, pImportFeaClass as ITable, false, rol, pResDataName);
                    IFeatureClass pResJBNTFeaCls = pOutFeaWorkSpace.OpenFeatureClass(strJBNTResName);
                    SysCommon.modCalArea.CalCulateAllipsoidArea(pResJBNTFeaCls, "JBNTMJ", 114);
                }
                else
                {
                    strJBNTResName = "";
                }
                //用途分区叠置
                if (pYTFQFeaCls != null)
                {
                    pProgress.SetProgress("正在叠置分析森林用途分区数据...");
                    pOutDatasetName.Name = strYTFQResName;
                    //叠置分析
                    ModStatReport.WriteStaticLog("叠置分析森林用途图层");
                    pGeoProcessor.Intersect(pYTFQFeaCls as ITable, false, pImportFeaClass as ITable, false, rol, pResDataName);
                    IFeatureClass pResTDYTFeaCls = pOutFeaWorkSpace.OpenFeatureClass(strYTFQResName);
                    SysCommon.modCalArea.CalCulateAllipsoidArea(pResTDYTFeaCls, "MJ", 114);
                }
                else
                {
                    strYTFQResName = "";
                }
                //建设用地叠置
                if (pJSYDFeaCls != null)
                {
                    pProgress.SetProgress("正在叠置分析建设用地管制分区数据...");
                    pOutDatasetName.Name = strJSYDResName;
                    //叠置分析
                    ModStatReport.WriteStaticLog("叠置分析建设用地图层");
                    pGeoProcessor.Intersect(pJSYDFeaCls as ITable, false, pImportFeaClass as ITable, false, rol, pResDataName);
                    IFeatureClass pResJSYDFeaCls = pOutFeaWorkSpace.OpenFeatureClass(strJSYDResName);
                    SysCommon.modCalArea.CalCulateAllipsoidArea(pResJSYDFeaCls, "MJ", 114);
                }
                else
                {
                    strJSYDResName = "";
                }
            }
            pOutWorkSpace = null;
            pResDataName  = null;
            pGeoProcessor = null;
            //try
            //{
            //    File.Delete(workSpaceName);
            //}
            //catch(Exception err)
            //{}
            if (!SelectTDLY)
            {
                ModStatReport.WriteStaticLog("拷贝规划模板");
                if (File.Exists(ResultPath + "\\规划统计表.xls"))
                {
                    File.Delete(ResultPath + "\\规划统计表.xls");
                }
                File.Copy(Application.StartupPath + "\\..\\Template\\规划统计模板ZTGH.xls", ResultPath + "\\规划统计表.xls");
            }
            else if (!SelectZTGH)
            {
                ModStatReport.WriteStaticLog("拷贝森林资源模板");
                if (File.Exists(ResultPath + "\\规划统计表.xls"))
                {
                    File.Delete(ResultPath + "\\规划统计表.xls");
                }
                File.Copy(Application.StartupPath + "\\..\\Template\\规划统计模板TDLY.xls", ResultPath + "\\规划统计表.xls");
            }
            else
            {
                ModStatReport.WriteStaticLog("拷贝森林资源的总体模板");
                File.Copy(Application.StartupPath + "\\..\\Template\\规划统计模板.xls", ResultPath + "\\规划统计表.xls");
            }
            if (SelectTDLY)
            {
                if (pProgress != null)
                {
                    pProgress.SetProgress("生成森林资源现状数据基础统计表...");
                }
                string resDLTB = "";
                ModStatReport.WriteStaticLog("重新计算图斑的各种面积");
                ModStatReport.ComputeXZDWMJ(workSpaceName, strDLTBResName, strXZDWResName, out resDLTB);
                if (resDLTB != "")
                {
                    strDLTBResName = resDLTB;
                }
                //string connstr = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + workSpaceName;
                //OleDbConnection oledbconn = new OleDbConnection(connstr);
                //oledbconn.Open();
                //OleDbCommand oledbcomm = oledbconn.CreateCommand();

                //oledbcomm.CommandText = "update " + strDLTBResName + " set " + ModFieldConst.g_TBJMJ + " =round(" + ModFieldConst.g_TBJMJ + "*shape_area/" + ModFieldConst.g_TBMJ + ",2)," + ModFieldConst.g_TKMJ + "=round(" + ModFieldConst.g_TKMJ + "*shape_area/" + ModFieldConst.g_TBMJ + ",2) where " + ModFieldConst.g_TBMJ + ">0 and (" + ModFieldConst.g_TBMJ + "-shape_area)>0.01";
                //oledbcomm.ExecuteNonQuery();
                //if (strXZDWResName != "")
                //{
                //    oledbcomm.CommandText = "update " + strXZDWResName + " set " + ModFieldConst.g_XZMJ + " =round(" + ModFieldConst.g_XZMJ + "*shape_length/" + ModFieldConst.g_ChangDu + ",2) where " + ModFieldConst.g_ChangDu + ">0 and (" + ModFieldConst.g_ChangDu + "-shape_length)>0.01";
                //    oledbcomm.ExecuteNonQuery();
                //}
                //oledbconn.Close();
                ModStatReport.WriteStaticLog("生成基础统计表");
                ModStatReport.DoLandUseStatic(workSpaceName, strDLTBResName, strXZDWResName, strLXDWResName, null);
                if (pProgress != null)
                {
                    pProgress.SetProgress("生成森林资源现状一级分类面积汇总表...");
                }
                ModStatReport.WriteStaticLog("生成森林资源现状一级分类面积汇总表");
                ModStatReport.LandUseCurReport(ResultPath, strMDBName, strXZQCode, strAreaUnit, FractionNum, 1, ResultPath + "\\一级分类面积.xls", null);
                if (pProgress != null)
                {
                    pProgress.SetProgress("生成森林资源现状二级分类面积汇总表...");
                }
                ModStatReport.WriteStaticLog("生成森林资源现状二级分类面积汇总表");
                ModStatReport.LandUseCurReport(ResultPath, strMDBName, strXZQCode, strAreaUnit, FractionNum, 2, ResultPath + "\\二级分类面积.xls", null);
            }
            if (SelectZTGH)
            {
                ModStatReport.WriteStaticLog("基本农田占用分析");
                ModStatReport.DoJBNTStatistic(ResultPath, strMDBName, strJBNTResName, Application.StartupPath + "\\..\\Template\\基本农田压占统计表.cel", ResultPath + "\\基本农田.xls", strAreaUnit, FractionNum);
                ModStatReport.WriteStaticLog("森林用途占用分析");
                ModStatReport.DoYTFQStatistic(ResultPath, strMDBName, strYTFQResName, Application.StartupPath + "\\..\\Template\\森林用途区压占统计表.cel", ResultPath + "\\森林用途.xls", strAreaUnit, FractionNum);
                ModStatReport.WriteStaticLog("建设用地占用分析");
                ModStatReport.DoJSYDStatistic(ResultPath, strMDBName, strJSYDResName, Application.StartupPath + "\\..\\Template\\建设用地管制区压占统计表.cel", ResultPath + "\\建设用地.xls", strAreaUnit, FractionNum);
            }
            if (SelectTDLY)
            {
                pProgress.SetProgress("生成森林资源现状数据分析结果...");
                ModStatReport.WriteStaticLog("拷贝EXCEL中工作区表");
                ModStatReport.CopyExcelSheet(ResultPath + "\\一级分类面积.xls", "Sheet1", ResultPath + "\\规划统计表.xls", "森林资源现状一级分类面积");
                ModStatReport.CopyExcelSheet(ResultPath + "\\二级分类面积.xls", "Sheet1", ResultPath + "\\规划统计表.xls", "森林资源现状二级分类面积");
                File.Delete(ResultPath + "\\一级分类面积.xls");
                File.Delete(ResultPath + "\\二级分类面积.xls");
            }
            if (SelectZTGH)
            {
                pProgress.SetProgress("生成森林资源总体规划数据分析结果...");
                ModStatReport.WriteStaticLog("拷贝EXCEL中工作区表");
                ModStatReport.CopyExcelSheet(ResultPath + "\\基本农田.xls", "Sheet1", ResultPath + "\\规划统计表.xls", "基本农田");
                ModStatReport.CopyExcelSheet(ResultPath + "\\森林用途.xls", "Sheet1", ResultPath + "\\规划统计表.xls", "森林用途分区");
                ModStatReport.CopyExcelSheet(ResultPath + "\\建设用地.xls", "Sheet1", ResultPath + "\\规划统计表.xls", "建设用地管制区");

                File.Delete(ResultPath + "\\基本农田.xls");
                File.Delete(ResultPath + "\\森林用途.xls");
                File.Delete(ResultPath + "\\建设用地.xls");
            }
            try
            {
                File.Delete(workSpaceName);
            }
            catch (Exception err)
            {}
            ModStatReport.WriteStaticLog("打开统计结果");
            ModStatReport.OpenExcelFile(ResultPath + "\\规划统计表.xls");
            if (pProgress != null)
            {
                pProgress.Close();
            }
            pResDataName  = null;
            pGeoProcessor = null;
            pXmlDoc       = null;
            ModStatReport.WriteStaticLog("统计结束");
            System.Runtime.InteropServices.Marshal.ReleaseComObject(pOutWorkSpace);
            pOutWorkSpace = null;
            try
            {
                File.Delete(workSpaceName);
            }
            catch (Exception err)
            { }

            System.IO.File.Delete(StaticConfigPath);
            System.IO.File.Delete(LayerTreePath);
        }
Esempio n. 11
0
        public IFeatureClass Intsect(IFeatureClass _pFtClass,IFeatureClass _pFtOverlay,string _FilePath,string _pFileName)
        {
            IFeatureClassName pOutPut = new FeatureClassNameClass();

               pOutPut.ShapeType = _pFtClass.ShapeType;

               pOutPut.ShapeFieldName = _pFtClass.ShapeFieldName;

               pOutPut.FeatureType = esriFeatureType.esriFTSimple;

               //set output location and feature class name

              IWorkspaceName pWsN = new WorkspaceNameClass();

              pWsN.WorkspaceFactoryProgID = "esriDataSourcesFile.ShapefileWorkspaceFactory";

              pWsN.PathName = _FilePath;

               //也可以用这种方法,IName 和IDataset的用法

              /* IWorkspaceFactory pWsFc = new ShapefileWorkspaceFactoryClass();

             IWorkspace pWs = pWsFc.OpenFromFile(_FilePath, 0);

             IDataset pDataset = pWs as IDataset;

             IWorkspaceName pWsN = pDataset.FullName as IWorkspaceName;
              */

               IDatasetName pDatasetName = pOutPut as IDatasetName;

               pDatasetName.Name = _pFileName;

               pDatasetName.WorkspaceName =pWsN;

               IBasicGeoprocessor pBasicGeo = new BasicGeoprocessorClass();

               IFeatureClass pFeatureClass = pBasicGeo.Intersect(_pFtClass as ITable , false, _pFtOverlay as ITable , false, 0.1, pOutPut);

               return pFeatureClass;
        }