using ESRI.ArcGIS.Carto; using ESRI.ArcGIS.DataSourcesGDB; using ESRI.ArcGIS.Geodatabase; using ESRI.ArcGIS.Geometry; using ExcelDataReader; using KGIS.Framework.AE; using KGIS.Framework.AE.Enum; using KGIS.Framework.AE.GaussCalculate; using KGIS.Framework.AE.GPHelper; using KGIS.Framework.DBOperator; using KGIS.Framework.Maps; using KGIS.Framework.Platform; using KGIS.Framework.Utils; using KGIS.Framework.Utils.Helper; using Kingo.Plugin.BGResultManager.Utility; using Kingo.PluginServiceInterface; using KUI.Windows; using System; using System.Collections.Generic; using System.Data; using System.IO; using System.Linq; using System.Runtime.InteropServices; using System.Text; using System.Windows; using System.Windows.Controls; using System.Xml; namespace Kingo.Plugin.BGResultManager.View { /// /// FrmCreateVCTTemplate.xaml 的交互逻辑 /// public partial class Exportcultivatedlandreport : BaseWindow { public Exportcultivatedlandreport() { InitializeComponent(); } private void btnCreate_Click(object sender, RoutedEventArgs e) { string nc_gdxhExcelPath = string.Empty; string nc_jkhfgchfExcelPath = string.Empty; IRDBHelper rdbHelper = null; DataTable dataTable = null; List ncsjExcels = new List(); try { #region 判断表格数据是否存在 if (string.IsNullOrEmpty(txtNCData.Text)) { MessageHelper.ShowTips("年初表格数据路径为空!"); return; } if (string.IsNullOrEmpty(txtsavePath.Text)) { MessageHelper.ShowTips("请先选择输出路径!"); return; } IFeatureClass DLTBGXGC = MapsManager.Instance.MapService.GetFeatureClassByName("DLTBGXGC"); if (DLTBGXGC == null || DLTBGXGC.FeatureCount(null) == 0) { MessageHelper.ShowTips("未找到更新过程层数据或更新过程层数据为空,无法导出!"); return; } this.ShowLoading("正在导出...", 0, 0); DirectoryInfo dir = new DirectoryInfo(txtNCData.Text); FileInfo[] fileSet = dir.GetFiles("(" + (MapsManager.Instance.MapService.GetProjectInfo() as ProjectInfo).CODE + ")耕地细化情况统计表.xlsx", SearchOption.AllDirectories); if (fileSet != null && fileSet.Length > 0) { nc_gdxhExcelPath = fileSet[0].FullName; } else { fileSet = dir.GetFiles("(" + (MapsManager.Instance.MapService.GetProjectInfo() as ProjectInfo).CODE + ")耕地细化情况统计表.xls", SearchOption.AllDirectories); if (fileSet != null && fileSet.Length > 0) { nc_gdxhExcelPath = fileSet[0].FullName; } } fileSet = dir.GetFiles("(" + (MapsManager.Instance.MapService.GetProjectInfo() as ProjectInfo).CODE + ")即可恢复与工程恢复种植属性汇总统计表.xlsx", SearchOption.AllDirectories); if (fileSet != null && fileSet.Length > 0) { nc_jkhfgchfExcelPath = fileSet[0].FullName; } else { fileSet = dir.GetFiles("(" + (MapsManager.Instance.MapService.GetProjectInfo() as ProjectInfo).CODE + ")即可恢复与工程恢复种植属性汇总统计表.xls", SearchOption.AllDirectories); if (fileSet != null && fileSet.Length > 0) { nc_jkhfgchfExcelPath = fileSet[0].FullName; } } if (string.IsNullOrEmpty(nc_gdxhExcelPath) || string.IsNullOrEmpty(nc_jkhfgchfExcelPath)) { MessageHelper.ShowTips("未找到年初表格,请核对后在进行导出!"); return; } ncsjExcels.Add(nc_gdxhExcelPath); ncsjExcels.Add(nc_jkhfgchfExcelPath); #endregion #region 数据处理 //1.读取年初数据 foreach (var item in ncsjExcels) { string dbPath = System.IO.Path.GetDirectoryName((MapsManager.Instance.MapService.GetProjectInfo() as ProjectInfo).GetProjFilePath()) + @"\BGTJ.sqlite"; rdbHelper = RDBFactory.CreateDbHelper("Data Source=" + dbPath, DatabaseType.SQLite); var tableNames = item.Split('\\'); string tableName = tableNames[tableNames.Length - 1].Split('.')[0].ToString(); tableName = tableName.Substring(tableName.IndexOf(')') + 1); rdbHelper.ExecuteSQL($" drop table {tableName} "); using (var streamData = File.Open(item, FileMode.Open, FileAccess.Read)) { using (var readerData = ExcelReaderFactory.CreateReader(streamData)) { var result = readerData.AsDataSet(); dataTable = result.Tables[0]; Dictionary dics = Get_Colunms(dataTable); CreateTableSql(rdbHelper, tableName, dics); if (dataTable != null && dataTable.Rows.Count > 0) { dataTable = DtSelectTop(10, dataTable); Insert_sql(dataTable, dics, rdbHelper, tableName); } } } } //2.地类图斑那更新过程层与相关专题图层联合 GetUnionResult(rdbHelper, DLTBGXGC); //3.导出表格并赋值 #region 耕地细化调查情况变化统计表 string tempPath = AppDomain.CurrentDomain.BaseDirectory + "TempalateReports\\BGTJ\\耕地细化调查情况变化统计表.xlsx"; string code = (MapsManager.Instance.MapService.GetProjectInfo() as ProjectInfo).CODE; string savePath = $"{this.txtsavePath.Text}\\({code})耕地细化调查情况变化统计表.xlsx"; File.Copy(tempPath, savePath, true); DataTable resultdataTable = rdbHelper.ExecuteDatatable("tab", $@" select '3' Cells_X ,'2'Cells_Y, round(column3,4) BGMJ,'河道湖区耕地'TYPE FROM 耕地细化情况统计表 WHERE column2='{code}' union all select '3' Cells_X ,'3'Cells_Y, round(column4,4) BGMJ,'林区耕地'TYPE FROM 耕地细化情况统计表 WHERE column2='{code}' union all select '3' Cells_X ,'4'Cells_Y, round(column5,4) BGMJ,'牧区耕地'TYPE FROM 耕地细化情况统计表 WHERE column2='{code}' union all select '3' Cells_X ,'5'Cells_Y, round(column6,4) BGMJ,'沙荒耕地'TYPE FROM 耕地细化情况统计表 WHERE column2='{code}' union all select '3' Cells_X ,'6'Cells_Y, round(column7,4) BGMJ,'石漠化耕地'TYPE FROM 耕地细化情况统计表 WHERE column2='{code}' union all select '3' Cells_X ,'7'Cells_Y, round(column8,4) BGMJ,'盐碱地耕地'TYPE FROM 耕地细化情况统计表 WHERE column2='{code}' union all select '7' Cells_X ,'3'Cells_Y, round(sum(ifnull(TBBGMJ/10000 + 0.0000001,0)),2) BGMJ,'林区耕地-年内增加' TYPE from BWGD_Multipart WHERE SUBSTR(BGHDLBM,1,2)='01' and BGHGDPDJB<>'5' and (BGHCZCSXM not in ('201','202','203') or BGHCZCSXM ISNULL) and (BGQTBXHDM<>'LQGD' or BGQTBXHMC ISNULL) and (BGHTBXHDM='LQGD' or BWLX='LQBW') union all select '8' Cells_X ,'3'Cells_Y, round(sum(ifnull(TBBGMJ/10000 + 0.0000001,0)),2) BGMJ,'林区耕地-年内减少' TYPE from BWGD_Multipart WHERE SUBSTR(BGHDLBM,1,2)='01' and BGHGDPDJB<>'5' and (BGHCZCSXM not in ('201','202','203') or BGHCZCSXM ISNULL) and (BGQTBXHDM='LQGD') and (BGHTBXHDM<>'LQGD' or BGHTBXHDM ISNULL) and BWLX<>'LQBW' union all select '7' Cells_X ,'4'Cells_Y, round(sum(ifnull(TBBGMJ/10000 + 0.0000001,0)),2) BGMJ,'牧区耕地-年内增加' TYPE from BWGD_Multipart WHERE SUBSTR(BGHDLBM,1,2)='01' and BGHGDPDJB<>'5' and (BGHCZCSXM not in ('201','202','203') or BGHCZCSXM ISNULL) and (BGQTBXHDM<>'MQGD' or BGQTBXHMC ISNULL) and (BGHTBXHDM='MQGD' or BWLX='CYBW') union all select '8' Cells_X ,'4'Cells_Y, round(sum(ifnull(TBBGMJ/10000 + 0.0000001,0)),2) BGMJ,'牧区耕地-年内减少' TYPE from BWGD_Multipart WHERE SUBSTR(BGHDLBM,1,2)='01' and BGHGDPDJB<>'5' and (BGHCZCSXM not in ('201','202','203') or BGHCZCSXM ISNULL) and (BGQTBXHDM='MQGD') and (BGHTBXHDM<>'MQGD' or BGHTBXHMC ISNULL) and BWLX<>'CYBW' union all select '7' Cells_X ,'5'Cells_Y, round(sum(ifnull(TBBGMJ/10000 + 0.0000001,0)),2) BGMJ,'沙荒耕地-年内增加' TYPE from BWGD_Multipart WHERE SUBSTR(BGHDLBM,1,2)='01' and BGHGDPDJB<>'5' and (BGHCZCSXM not in ('201','202','203') or BGHCZCSXM ISNULL)and (BGHTBXHDM<>'LQGD' and BWLX<>'LQBW' and BGHTBXHDM<>'MQGD' and BWLX<>'CYBW') and (BGQTBXHDM<>'SHGD' or BGQTBXHMC ISNULL) and (BGHTBXHDM='SHGD') union all select '8' Cells_X ,'5'Cells_Y, round(sum(ifnull(TBBGMJ/10000 + 0.0000001,0)),2) BGMJ,'沙荒耕地-年内减少' TYPE from BWGD_Multipart WHERE SUBSTR(BGHDLBM,1,2)='01' and BGHGDPDJB<>'5' and (BGHCZCSXM not in ('201','202','203') or BGHCZCSXM ISNULL) and (BGHTBXHDM<>'LQGD' and BWLX<>'LQBW' and BGHTBXHDM<>'MQGD' and BWLX<>'CYBW') and (BGQTBXHDM='SHGD') and (BGHTBXHDM<>'SHGD') union all select '7' Cells_X ,'6'Cells_Y, round(sum(ifnull(TBBGMJ/10000 + 0.0000001,0)),2) BGMJ,'石漠化耕地-年内增加' TYPE from BWGD_Multipart WHERE SUBSTR(BGHDLBM,1,2)='01' and BGHGDPDJB<>'5' and (BGHCZCSXM not in ('201','202','203') or BGHCZCSXM ISNULL) and (BGHTBXHDM<>'LQGD' and BWLX<>'LQBW' and BGHTBXHDM<>'MQGD' and BWLX<>'CYBW') and (BGQTBXHDM<>'SMGD' or BGQTBXHMC ISNULL) and (BGHTBXHDM='SMGD') union all select '8' Cells_X ,'6'Cells_Y, round(sum(ifnull(TBBGMJ/10000 + 0.0000001,0)),2) BGMJ,'石漠化耕地-年内减少' TYPE from BWGD_Multipart WHERE SUBSTR(BGHDLBM,1,2)='01' and BGHGDPDJB<>'5' and (BGHCZCSXM not in ('201','202','203') or BGHCZCSXM ISNULL) and (BGHTBXHDM<>'LQGD' and BWLX<>'LQBW' and BGHTBXHDM<>'MQGD' and BWLX<>'CYBW') and (BGQTBXHDM='SMGD') and (BGHTBXHDM<>'SMGD' or BGHTBXHDM ISNULL) union all select '7' Cells_X ,'2'Cells_Y, round(sum(ifnull(TBBGMJ/10000 + 0.0000001,0)),2) BGMJ,'河道湖区耕地-年内增加' TYPE from BWGD_Multipart WHERE SUBSTR(BGHDLBM,1,2)='01' and BGHGDPDJB<>'5' and (BGHCZCSXM not in ('201','202','203') or BGHCZCSXM ISNULL) and (BGHTBXHDM<>'LQGD' and BWLX<>'LQBW' and BGHTBXHDM<>'MQGD' and BWLX<>'CYBW' and BGHTBXHDM<>'SMGD' and BGHTBXHDM<>'SHGD') and BGHTBXHDM='HDGD' and (BGQTBXHDM<>'HDGD' or BGQTBXHDM ISNULL ) union all select '8' Cells_X ,'2'Cells_Y, round(sum(ifnull(TBBGMJ/10000 + 0.0000001,0)),2) BGMJ,'河道湖区耕地-年内减少' TYPE from BWGD_Multipart WHERE SUBSTR(BGHDLBM,1,2)='01' and BGHGDPDJB<>'5' and (BGHCZCSXM not in ('201','202','203') or BGHCZCSXM ISNULL) and (BGHTBXHDM<>'LQGD' and BWLX<>'LQBW' and BGHTBXHDM<>'MQGD' and BWLX<>'CYBW' and BGHTBXHDM<>'SMGD' and BGHTBXHDM<>'SHGD') and BGQTBXHDM='HDGD' and (BGHTBXHDM<>'HDGD' or BGHTBXHDM ISNULL ) union all select '7' Cells_X ,'7'Cells_Y, round(sum(ifnull(TBBGMJ/10000 + 0.0000001,0)),2) BGMJ,'盐碱地耕地-年内增加' TYPE from BWGD_Multipart WHERE SUBSTR(BGHDLBM,1,2)='01' and BGHGDPDJB<>'5' and (BGHCZCSXM not in ('201','202','203') or BGHCZCSXM ISNULL) and (BGHTBXHDM<>'LQGD' and BWLX<>'LQBW' and BGHTBXHDM<>'MQGD' and BWLX<>'CYBW' and BGHTBXHDM<>'SMGD' and BGHTBXHDM<>'SHGD' and BGHTBXHDM<>'HDGD') and BGHTBXHDM='YJGD' and (BGQTBXHDM<>'YJGD' or BGQTBXHDM ISNULL) union all select '8' Cells_X ,'7'Cells_Y, round(sum(ifnull(TBBGMJ/10000 + 0.0000001,0)),2) BGMJ,'盐碱地耕地-年内减少' TYPE from BWGD_Multipart WHERE SUBSTR(BGHDLBM,1,2)='01' and BGHGDPDJB<>'5' and (BGHCZCSXM not in ('201','202','203') or BGHCZCSXM ISNULL) and (BGHTBXHDM<>'LQGD' and BWLX<>'LQBW' and BGHTBXHDM<>'MQGD' and BWLX<>'CYBW' and BGHTBXHDM<>'SMGD' and BGHTBXHDM<>'SHGD' and BGHTBXHDM<>'HDGD') and BGQTBXHDM='YJGD' and (BGHTBXHDM<>'YJGD' or BGHTBXHDM ISNULL) ", true); CellHelper.SetFileToDisk(resultdataTable, savePath, 0); CellHelper.Import(savePath); #endregion #region 即可恢复与工程恢复种植属性变化统计表 tempPath = AppDomain.CurrentDomain.BaseDirectory + "TempalateReports\\BGTJ\\即可恢复与工程恢复种植属性变化统计表.xlsx"; savePath = $"{this.txtsavePath.Text}\\({(MapsManager.Instance.MapService.GetProjectInfo() as ProjectInfo).CODE})即可恢复与工程恢复种植属性变化统计表.xlsx"; File.Copy(tempPath, savePath, true); resultdataTable = rdbHelper.ExecuteDatatable("tab", $@" select '5' Cells_X ,'1'Cells_Y, round(column3,4) BGMJ,'合计'TYPE FROM 即可恢复与工程恢复种植属性汇总统计表 WHERE column2='{code}' union all select '5' Cells_X ,'2'Cells_Y, round(column4,4) BGMJ,'即可恢复小计'TYPE FROM 即可恢复与工程恢复种植属性汇总统计表 WHERE column2='{code}' union all select '5' Cells_X ,'3'Cells_Y, round(column5,4) BGMJ,'果园(0201)'TYPE FROM 即可恢复与工程恢复种植属性汇总统计表 WHERE column2='{code}' union all select '5' Cells_X ,'4'Cells_Y, round(column6,4) BGMJ,'可调整果园(0201K)'TYPE FROM 即可恢复与工程恢复种植属性汇总统计表 WHERE column2='{code}' union all select '5' Cells_X ,'5'Cells_Y, round(column7,4) BGMJ,'茶园(0202)'TYPE FROM 即可恢复与工程恢复种植属性汇总统计表 WHERE column2='{code}' union all select '5' Cells_X ,'6'Cells_Y, round(column8,4) BGMJ,'可调整茶园(0202K)'TYPE FROM 即可恢复与工程恢复种植属性汇总统计表 WHERE column2='{code}' union all select '5' Cells_X ,'7'Cells_Y, round(column9,4) BGMJ,'橡胶园(0203)'TYPE FROM 即可恢复与工程恢复种植属性汇总统计表 WHERE column2='{code}' union all select '5' Cells_X ,'8'Cells_Y, round(column10,4) BGMJ,'可调整橡胶园(0203K)'TYPE FROM 即可恢复与工程恢复种植属性汇总统计表 WHERE column2='{code}' union all select '5' Cells_X ,'9'Cells_Y, round(column11,4) BGMJ,'其他园地(0204)'TYPE FROM 即可恢复与工程恢复种植属性汇总统计表 WHERE column2='{code}' union all select '5' Cells_X ,'10'Cells_Y, round(column12,4) BGMJ,'可调整其他园地(0204K)'TYPE FROM 即可恢复与工程恢复种植属性汇总统计表 WHERE column2='{code}' union all select '5' Cells_X ,'11'Cells_Y, round(column13,4) BGMJ,'乔木林地(0301)'TYPE FROM 即可恢复与工程恢复种植属性汇总统计表 WHERE column2='{code}' union all select '5' Cells_X ,'12'Cells_Y, round(column14,4) BGMJ,'可调整乔木林地(0301K)'TYPE FROM 即可恢复与工程恢复种植属性汇总统计表 WHERE column2='{code}' union all select '5' Cells_X ,'13'Cells_Y, round(column15,4) BGMJ,'竹林地(0302)'TYPE FROM 即可恢复与工程恢复种植属性汇总统计表 WHERE column2='{code}' union all select '5' Cells_X ,'14'Cells_Y, round(column16,4) BGMJ,'可调整竹林地(0302K)'TYPE FROM 即可恢复与工程恢复种植属性汇总统计表 WHERE column2='{code}' union all select '5' Cells_X ,'15'Cells_Y, round(column17,4) BGMJ,'灌木林地(0305)'TYPE FROM 即可恢复与工程恢复种植属性汇总统计表 WHERE column2='{code}' union all select '5' Cells_X ,'16'Cells_Y, round(column18,4) BGMJ,'其他林地(0307)'TYPE FROM 即可恢复与工程恢复种植属性汇总统计表 WHERE column2='{code}' union all select '5' Cells_X ,'17'Cells_Y, round(column19,4) BGMJ,'可调整其他林地(0307K)'TYPE FROM 即可恢复与工程恢复种植属性汇总统计表 WHERE column2='{code}' union all select '5' Cells_X ,'18'Cells_Y, round(column20,4) BGMJ,'可调整人工牧草地(0403K)'TYPE FROM 即可恢复与工程恢复种植属性汇总统计表 WHERE column2='{code}' union all select '5' Cells_X ,'19'Cells_Y, round(column21,4) BGMJ,'其他草地(0404)'TYPE FROM 即可恢复与工程恢复种植属性汇总统计表 WHERE column2='{code}' union all select '5' Cells_X ,'20'Cells_Y, round(column22,4) BGMJ,'坑塘水面(1104)'TYPE FROM 即可恢复与工程恢复种植属性汇总统计表 WHERE column2='{code}' union all select '5' Cells_X ,'21'Cells_Y, round(column23,4) BGMJ,'可调整养殖坑塘(1104K)'TYPE FROM 即可恢复与工程恢复种植属性汇总统计表 WHERE column2='{code}' union all select '5' Cells_X ,'22'Cells_Y, round(column24,4) BGMJ,'工程恢复小计'TYPE FROM 即可恢复与工程恢复种植属性汇总统计表 WHERE column2='{code}' union all select '5' Cells_X ,'23'Cells_Y, round(column25,4) BGMJ,'果园(0201)'TYPE FROM 即可恢复与工程恢复种植属性汇总统计表 WHERE column2='{code}' union all select '5' Cells_X ,'24'Cells_Y, round(column26,4) BGMJ,'可调整果园(0201K)'TYPE FROM 即可恢复与工程恢复种植属性汇总统计表 WHERE column2='{code}' union all select '5' Cells_X ,'25'Cells_Y, round(column27,4) BGMJ,'茶园(0202)'TYPE FROM 即可恢复与工程恢复种植属性汇总统计表 WHERE column2='{code}' union all select '5' Cells_X ,'26'Cells_Y, round(column28,4) BGMJ,'可调整茶园(0202K)'TYPE FROM 即可恢复与工程恢复种植属性汇总统计表 WHERE column2='{code}' union all select '5' Cells_X ,'27'Cells_Y, round(column29,4) BGMJ,'橡胶园(0203)'TYPE FROM 即可恢复与工程恢复种植属性汇总统计表 WHERE column2='{code}' union all select '5' Cells_X ,'28'Cells_Y, round(column30,4) BGMJ,'可调整橡胶园(0203K)'TYPE FROM 即可恢复与工程恢复种植属性汇总统计表 WHERE column2='{code}' union all select '5' Cells_X ,'29'Cells_Y, round(column31,4) BGMJ,'其他园地(0204)'TYPE FROM 即可恢复与工程恢复种植属性汇总统计表 WHERE column2='{code}' union all select '5' Cells_X ,'30'Cells_Y, round(column32,4) BGMJ,'可调整其他园地(0204K)'TYPE FROM 即可恢复与工程恢复种植属性汇总统计表 WHERE column2='{code}' union all select '5' Cells_X ,'31'Cells_Y, round(column33,4) BGMJ,'乔木林地(0301)'TYPE FROM 即可恢复与工程恢复种植属性汇总统计表 WHERE column2='{code}' union all select '5' Cells_X ,'32'Cells_Y, round(column34,4) BGMJ,'可调整乔木林地(0301K)'TYPE FROM 即可恢复与工程恢复种植属性汇总统计表 WHERE column2='{code}' union all select '5' Cells_X ,'33'Cells_Y, round(column35,4) BGMJ,'竹林地(0302)'TYPE FROM 即可恢复与工程恢复种植属性汇总统计表 WHERE column2='{code}' union all select '5' Cells_X ,'34'Cells_Y, round(column36,4) BGMJ,'可调整竹林地(0302K)'TYPE FROM 即可恢复与工程恢复种植属性汇总统计表 WHERE column2='{code}' union all select '5' Cells_X ,'35'Cells_Y, round(column37,4) BGMJ,'灌木林地(0305)'TYPE FROM 即可恢复与工程恢复种植属性汇总统计表 WHERE column2='{code}' union all select '5' Cells_X ,'36'Cells_Y, round(column38,4) BGMJ,'其他林地(0307)'TYPE FROM 即可恢复与工程恢复种植属性汇总统计表 WHERE column2='{code}' union all select '5' Cells_X ,'37'Cells_Y, round(column39,4) BGMJ,'可调整其他林地(0307K)'TYPE FROM 即可恢复与工程恢复种植属性汇总统计表 WHERE column2='{code}' union all select '5' Cells_X ,'38'Cells_Y, round(column40,4) BGMJ,'可调整人工牧草地(0403K)'TYPE FROM 即可恢复与工程恢复种植属性汇总统计表 WHERE column2='{code}' union all select '5' Cells_X ,'39'Cells_Y, round(column41,4) BGMJ,'其他草地(0404)'TYPE FROM 即可恢复与工程恢复种植属性汇总统计表 WHERE column2='{code}' union all select '5' Cells_X ,'40'Cells_Y, round(column42,4) BGMJ,'坑塘水面(1104)'TYPE FROM 即可恢复与工程恢复种植属性汇总统计表 WHERE column2='{code}' union all select '5' Cells_X ,'41'Cells_Y, round(column43,4) BGMJ,'可调整养殖坑塘(1104K)'TYPE FROM 即可恢复与工程恢复种植属性汇总统计表 WHERE column2='{code}' union all select Cells_X,Cells_Y, BGMJ,'即可恢复-年内减少' TYPE from ( select BGQDLBM,round(sum(ifnull(TBBGMJ/10000 + 0.0000001,0)),2) BGMJ from LNGD_Multipart WHERE SUBSTR(BGHDLBM,1,2)='01' and BGHGDPDJB<>'5' and (BGHCZCSXM not in ('201','202','203') or BGHCZCSXM ISNULL) and (BGQZZSXDM='JKHF') and (BGHZZSXDM<>'JKHF' or BGHZZSXDM ISNULL) GROUP BY BGQDLBM )a left join JKHFYGCHFZZSXHZTJB b on a.BGQDLBM=b.bgh WHERE b.bgq='年内减少' and TYPE='JKHF' union all select Cells_X,Cells_Y, BGMJ,'即可恢复-年内增加' TYPE from ( select BGHDLBM,round(sum(ifnull(TBBGMJ/10000 + 0.0000001,0)),2) BGMJ from LNGD_Multipart WHERE SUBSTR(BGHDLBM,1,2)='01' and BGHGDPDJB<>'5' and (BGHCZCSXM not in ('201','202','203') or BGHCZCSXM ISNULL) and (BGHZZSXDM='JKHF') and (BGQZZSXDM<>'JKHF' or BGQZZSXDM ISNULL) GROUP BY BGHDLBM )a left join JKHFYGCHFZZSXHZTJB b on a.BGHDLBM=b.bgh WHERE b.bgq='年内增加' and TYPE='JKHF' union all select Cells_X,Cells_Y, BGMJ,'工程恢复-年内减少' TYPE from ( select BGQDLBM,round(sum(ifnull(TBBGMJ/10000 + 0.0000001,0)),2) BGMJ from LNGD_Multipart WHERE SUBSTR(BGHDLBM,1,2)='01' and BGHGDPDJB<>'5' and (BGHCZCSXM not in ('201','202','203') or BGHCZCSXM ISNULL) and (BGQZZSXDM='GCHF') and (BGHZZSXDM<>'GCHF' or BGHZZSXDM ISNULL) GROUP BY BGQDLBM )a left join JKHFYGCHFZZSXHZTJB b on a.BGQDLBM=b.bgh WHERE b.bgq='年内减少' and TYPE='GCHF' union all select Cells_X,Cells_Y, BGMJ,'工程恢复-年内增加' TYPE from ( select BGHDLBM,round(sum(ifnull(TBBGMJ/10000 + 0.0000001,0)),2) BGMJ from LNGD_Multipart WHERE SUBSTR(BGHDLBM,1,2)='01' and BGHGDPDJB<>'5' and (BGHCZCSXM not in ('201','202','203') or BGHCZCSXM ISNULL) and (BGHZZSXDM='GCHF') and (BGQZZSXDM<>'GCHF' or BGQZZSXDM ISNULL) GROUP BY BGHDLBM )a left join JKHFYGCHFZZSXHZTJB b on a.BGHDLBM=b.bgh WHERE b.bgq='年内增加' and TYPE='GCHF'", true); CellHelper.SetFileToDisk(resultdataTable, savePath, 0); CellHelper.Import(savePath); #endregion #endregion this.CloseLoading(); MessageHelper.ShowTips("导出完成!"); } catch (Exception ex) { LogAPI.Debug(ex); throw ex; } finally { this.CloseLoading(); this.Close(); } } #region Excel保存至db public static Dictionary Get_Colunms(DataTable dic) { Dictionary dics = new Dictionary(); foreach (DataColumn item in dic.Columns) { dics.Add(item.ColumnName, "Varchar"); } return dics; } /// /// 创建表 /// /// /// /// protected void CreateTableSql(IRDBHelper rdbHelper, string tableName, Dictionary table) { string result = string.Empty; try { string temp1 = "CREATE TABLE if not exists " + tableName + "("; foreach (var item in table) { temp1 = temp1 + item.Key.Trim().ToLower() + " " + item.Value + ","; } result = temp1.TrimEnd(',') + ");"; rdbHelper.ExecuteNonQueryWithException($" DROP TABLE if exists {tableName}"); rdbHelper.ExecuteNonQueryWithException(result); } catch (Exception ex) { throw ex; } } public void Insert_sql(DataTable dic, Dictionary dics, IRDBHelper SqlHelper, string Table) { #region 获取所有字段 StringBuilder columns = new StringBuilder(); foreach (var item in dics) { columns.Append("," + item.Key); } #endregion #region 数据入库 int CycleIndex = 0; StringBuilder insertsql = new StringBuilder(); StringBuilder strsql = new StringBuilder(); StringBuilder stringBuilder = new StringBuilder(); var count = dic.Rows.Count; foreach (DataRow item0 in dic.Rows) { CycleIndex++; StringBuilder data = new StringBuilder();//insert语句插入字段 foreach (var item1 in dics) { if (item0[item1.Key].ToString().Trim() == "") { data.Append(",null"); } else { data.Append((",'" + item0[item1.Key].ToString().Trim().Replace("'", "''").Replace("\n", "").Replace(" ", "").Replace("\t", "").Replace("\r", "") + "'")); } } insertsql.Append(string.Format("insert into " + Table + "({0})values({1});", columns.ToString().Substring(1), data.ToString().Substring(1))); #region 提交数据 if (count < 10000) { if (CycleIndex < count) { stringBuilder.Append(insertsql.ToString()); insertsql.Clear(); } else if (CycleIndex == count) { stringBuilder.Append(insertsql.ToString()); var num = SqlHelper.ExecuteNonQuery(stringBuilder.ToString(), CommandType.Text); if (num < 0 && stringBuilder.ToString() != "") return; } } else { strsql.Append(insertsql.ToString()); insertsql.Clear(); } if (CycleIndex == 10000) { try { var num = SqlHelper.ExecuteNonQuery(strsql.ToString(), CommandType.Text); if (num < 0 && strsql.ToString() != "") return; insertsql.Clear(); strsql.Clear(); count = count - CycleIndex; CycleIndex = 0; } catch (Exception exc) { throw new Exception(exc.Message); } finally { GC.Collect(); } } #endregion } #endregion } public static DataTable DtSelectTop(int TopItem, DataTable oDT) { if (oDT.Rows.Count < TopItem) return oDT; DataTable NewTable = oDT.Clone(); DataRow[] rows = oDT.Select("1=1"); for (int i = 0; i < TopItem; i++) { NewTable.ImportRow((DataRow)rows[i]); } return NewTable; } #endregion #region 地类图斑那更新过程层与相关专题图层联合 private void GetUnionResult(IRDBHelper rdbHelper, IFeatureClass DLTBGXGC) { GPParamClass paramClass = null; IFeatureLayer Temp_Union = null; IFeatureLayer multipartToSingleFeatureLayer = null; List sqlList = new List(); ProjectInfo ProjInfo = null; IWorkspaceFactory pFtWsFct = null; string TempfilePath = string.Empty; IFeatureCursor pCursor = null; try { string gdbFolder = (MapsManager.Instance.MapService.GetProjectInfo() as ProjectInfo).ProjDir + "\\Exportcultivatedlandreport"; if (!Directory.Exists(gdbFolder)) Directory.CreateDirectory(gdbFolder); try { DelectDirect(gdbFolder); } catch { } pFtWsFct = new FileGDBWorkspaceFactory(); string gdbFileName = Guid.NewGuid().ToString(); string path = System.IO.Path.Combine(gdbFolder, gdbFileName); pFtWsFct.Create(path, "Exportcultivatedlandreport", null, 0); TempfilePath = $"{path}\\Exportcultivatedlandreport.gdb"; ProjInfo = MapsManager.Instance.CurrProjectInfo as ProjectInfo; string dbPath = System.IO.Path.GetDirectoryName((MapsManager.Instance.MapService.GetProjectInfo() as ProjectInfo).GetProjFilePath()) + @"\BGTJ.sqlite"; IWorkspaceFactory pOutWorkFactory = null; pOutWorkFactory = new SqlWorkspaceFactoryClass(); IFeature feature = null; if (BWGDFeatureClass != null) { paramClass = new GPParamClass() { FirstFeatureLayer = new FeatureLayerClass() { FeatureClass = DLTBGXGC }, SecondFeatureLayer = new FeatureLayerClass() { FeatureClass = BWGDFeatureClass, Name = "BWGD" }, OutFeatureClassPath = $"{TempfilePath}\\BWGD_Union", IsGetOutPutFeature = true, PreserveAttributes = "ALL" }; GeoprocessorHelper.UnionAnalysis(paramClass, ref Temp_Union, ProjInfo.XYResolution.ToString()); if (HHFWFeatureClass != null) { paramClass = new GPParamClass() { FirstFeatureLayer = Temp_Union, SecondFeatureLayer = new FeatureLayerClass() { FeatureClass = HHFWFeatureClass }, OutFeatureClassPath = $"{TempfilePath}\\HHFW_Union", IsGetOutPutFeature = true, PreserveAttributes = "ALL" }; } GeoprocessorHelper.UnionAnalysis(paramClass, ref Temp_Union, ProjInfo.XYResolution.ToString()); paramClass = new GPParamClass(); paramClass.FirstFeatureLayer = Temp_Union; paramClass.OutFeatureClassPath = $"{TempfilePath}\\BWGD_Multipart"; paramClass.IsGetOutPutFeature = true; GeoprocessorHelper.MultipartToSinglePath(paramClass, ref multipartToSingleFeatureLayer); IWorkspace pOutWork = pOutWorkFactory.OpenFromFile(dbPath, 0); pCursor = multipartToSingleFeatureLayer.FeatureClass.Update(new QueryFilterClass() { SubFields = "OBJECTID,TBBGMJ,SHAPE", WhereClause = " (BGHDLBM='0101' or BGHDLBM='0102' or BGHDLBM='0103') and BGHGDPDJB<>'5' " }, true); var _itbmj = multipartToSingleFeatureLayer.FeatureClass.FindField("TBBGMJ"); while ((feature = pCursor.NextFeature()) != null) { double area = GetEllipseArea(feature.ShapeCopy); feature.Value[_itbmj] = area; feature.Store(); } rdbHelper.ExecuteSQL($" drop table BWGD_Multipart "); TableToTable((multipartToSingleFeatureLayer.FeatureClass as FeatureClass).Workspace as IFeatureWorkspace, pOutWork, "BWGD_Multipart"); } else if (HHFWFeatureClass != null) { paramClass = new GPParamClass() { FirstFeatureLayer = new FeatureLayerClass() { FeatureClass = DLTBGXGC }, SecondFeatureLayer = new FeatureLayerClass() { FeatureClass = HHFWFeatureClass }, OutFeatureClassPath = $"{TempfilePath}\\HHFW_Union", IsGetOutPutFeature = true, PreserveAttributes = "ALL" }; GeoprocessorHelper.UnionAnalysis(paramClass, ref Temp_Union, ProjInfo.XYResolution.ToString()); paramClass = new GPParamClass(); paramClass.FirstFeatureLayer = Temp_Union; paramClass.OutFeatureClassPath = $"{TempfilePath}\\BWGD_Multipart"; paramClass.IsGetOutPutFeature = true; GeoprocessorHelper.MultipartToSinglePath(paramClass, ref multipartToSingleFeatureLayer); IWorkspace pOutWork = pOutWorkFactory.OpenFromFile(dbPath, 0); pCursor = multipartToSingleFeatureLayer.FeatureClass.Update(new QueryFilterClass() { SubFields = "OBJECTID,TBBGMJ,SHAPE", WhereClause = " (BGHDLBM='0101' or BGHDLBM='0102' or BGHDLBM='0103') and BGHGDPDJB<>'5' " }, true); var _itbmj = multipartToSingleFeatureLayer.FeatureClass.FindField("TBBGMJ"); while ((feature = pCursor.NextFeature()) != null) { double area = GetEllipseArea(feature.ShapeCopy); feature.Value[_itbmj] = area; feature.Store(); } rdbHelper.ExecuteSQL($" drop table BWGD_Multipart "); TableToTable((multipartToSingleFeatureLayer.FeatureClass as FeatureClass).Workspace as IFeatureWorkspace, pOutWork, "BWGD_Multipart"); } if (LNGDFeatureClass != null) { paramClass = new GPParamClass() { FirstFeatureLayer = new FeatureLayerClass() { FeatureClass = DLTBGXGC }, SecondFeatureLayer = new FeatureLayerClass() { FeatureClass = LNGDFeatureClass }, OutFeatureClassPath = $"{TempfilePath}\\LNGD_Union", IsGetOutPutFeature = true, PreserveAttributes = "ALL" }; GeoprocessorHelper.UnionAnalysis(paramClass, ref Temp_Union, ProjInfo.XYResolution.ToString()); paramClass = new GPParamClass(); paramClass.FirstFeatureLayer = Temp_Union; paramClass.OutFeatureClassPath = $"{TempfilePath}\\LNGD_Multipart"; paramClass.IsGetOutPutFeature = true; GeoprocessorHelper.MultipartToSinglePath(paramClass, ref multipartToSingleFeatureLayer); IWorkspace pOutWork = pOutWorkFactory.OpenFromFile(dbPath, 0); pCursor = multipartToSingleFeatureLayer.FeatureClass.Update(new QueryFilterClass() { SubFields = "OBJECTID,TBBGMJ,SHAPE", WhereClause = " (BGHDLBM='0101' or BGHDLBM='0102' or BGHDLBM='0103') and BGHGDPDJB<>'5' " }, true); var _itbmj = multipartToSingleFeatureLayer.FeatureClass.FindField("TBBGMJ"); while ((feature = pCursor.NextFeature()) != null) { double area = GetEllipseArea(feature.ShapeCopy); feature.Value[_itbmj] = area; feature.Store(); } rdbHelper.ExecuteSQL($" drop table LNGD_Multipart "); TableToTable((multipartToSingleFeatureLayer.FeatureClass as FeatureClass).Workspace as IFeatureWorkspace, pOutWork, "LNGD_Multipart"); } } catch (Exception ex) { LogAPI.Debug($"GetUnionResult执行错误:{ex.Message}"); LogAPI.Debug(ex); } finally { if (Temp_Union != null) Marshal.ReleaseComObject(Temp_Union); if (multipartToSingleFeatureLayer != null) Marshal.ReleaseComObject(multipartToSingleFeatureLayer); } } #endregion #region DelectDirect private static void DelectDirect(string srcPath) { try { DirectoryInfo dir = new DirectoryInfo(srcPath); FileSystemInfo[] fileinfo = dir.GetFileSystemInfos(); //返回目录中所有文件和子目录 foreach (FileSystemInfo i in fileinfo) { if (i is DirectoryInfo) //判断是否文件夹 { DirectoryInfo subdir = new DirectoryInfo(i.FullName); subdir.Delete(true); //删除子目录和文件 } else { File.Delete(i.FullName); //删除指定文件 } } } catch (Exception e) { throw; } } #endregion public bool TableToTable(IFeatureWorkspace pInWork, IWorkspace pOutWork, string tableName, IQueryFilter queryFilter = null) { try { if (pInWork == null || pOutWork == null || string.IsNullOrEmpty(tableName)) return false; IWorkspace2 workspace2 = pInWork as IWorkspace2; if (workspace2 != null) { if (!workspace2.get_NameExists(esriDatasetType.esriDTFeatureClass, tableName)) { return false; } } ITable pInTable = pInWork.OpenTable(tableName); if (pInTable == null) return false; IDataset pIndataset = (IDataset)pInTable; IDatasetName pInDatasetName = (IDatasetName)pIndataset.FullName; IEnumDataset enumDataset = pOutWork.get_Datasets(esriDatasetType.esriDTTable); IDataset dataset; enumDataset.Reset(); while ((dataset = enumDataset.Next()) != null) { string[] names = dataset.Name.Split('.'); if (string.Equals(names[names.Length - 1], tableName, StringComparison.CurrentCultureIgnoreCase)) { dataset.Delete(); break; } } IDataset pOutDataset = (IDataset)pOutWork; IDatasetName pOutDatasetName = new TableNameClass(); pOutDatasetName.WorkspaceName = (IWorkspaceName)pOutDataset.FullName; pOutDatasetName.Name = tableName; IFieldChecker fieldChecker = new FieldCheckerClass(); IFields targetFeatureClassFields = pInTable.Fields; IFields sourceFeatureClassFields = pInTable.Fields; IEnumFieldError enumFieldError; fieldChecker.InputWorkspace = pInWork as IWorkspace; fieldChecker.ValidateWorkspace = pOutWork; fieldChecker.Validate(sourceFeatureClassFields, out enumFieldError, out targetFeatureClassFields); IFeatureDataConverter one2another = new FeatureDataConverterClass(); try { one2another.ConvertTable(pInDatasetName, queryFilter, pOutDatasetName, targetFeatureClassFields, "", 1000, 0); } finally { Marshal.ReleaseComObject(one2another); } return true; } catch (Exception ex) { //LogAPI.Debug(ex); throw ex; } } public double GetEllipseArea(IGeometry polygon) { try { // 1、获得投影 String SphName = polygon.SpatialReference.Name.ToString().ToUpper(); // 2、获得椭球 ICoordinate coordinate = CoordinateFactory.CreateCoordinate(); if (SphName.Contains("XIAN_1980") || SphName.Contains("XIAN1980")) { coordinate = CoordinateFactory.CreateCoordinate(KGIS.Framework.AE.GaussCalculate.Spheroid.SphXian80); } else if (SphName.Contains("BEIJING_1954") || SphName.Contains("BEIJING1954")) { coordinate = CoordinateFactory.CreateCoordinate(KGIS.Framework.AE.GaussCalculate.Spheroid.SphBeijing54); } else if (SphName.Contains("WGS_1984") || SphName.Contains("WGS1984")) { coordinate = CoordinateFactory.CreateCoordinate(KGIS.Framework.AE.GaussCalculate.Spheroid.SphWGS84); } else if (SphName.Contains("CGCS_2000") || SphName.Contains("CGCS2000")) { coordinate = CoordinateFactory.CreateCoordinate(KGIS.Framework.AE.GaussCalculate.Spheroid.SphCGCS2000); } else { return -1; } // 3、计算面积 IGeometry pGeometry = polygon as IGeometry; double PolygonArea = 0.0; // 4、保留两位小数 PolygonArea = Math.Round(coordinate.CalculateTerranArea(pGeometry), 2, MidpointRounding.AwayFromZero); return PolygonArea; } catch (Exception ex) { throw ex; } } private void btnCancel_Click(object sender, RoutedEventArgs e) { Close(); } //不稳耕地 private IFeatureClass BWGDFeatureClass { get; set; } //河湖范围 private IFeatureClass HHFWFeatureClass { get; set; } //历年耕地 private IFeatureClass LNGDFeatureClass { get; set; } private string BWGDName { get; set; } private string HHFWName { get; set; } private string LNGDName { get; set; } private void btnSelectNCData_Click(object sender, RoutedEventArgs e) { try { MessageHelper.ShowTips("请选择基础数据汇总表格,如:.../基础数据包"); System.Windows.Forms.FolderBrowserDialog folderBrowserDialog = new System.Windows.Forms.FolderBrowserDialog(); folderBrowserDialog.Description = "请选择文件夹路径"; folderBrowserDialog.ShowNewFolderButton = true; if (!string.IsNullOrWhiteSpace(Properties.Settings.Default.LastSelectedFolder) && System.IO.Directory.Exists(Properties.Settings.Default.LastSelectedFolder)) { folderBrowserDialog.SelectedPath = Properties.Settings.Default.LastSelectedFolder; } else { folderBrowserDialog.RootFolder = Environment.SpecialFolder.Desktop; } if (folderBrowserDialog.ShowDialog() != System.Windows.Forms.DialogResult.OK) { return; } Properties.Settings.Default.LastSelectedFolder = folderBrowserDialog.SelectedPath.ToString(); Properties.Settings.Default.Save(); if (string.IsNullOrWhiteSpace(folderBrowserDialog.SelectedPath)) { return; } txtNCData.Text = folderBrowserDialog.SelectedPath; } catch (System.Exception ex) { LogAPI.Debug("选择年初数据表格时异常,异常原因: " + ex + " ; "); } } private void btnSelectZTData_Click(object sender, RoutedEventArgs e) { IFeatureClass pFeatureClass = null; try { this.txtBWGDData.Text = string.Empty; KGIS.Framework.OpenData.Control.OpenDataDialog pDialog = null; if (pDialog == null) { pDialog = new KGIS.Framework.OpenData.Control.OpenDataDialog(); } KGIS.Framework.OpenData.InterFace.ISpatialDataObjectFilter pOFilter = new KGIS.Framework.OpenData.Filter.FilterShapefiles(); pDialog.AddFilter(pOFilter, true); pOFilter = new KGIS.Framework.OpenData.Filter.FilterFeatureDatasetsAndFeatureClasses(); pDialog.AddFilter(pOFilter, true); pDialog.Title = "选择数据源"; pDialog.RestoreLocation = true; pDialog.StartLocation = pDialog.FinalLocation; pDialog.AllowMultiSelect = true; System.Windows.Forms.DialogResult dialogResult = pDialog.ShowDialog(); if (dialogResult == System.Windows.Forms.DialogResult.OK && pDialog.Selection.Count != 0) { foreach (KGIS.Framework.OpenData.InterFace.ISpatialDataObject distObj in pDialog.Selection) { if (distObj.DatasetType == ESRI.ArcGIS.Geodatabase.esriDatasetType.esriDTFeatureClass) { pFeatureClass = (distObj.DatasetName as ESRI.ArcGIS.esriSystem.IName).Open() as IFeatureClass; if (pFeatureClass != null) { BWGDFeatureClass = pFeatureClass; BWGDName = (pFeatureClass as FeatureClass).BrowseName; this.txtBWGDData.Text = distObj.FullName; break; } } } } } catch (Exception ex) { LogAPI.Debug(ex); MessageHelper.ShowError("选择图层出现异常:" + ex.Message); } } private void btnsavePath_Click(object sender, RoutedEventArgs e) { try { System.Windows.Forms.FolderBrowserDialog folderBrowserDialog = new System.Windows.Forms.FolderBrowserDialog(); folderBrowserDialog.Description = "请选择文件夹路径"; folderBrowserDialog.ShowNewFolderButton = true; if (!string.IsNullOrWhiteSpace(Properties.Settings.Default.LastSelectedFolder) && System.IO.Directory.Exists(Properties.Settings.Default.LastSelectedFolder)) { folderBrowserDialog.SelectedPath = Properties.Settings.Default.LastSelectedFolder; } else { folderBrowserDialog.RootFolder = Environment.SpecialFolder.Desktop; } if (folderBrowserDialog.ShowDialog() != System.Windows.Forms.DialogResult.OK) { return; } Properties.Settings.Default.LastSelectedFolder = folderBrowserDialog.SelectedPath.ToString(); Properties.Settings.Default.Save(); if (string.IsNullOrWhiteSpace(folderBrowserDialog.SelectedPath)) { return; } txtsavePath.Text = folderBrowserDialog.SelectedPath; } catch (System.Exception ex) { LogAPI.Debug("选择导出路径异常,异常原因: " + ex + " ; "); } } private void btnSelectHHFWData_Click(object sender, RoutedEventArgs e) { IFeatureClass pFeatureClass = null; try { this.txtHHFWData.Text = string.Empty; KGIS.Framework.OpenData.Control.OpenDataDialog pDialog = null; if (pDialog == null) { pDialog = new KGIS.Framework.OpenData.Control.OpenDataDialog(); } KGIS.Framework.OpenData.InterFace.ISpatialDataObjectFilter pOFilter = new KGIS.Framework.OpenData.Filter.FilterShapefiles(); pDialog.AddFilter(pOFilter, true); pOFilter = new KGIS.Framework.OpenData.Filter.FilterFeatureDatasetsAndFeatureClasses(); pDialog.AddFilter(pOFilter, true); pDialog.Title = "选择数据源"; pDialog.RestoreLocation = true; pDialog.StartLocation = pDialog.FinalLocation; pDialog.AllowMultiSelect = true; System.Windows.Forms.DialogResult dialogResult = pDialog.ShowDialog(); if (dialogResult == System.Windows.Forms.DialogResult.OK && pDialog.Selection.Count != 0) { foreach (KGIS.Framework.OpenData.InterFace.ISpatialDataObject distObj in pDialog.Selection) { if (distObj.DatasetType == ESRI.ArcGIS.Geodatabase.esriDatasetType.esriDTFeatureClass) { pFeatureClass = (distObj.DatasetName as ESRI.ArcGIS.esriSystem.IName).Open() as IFeatureClass; if (pFeatureClass != null) { HHFWFeatureClass = pFeatureClass; HHFWName = (pFeatureClass as FeatureClass).BrowseName; this.txtHHFWData.Text = distObj.FullName; break; } } } } } catch (Exception ex) { LogAPI.Debug(ex); MessageHelper.ShowError("选择图层出现异常:" + ex.Message); } } private void btnSelectLNGDData_Click(object sender, RoutedEventArgs e) { IFeatureClass pFeatureClass = null; try { this.txtLNGDData.Text = string.Empty; KGIS.Framework.OpenData.Control.OpenDataDialog pDialog = null; if (pDialog == null) { pDialog = new KGIS.Framework.OpenData.Control.OpenDataDialog(); } KGIS.Framework.OpenData.InterFace.ISpatialDataObjectFilter pOFilter = new KGIS.Framework.OpenData.Filter.FilterShapefiles(); pDialog.AddFilter(pOFilter, true); pOFilter = new KGIS.Framework.OpenData.Filter.FilterFeatureDatasetsAndFeatureClasses(); pDialog.AddFilter(pOFilter, true); pDialog.Title = "选择数据源"; pDialog.RestoreLocation = true; pDialog.StartLocation = pDialog.FinalLocation; pDialog.AllowMultiSelect = true; System.Windows.Forms.DialogResult dialogResult = pDialog.ShowDialog(); if (dialogResult == System.Windows.Forms.DialogResult.OK && pDialog.Selection.Count != 0) { foreach (KGIS.Framework.OpenData.InterFace.ISpatialDataObject distObj in pDialog.Selection) { if (distObj.DatasetType == ESRI.ArcGIS.Geodatabase.esriDatasetType.esriDTFeatureClass) { pFeatureClass = (distObj.DatasetName as ESRI.ArcGIS.esriSystem.IName).Open() as IFeatureClass; if (pFeatureClass != null) { LNGDFeatureClass = pFeatureClass; LNGDName = (pFeatureClass as FeatureClass).BrowseName; this.txtLNGDData.Text = distObj.FullName; break; } } } } } catch (Exception ex) { LogAPI.Debug(ex); MessageHelper.ShowError("选择图层出现异常:" + ex.Message); } } } }