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); }
/// <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); }
//批次报批研判 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); }
//森林资源/地类图斑研判 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); }
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); }
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; }
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); }
//森林用途研判 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); }
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; }
//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); }
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; }