using Aspose.Cells; using DevExpress.XtraPrinting.Native; using ESRI.ArcGIS.Carto; using ESRI.ArcGIS.DataManagementTools; using ESRI.ArcGIS.DataSourcesFile; using ESRI.ArcGIS.esriSystem; using ESRI.ArcGIS.Geodatabase; using ESRI.ArcGIS.Geometry; using ESRI.ArcGIS.Geoprocessing; using ESRI.ArcGIS.Geoprocessor; using ExcelDataReader; using KGIS.Framework.AE; using KGIS.Framework.AE.Enum; using KGIS.Framework.AE.GPHelper; using KGIS.Framework.DBOperator; using KGIS.Framework.Platform.Helper; using KGIS.Framework.ThreadManager; using KGIS.Framework.Utils; using KGIS.Framework.Utils.ExtensionMethod; using KGIS.Framework.Utils.Helper; using Kingo.PluginServiceInterface; using Kingo.PluginServiceInterface.Model; using KUI.Windows; using System; using System.Collections; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Diagnostics; using System.IO; using System.Linq; using System.Runtime.InteropServices; using System.Security.AccessControl; using System.Windows; using System.Windows.Forms; using System.Windows.Media; using System.Xml.Linq; using WpfApp1.Helper; using WpfApp1.Model; namespace WpfApp1 { /// /// UserControl1.xaml 的交互逻辑 /// public partial class UserControl1 : System.Windows.Controls.UserControl { List list = new List(); public UserControl1() { InitializeComponent(); list.Add(new TestData() { IsChecked = true, Descriction = "县级填报", ItemType = "1" }); list.Add(new TestData() { IsChecked = true, Descriction = "市级审核", ItemType = "2" }); list.Add(new TestData() { IsChecked = true, Descriction = "省级审核", ItemType = "3" }); list.Add(new TestData() { IsChecked = true, Descriction = "国家核查", ItemType = "4" }); list.Add(new TestData() { IsChecked = true, Descriction = "地类核查通过", ItemType = "5" }); //AttributeItemsSourse.ItemsSource = list; RelatedCombox.DisplayMember = "Descriction"; RelatedCombox.ItemsSource = list; } private List ListData { get; set; } #region 选择变更图斑所在文件夹 private void SelectBGTB_Click(object sender, RoutedEventArgs e) { try { FolderBrowserDialog dialog = new FolderBrowserDialog(); dialog.Description = "请选择变更数据文件夹"; System.Windows.Forms.DialogResult dialogResult = dialog.ShowDialog(); if (dialogResult != System.Windows.Forms.DialogResult.OK && dialogResult != System.Windows.Forms.DialogResult.Yes) { return; } DirectorySecurity dirSec = new DirectorySecurity(dialog.SelectedPath, AccessControlSections.Access); if (dirSec.AreAuditRulesProtected) { MessageHelper.ShowTips(string.Format("系统对路径[{0}]的读取权限不足无法读取!", dialog.SelectedPath)); return; } this.gvCtrl.ItemsSource = null; this.bgfwpath.Text = dialog.SelectedPath; if (cbSingle.IsChecked == true) { FindFile_Single(this.bgfwpath.Text); } else { FindmultipleFile(this.bgfwpath.Text); } this.gvCtrl.ItemsSource = ListData; } catch (Exception ex) { LogAPI.Debug(ex.Message); LogAPI.Debug(ex.StackTrace); MessageHelper.ShowTips("选择变更图斑文件异常:" + ex.Message); } } public void FindFile_Single(string dirPath) { ListData = new List(); IFeatureClass featureClass = null; List files = new List(); FileInfo file = null; List xzqdms = new List(); try { if (!Overlap_AfterTreatment.IsNullOrEmpty()) { string gdbpath = Overlap_AfterTreatment.Replace(@"\AfterTreatment", ""); IWorkspaceAPI wsAPI = new WorkspaceAPI(gdbpath, WorkspaceTypeEnum.GDBFile); IFeatureClassAPI classAPI = wsAPI.OpenFeatureClass("AfterTreatment"); featureClass = classAPI.FeatureClass; xzqdms = GetLayerUniqueFieldValueByDataStatistics(featureClass, "xzqdm"); xzqdms = FilterateXZQ(xzqdms); //变更数据 foreach (var item in xzqdms) { AnalysisExport AnalysisExport = new AnalysisExport(); AnalysisExport.ParengFolder = gdbpath; AnalysisExport.FileName = "AfterTreatment"; AnalysisExport.IsChecked = false; AnalysisExport.XZQDM = item; AnalysisExport.ResultType = "gdb"; AnalysisExport.FullName = gdbpath; AnalysisExport.BGFWName = "去重后数据"; AnalysisExport.BGFWPath = gdbpath; AnalysisExport.OutputExcelPath = bgfwpath.Text; AnalysisExport.JCSJPath = ""; AnalysisExport.JCSJName = ""; AnalysisExport.JCSJExcelName = ""; AnalysisExport.JCSJExcelPath = ""; ListData.Add(AnalysisExport); } } else { var filesshp = System.IO.Directory.GetFiles(dirPath, "*.shp", SearchOption.AllDirectories); files.AddRange(filesshp); if (filesshp.Length == 0) return; file = new FileInfo(files[0]); IWorkspaceFactory wsf = new ShapefileWorkspaceFactory(); ESRI.ArcGIS.Geodatabase.IWorkspace pWorkspace = wsf.OpenFromFile(file.DirectoryName, 0); IFeatureWorkspace pFeatureWorkspace = pWorkspace as IFeatureWorkspace; featureClass = pFeatureWorkspace.OpenFeatureClass(file.Name.Replace(".shp", "")); if (featureClass == null) return; xzqdms = GetLayerUniqueFieldValueByDataStatistics(featureClass, "xzqdm"); xzqdms = FilterateXZQ(xzqdms); //变更数据 foreach (var item in xzqdms) { AnalysisExport AnalysisExport = new AnalysisExport(); AnalysisExport.ParengFolder = file.DirectoryName; AnalysisExport.FileName = file.Name; AnalysisExport.IsChecked = false; AnalysisExport.XZQDM = item; AnalysisExport.ResultType = file.Extension; AnalysisExport.FullName = file.FullName; AnalysisExport.BGFWName = file.Name; AnalysisExport.BGFWPath = file.FullName; AnalysisExport.OutputExcelPath = bgfwpath.Text; AnalysisExport.JCSJPath = ""; AnalysisExport.JCSJName = ""; AnalysisExport.JCSJExcelName = ""; AnalysisExport.JCSJExcelPath = ""; ListData.Add(AnalysisExport); } } files.Clear(); //基础报表 var filesxml = System.IO.Directory.GetFiles(dirPath, "*土地利用现状分类面积汇总表.xlsx", SearchOption.AllDirectories); files.AddRange(filesxml); foreach (var item in files) { file = new FileInfo(item); var analysisExport = ListData.Find(x => x.XZQDM == file.Name.Replace("(", "").Substring(0, 6)); if (analysisExport != null) { analysisExport.JCSJExcelName = file.Name; analysisExport.JCSJExcelPath = file.FullName; } } files.Clear(); //基础报表 filesxml = System.IO.Directory.GetFiles(dirPath, "土地利用现状分类面积汇总表*.xlsx", SearchOption.AllDirectories); files.AddRange(filesxml); if (files.Count == 1) { try { FileInfo excelfile = new FileInfo(files[0]); using (var streamData = File.Open(excelfile.FullName, FileMode.Open, FileAccess.Read)) { using (var readerData = ExcelReaderFactory.CreateReader(streamData)) { var tjresult = readerData.AsDataSet(); DataTable tjdataTable = tjresult.Tables[0]; if (tjdataTable != null && tjdataTable.Rows.Count > 0) { foreach (var item in ListData) { var row = tjdataTable.Select($"column2='{item.XZQDM}' "); if (row != null && row.Length > 0) { item.JCSJExcelName = excelfile.Name; item.JCSJExcelPath = excelfile.FullName; } } } } } } catch (Exception ex) { LogAPI.Debug("读取Excel数据异常:" + ex.Message); LogAPI.Debug("读取Excel数据异常:" + ex.StackTrace); } } files.Clear(); //基础数据 var filesgdb = System.IO.Directory.GetDirectories(dirPath, "*.gdb", SearchOption.AllDirectories); files.AddRange(filesgdb); foreach (var item in files) { file = new FileInfo(item); var analysisExport = ListData.Find(x => x.XZQDM == file.Name.Substring(0, 6)); if (analysisExport != null) { analysisExport.JCSJName = file.Name; analysisExport.JCSJPath = file.FullName; if (!string.IsNullOrEmpty(analysisExport.JCSJName) && !string.IsNullOrEmpty(analysisExport.BGFWName) && !string.IsNullOrEmpty(analysisExport.JCSJExcelName)) { analysisExport.IsChecked = true; } } } } catch (Exception ex) { LogAPI.Debug("读取文件异常:" + ex.Message); LogAPI.Debug("读取文件异常:" + ex.StackTrace); MessageHelper.ShowError("读取文件异常:" + ex.Message); } } public void FindmultipleFile(string dirPath) { ListData = new List(); DirectoryInfo FileDir = new DirectoryInfo(dirPath); try { List files = new List(); //变更数据 var filesshp = System.IO.Directory.GetFiles(dirPath, "*.shp", SearchOption.AllDirectories); files.AddRange(filesshp); if (files.Count == 0) { filesshp = System.IO.Directory.GetDirectories(dirPath, "*.gdb", SearchOption.TopDirectoryOnly); files.AddRange(filesshp); } foreach (var item in files) { FileInfo file = new FileInfo(item); AnalysisExport AnalysisExport = new AnalysisExport(); AnalysisExport.ParengFolder = file.DirectoryName; AnalysisExport.FileName = file.Name; if (file.FullName.EndsWith(".gdb")) AnalysisExport.FileSize = $"{Math.Round(Convert.ToDouble(GetDirectoryLength(file.FullName)) / 1024 / 1024, 2)}MB"; else AnalysisExport.FileSize = $"{Math.Round(Convert.ToDouble(file.Length) / 1024 / 1024, 2)}MB"; AnalysisExport.IsChecked = false; AnalysisExport.XZQDM = file.Name.Substring(0, 6); AnalysisExport.ResultType = file.Extension; AnalysisExport.FullName = file.FullName; AnalysisExport.BGFWName = file.Name; AnalysisExport.BGFWPath = file.FullName; AnalysisExport.OutputExcelPath = bgfwpath.Text; AnalysisExport.JCSJPath = ""; AnalysisExport.JCSJName = ""; AnalysisExport.JCSJExcelName = ""; AnalysisExport.JCSJExcelPath = ""; List codes = KGIS.Framework.Core.Services.RunIDService2.Instance.Codes; bool iscontinue = false; foreach (var code in codes) { string c = code.Replace("00", "").Replace("00", ""); if (!AnalysisExport.XZQDM.StartsWith(c)) { iscontinue = true; break; } } if (iscontinue) continue; ListData.Add(AnalysisExport); } files.Clear(); //基础报表 var filesxml = System.IO.Directory.GetFiles(dirPath, "*土地利用现状分类面积汇总表.xlsx", SearchOption.AllDirectories); files.AddRange(filesxml); foreach (var item in files) { FileInfo file = new FileInfo(item); var analysisExport = ListData.Find(x => x.XZQDM == file.Name.Replace("(", "").Substring(0, 6)); if (analysisExport != null) { analysisExport.JCSJExcelName = file.Name; analysisExport.JCSJExcelPath = file.FullName; } } files.Clear(); //基础报表 filesxml = System.IO.Directory.GetFiles(dirPath, "土地利用现状分类面积汇总表*.xlsx", SearchOption.AllDirectories); files.AddRange(filesxml); if (files.Count == 1) { try { FileInfo file = new FileInfo(files[0]); using (var streamData = File.Open(file.FullName, FileMode.Open, FileAccess.Read)) { using (var readerData = ExcelReaderFactory.CreateReader(streamData)) { var tjresult = readerData.AsDataSet(); DataTable tjdataTable = tjresult.Tables[0]; if (tjdataTable != null && tjdataTable.Rows.Count > 0) { foreach (var item in ListData) { var row = tjdataTable.Select($"column2='{item.XZQDM}' "); if (row != null && row.Length > 0) { item.JCSJExcelName = file.Name; item.JCSJExcelPath = file.FullName; } } } } } } catch (Exception ex) { LogAPI.Debug("读取Excel数据异常:" + ex.Message); LogAPI.Debug("读取Excel数据异常:" + ex.StackTrace); } } files.Clear(); //基础数据 var filesgdb = System.IO.Directory.GetDirectories(dirPath, "*.gdb", SearchOption.AllDirectories); files.AddRange(filesgdb); foreach (var item in files) { FileInfo file = new FileInfo(item); var analysisExport = ListData.Find(x => x.XZQDM == file.Name.Substring(0, 6)); if (analysisExport != null) { analysisExport.JCSJName = file.Name; analysisExport.JCSJPath = file.FullName; if (!string.IsNullOrEmpty(analysisExport.JCSJName) && !string.IsNullOrEmpty(analysisExport.BGFWName) && !string.IsNullOrEmpty(analysisExport.JCSJExcelName)) { analysisExport.IsChecked = true; } } } } catch (Exception ex) { LogAPI.Debug("读取登记文件异常:" + ex.Message); LogAPI.Debug("读取登记文件异常:" + ex.StackTrace); MessageHelper.ShowError("读取登记文件异常:" + ex.Message); } } /// /// 过滤授权外的行政区代码 /// /// private List FilterateXZQ(List xzqdms) { try { List codes = KGIS.Framework.Core.Services.RunIDService2.Instance.Codes; List delxzq = new List(); foreach (var item in xzqdms) { foreach (var code in codes) { string c = code.Replace("00", "").Replace("00", ""); if (!item.StartsWith(c)) { delxzq.Add(item); } } } if (delxzq.Count > 0) { foreach (var code in delxzq) { xzqdms.Remove(code); } } return xzqdms; } catch (Exception ex) { LogAPI.Debug("FilterateXZQ异常:" + ex.Message); LogAPI.Debug("FilterateXZQ异常:" + ex.StackTrace); throw ex; } } public static long GetDirectoryLength(string dirPath) { //判断给定的路径是否存在,如果不存在则退出 if (!Directory.Exists(dirPath)) return -1; long len = 0; //定义一个DirectoryInfo对象 DirectoryInfo di = new DirectoryInfo(dirPath); //通过GetFiles方法,获取di目录中的所有文件的大小 foreach (FileInfo fi in di.GetFiles()) { len += fi.Length; } //获取di中所有的文件夹,并存到一个新的对象数组中,以进行递归 DirectoryInfo[] dis = di.GetDirectories(); if (dis.Length > 0) { for (int i = 0; i < dis.Length; i++) { len += GetDirectoryLength(dis[i].FullName); } } return len; } #endregion private void cbSingle_Checked(object sender, RoutedEventArgs e) { if (!string.IsNullOrEmpty(bgfwpath.Text) && bgfwpath.Text != "矢量数据中包含多个区县的变更范围,请先勾选下方复选框") { FindFile_Single(bgfwpath.Text); this.gvCtrl.ItemsSource = ListData; } } #region 确定 private void btn_oK_Click(object sender, RoutedEventArgs e) { try { if (ListData == null || ListData.Count == 0) { MessageHelper.ShowTips("请先选择需要分析的数据."); return; } if (RelatedCombox.SelectedItems.Count == 0 && this.DLTBGXGC.IsChecked != true) { MessageHelper.ShowTips("请先选择数据阶段."); return; } if (this.DLTBGXGC.IsChecked != true && this.JCTB.IsChecked != true && this.GTDCY.IsChecked != true) { MessageHelper.ShowTips("请先选择待分析数据类型."); return; } btn_oK.IsEnabled = false; btn_nO.IsEnabled = false; int num = 0; this.ShowLoading("正在进行分析", 0, 0); foreach (var item in ListData) { if (!item.IsChecked) continue; item.Prompt = "等待分析……"; } foreach (var item in ListData) { if (!item.IsChecked) continue; if (string.IsNullOrEmpty(item.BGFWName) || string.IsNullOrEmpty(item.JCSJExcelName) || string.IsNullOrEmpty(item.JCSJPath)) { item.Prompt = "缺少数据,无法进行分析……"; continue; } try { this.UpdateMsg($"【{item.XZQDM}】正在生成变更成果,请稍后..."); ThreadParam pParm = new ThreadParam() { ThreadName = item.XZQDM, analysisExport = item, }; CustomIDGParm mIDGParm = null; if (this.DLTBGXGC.IsChecked == true) { mIDGParm = InitData_DLTBGXGC(pParm); } //else if (this.DLTBGX.IsChecked == true) //{ // mIDGParm = InitData_DLTBGX(pParm); //} else { mIDGParm = InitData(pParm); } item.Prompt = "正在分析……"; ThreadManager.Instance.QueueUserWorkItem(new System.Threading.WaitCallback(ExecuteBG), mIDGParm, new System.Threading.WaitCallback(ComplateCallBack)); num++; if (num >= Environment.ProcessorCount - 2) { while (ThreadManager.Instance.ActiveCount >= 2) { } num = ThreadManager.Instance.ActiveCount; } } catch (Exception ex) { item.Prompt = ex.Message; continue; } } while (ThreadManager.Instance.ActiveCount > 0) { } this.CloseLoading(); MessageHelper.ShowTips($"分析完成。"); } catch (Exception ex) { this.CloseLoading(); LogAPI.Debug("地类图斑数据提取失败" + ex.Message); LogAPI.Debug("地类图斑数据提取失败" + ex.StackTrace); MessageHelper.ShowError($"地类图斑数据提取失败:{ex.Message}"); } finally { btn_oK.IsEnabled = true; btn_nO.IsEnabled = true; } } public void ComplateCallBack(object obj) { try { if (obj == null) return; CustomIDGParm param = obj as CustomIDGParm; param.analysisExport.Prompt = param.ErrorMessage; } catch (Exception ex) { throw ex; } } public object locObj = new object(); private CustomIDGParm InitData(object pThreadParm) { IFeatureClass BGFeatureClass = null; IFeatureClass tempBGFeatureClass = null; IFeatureLayer JCFeatureLayer = null; IFeatureClass outsideFeatureClass = null; ESRI.ArcGIS.Geodatabase.IWorkspace pWorkspace = null; IWorkspaceAPI JCAPI = null; IWorkspaceAPI BGAPI = null; IWorkspaceAPI tempBGAPI = null; IWorkspaceAPI ZLAPI = null; IFeatureLayer MultipartLayer = null; IFeatureLayer UnionLayer = null; IFeatureLayer BGLayer = null; IFeatureLayer CZCDYDLayer = null; GPParamClass gPParamClass = null; IQueryFilter queryFilter = new QueryFilterClass() { }; try { ThreadParam param = pThreadParm as ThreadParam; AnalysisExport analysisExport = param.analysisExport; #region 初始化工程模版 //if (!Overlap_AfterTreatment.IsNullOrEmpty()) //{ // string gdbpath = Overlap_AfterTreatment.Replace(@"\AfterTreatment", ""); // IWorkspaceAPI wsAPI = new WorkspaceAPI(gdbpath, WorkspaceTypeEnum.GDBFile); // IFeatureClassAPI classAPI = wsAPI.OpenFeatureClass("AfterTreatment"); // outsideFeatureClass = classAPI.FeatureClass; //} //else //{ IWorkspaceFactory wsf = new ShapefileWorkspaceFactory(); pWorkspace = wsf.OpenFromFile(analysisExport.ParengFolder, 0); IFeatureWorkspace pFeatureWorkspace = pWorkspace as IFeatureWorkspace; outsideFeatureClass = pFeatureWorkspace.OpenFeatureClass(analysisExport.FileName.Replace(".shp", "")); //} string temppath = analysisExport.OutputExcelPath + $"\\Temp\\{analysisExport.XZQDM}"; if (!Directory.Exists(temppath)) { Directory.CreateDirectory(temppath); } else { try { DelectDirect(temppath); } catch (Exception ex) { } } JCAPI = new WorkspaceAPI(analysisExport.JCSJPath, KGIS.Framework.AE.Enum.WorkspaceTypeEnum.GDBFile, true); JCFeatureLayer = new FeatureLayer() { FeatureClass = JCAPI.OpenFeatureClass("DLTB").FeatureClass }; //复制变更gdb DirectoryCopy(SysAppPath.GetCurrentAppPath() + "Template\\BGDB.gdb", temppath); string BGDatabase = System.IO.Path.Combine(temppath, "BGDB.gdb"); BGAPI = new WorkspaceAPI(BGDatabase, KGIS.Framework.AE.Enum.WorkspaceTypeEnum.GDBFile, true); GeoDBAPI.SetGeoDatasetSpatialReference(BGAPI.CurrentWorkspace, (JCFeatureLayer.FeatureClass as IGeoDataset).SpatialReference, 0.0001); //复制增量gdb DirectoryCopy(SysAppPath.GetCurrentAppPath() + "Template\\ZLDB.gdb", temppath); string ZLDatabase = System.IO.Path.Combine(temppath, "ZLDB.gdb"); //复制年末gdb DirectoryCopy(SysAppPath.GetCurrentAppPath() + "Template\\NMDB.gdb", temppath); string NMLDatabase = System.IO.Path.Combine(temppath, "NMDB.gdb"); ZLAPI = new WorkspaceAPI(ZLDatabase, KGIS.Framework.AE.Enum.WorkspaceTypeEnum.GDBFile, true); GeoDBAPI.SetGeoDatasetSpatialReference(ZLAPI.CurrentWorkspace, (JCFeatureLayer.FeatureClass as IGeoDataset).SpatialReference, 0.0001); DirectoryCopy(SysAppPath.GetCurrentAppPath() + "Template\\BGTJ.sqlite", temppath); File.Copy(SysAppPath.GetCurrentAppPath() + "Template\\BGTJ.sqlite", temppath + "\\BGTJ.sqlite", true); //复制BG_GDLXConfig.xml File.Copy(SysAppPath.GetCurrentAppPath() + "Template\\BG_GDLXConfig.xml", temppath + "\\BG_GDLXConfig.xml", true); #endregion BGFeatureClass = BGAPI.OpenFeatureClass("DLTBBG").FeatureClass; string nodeid = string.Empty; foreach (TestData item in RelatedCombox.SelectedItems.ToList()) nodeid += $"'{item.ItemType}',"; DirectoryCopy(SysAppPath.GetCurrentAppPath() + "Template\\BGDB.gdb", temppath + "\\temp"); string tempBGDatabase = System.IO.Path.Combine(temppath + "\\temp", "BGDB.gdb"); tempBGAPI = new WorkspaceAPI(tempBGDatabase, KGIS.Framework.AE.Enum.WorkspaceTypeEnum.GDBFile, true); GeoDBAPI.SetGeoDatasetSpatialReference(tempBGAPI.CurrentWorkspace, (JCFeatureLayer.FeatureClass as IGeoDataset).SpatialReference, 0.0001); IFeatureClassAPI fcSourceAPI = tempBGAPI.OpenFeatureClass("DLTBBG"); if (this.overlap.IsChecked == true) { if (GTDCY.IsChecked == true) { #region 根据sjdrly 擦除重复数据 1 国家提取 2自主提取 用sjdrly=1的 擦除sjdrly=2的数据 然后拆分多部件 IFeatureClassAPI sjdrly_1 = tempBGAPI.CreateFeatureClass("sjdrly1", fcSourceAPI.FeatureClass.FeatureDataset, (JCFeatureLayer.FeatureClass as IGeoDataset).SpatialReference, esriGeometryType.esriGeometryPolygon, outsideFeatureClass.Fields); IFeatureClassAPI sjdrly_2 = tempBGAPI.CreateFeatureClass("sjdrly2", fcSourceAPI.FeatureClass.FeatureDataset, (JCFeatureLayer.FeatureClass as IGeoDataset).SpatialReference, esriGeometryType.esriGeometryPolygon, outsideFeatureClass.Fields); IFeatureClassAPI fcAPI = new FeatureClassAPI(outsideFeatureClass); queryFilter.WhereClause = $"sdxz = '3' and nodeid in({nodeid.Substring(0, nodeid.Length - 1)}) and xzqdm='{analysisExport.XZQDM}' and sjdrly='1' "; fcAPI.FcToFc(sjdrly_1.FeatureClass, queryFilter, true); RepairGeo(sjdrly_1.FeatureClass); queryFilter.WhereClause = $"sdxz = '3' and nodeid in({nodeid.Substring(0, nodeid.Length - 1)}) and xzqdm='{analysisExport.XZQDM}' and sjdrly='2' "; fcAPI.FcToFc(sjdrly_2.FeatureClass, queryFilter, true); RepairGeo(sjdrly_2.FeatureClass); gPParamClass = new GPParamClass { FirstFeatureLayer = new FeatureLayer() { FeatureClass = sjdrly_1.FeatureClass, Name = "sjdrly1" }, SecondFeatureLayer = new FeatureLayer() { FeatureClass = sjdrly_2.FeatureClass, Name = "sjdrly2" }, OutFeatureClassPath = $"{tempBGDatabase}\\UnionLayer", IsGetOutPutFeature = true, GPType = EnumGPType.Union, }; GeoprocessorHelper.UnionAnalysis(gPParamClass, ref UnionLayer); #region 拆分多部件 gPParamClass = new GPParamClass(); gPParamClass.FirstFeatureLayer = UnionLayer; gPParamClass.OutFeatureClassPath = $"{tempBGDatabase}\\AfterTreatment"; gPParamClass.IsGetOutPutFeature = true; gPParamClass.GPType = EnumGPType.MultipartToSinglePath; GPHelper.Instance.ExeGPForProces(gPParamClass, ref MultipartLayer); outsideFeatureClass = MultipartLayer.FeatureClass; #endregion #endregion } } if (this.czc20x.IsChecked == true) { tempBGFeatureClass = tempBGAPI.OpenFeatureClass("DLTBBG").FeatureClass; if (GTDCY.IsChecked == true) { queryFilter.WhereClause = $"sdxz = '3' and nodeid in({nodeid.Substring(0, nodeid.Length - 1)}) and xzqdm='{analysisExport.XZQDM}' "; BGFWFcToFc(outsideFeatureClass, tempBGFeatureClass, queryFilter); } else if (this.JCTB.IsChecked == true) { queryFilter.WhereClause = $"xzqdm='{analysisExport.XZQDM}' ";//河北 BGFWFcToFc_0813(outsideFeatureClass, tempBGFeatureClass, queryFilter); } if (tempBGFeatureClass.FeatureCount(null) == 0) return null; #region 与基础城镇村Union 赋值CZC20属性 string templeteGDBPath = System.IO.Path.Combine(SysAppPath.GetCurrentAppPath(), "Template", "TempGDB.gdb"); string resultPath = System.IO.Path.Combine(temppath, "BGTB_CZCDYD"); if (!Directory.Exists(resultPath)) { Directory.CreateDirectory(resultPath); } string savePath = System.IO.Path.Combine(resultPath, "BGTB_CZCDYD" + ".gdb"); CopyDirectory(templeteGDBPath, savePath, true); string outPath = System.IO.Path.Combine(savePath, "BGTB_CZCDYD"); BGLayer = new FeatureLayer() { FeatureClass = tempBGFeatureClass, Name = "变更图斑" }; CZCDYDLayer = new FeatureLayer() { FeatureClass = JCAPI.OpenFeatureClass("CZCDYD").FeatureClass, Name = "城镇村" }; gPParamClass = new GPParamClass { FirstFeatureLayer = BGLayer, SecondFeatureLayer = CZCDYDLayer, OutFeatureClassPath = outPath, IsGetOutPutFeature = true, GPType = EnumGPType.Union, }; GPHelper.Instance.ExeGPForProces(gPParamClass, ref UnionLayer); #endregion #region 拆分多部件 MultipartLayer = null; gPParamClass = new GPParamClass(); gPParamClass.FirstFeatureLayer = UnionLayer; gPParamClass.OutFeatureClassPath = $"{savePath}\\BGTB_Multipart"; gPParamClass.IsGetOutPutFeature = true; gPParamClass.GPType = EnumGPType.MultipartToSinglePath; GPHelper.Instance.ExeGPForProces(gPParamClass, ref MultipartLayer); #endregion BGFcToFc(MultipartLayer.FeatureClass, BGFeatureClass, new QueryFilterClass() { WhereClause = $" FID_DLTBBG<>-1 and SHAPE_Area>1 " }); } else { if (this.JCTB.IsChecked == true) { queryFilter.WhereClause = $"xzqdm='{analysisExport.XZQDM}' ";//河北 BGFWFcToFc_0813(outsideFeatureClass, BGFeatureClass, queryFilter); } else if (this.GTDCY.IsChecked == true) { queryFilter.WhereClause = $"sdxz = '3' and nodeid in({nodeid.Substring(0, nodeid.Length - 1)}) and xzqdm='{analysisExport.XZQDM}' "; BGFWFcToFc(outsideFeatureClass, BGFeatureClass, queryFilter); } } if (BGFeatureClass.FeatureCount(null) == 0) return null; CustomIDGParm Parm = new CustomIDGParm(); IDGParameter mIDGParm = new IDGParameter(); ProjectInfo prjInfo = new ProjectInfo(); prjInfo.CODE = analysisExport.XZQDM; prjInfo.ProjDir = temppath; prjInfo.ProjName = analysisExport.XZQDM; prjInfo.ProjSuffix = ".KBG"; prjInfo.ZLDatabase = ZLDatabase; prjInfo.BGDatabase = BGDatabase; prjInfo.NMDatabase = NMLDatabase; prjInfo.JCKPath = analysisExport.JCSJPath; prjInfo.Save(); mIDGParm.StrProjInfo = System.IO.Path.Combine(prjInfo.ProjDir, prjInfo.ProjName + prjInfo.ProjSuffix); mIDGParm.ExeDLTB = true; mIDGParm.AllowPDFZ = true; mIDGParm.AllowUnion = true; mIDGParm.AutoCalcGDKCSX = true; mIDGParm.AutoSetGDLX = true; mIDGParm.ExeGDDB = false; mIDGParm.ExeZLHZ = true; Parm.analysisExport = analysisExport; Parm.PressParameter = mIDGParm; return Parm; } catch (Exception ex) { LogAPI.Debug(ex.Message); LogAPI.Debug(ex.StackTrace); throw ex; } finally { if (outsideFeatureClass != null) Marshal.ReleaseComObject(outsideFeatureClass); if (BGFeatureClass != null) Marshal.ReleaseComObject(BGFeatureClass); if (BGLayer != null) Marshal.ReleaseComObject(BGLayer); if (JCFeatureLayer != null) Marshal.ReleaseComObject(JCFeatureLayer); if (pWorkspace != null) Marshal.ReleaseComObject(pWorkspace); if (UnionLayer != null) Marshal.ReleaseComObject(UnionLayer); if (MultipartLayer != null) Marshal.ReleaseComObject(MultipartLayer); JCAPI?.CloseWorkspace(); BGAPI?.CloseWorkspace(); ZLAPI?.CloseWorkspace(); } } private CustomIDGParm InitData_DLTBGXGC(object pThreadParm) { IFeatureClass BGFeatureClass = null; IFeatureClass tempBGFeatureClass = null; IFeatureLayer JCFeatureLayer = null; IFeatureClass outsideFeatureClass = null; ESRI.ArcGIS.Geodatabase.IWorkspace pWorkspace = null; IWorkspaceAPI JCAPI = null; IWorkspaceAPI BGAPI = null; IWorkspaceAPI tempBGAPI = null; IWorkspaceAPI ZLAPI = null; IWorkspaceAPI outsideWorkspaceAPI = null; ITable dltbgxTb = null; IFeatureLayer MultipartLayer = null; IFeatureLayer UnionLayer = null; IFeatureLayer BGLayer = null; IFeatureLayer CZCDYDLayer = null; GPParamClass gPParamClass = null; IQueryFilter queryFilter = new QueryFilterClass() { }; try { ThreadParam param = pThreadParm as ThreadParam; AnalysisExport analysisExport = param.analysisExport; #region 初始化工程模版 if (analysisExport.FileName.EndsWith(".shp")) { IWorkspaceFactory wsf = new ShapefileWorkspaceFactory(); pWorkspace = wsf.OpenFromFile(analysisExport.ParengFolder, 0); IFeatureWorkspace pFeatureWorkspace = pWorkspace as IFeatureWorkspace; outsideFeatureClass = pFeatureWorkspace.OpenFeatureClass(analysisExport.FileName.Replace(".shp", "")); } else if (analysisExport.BGFWPath.EndsWith(".gdb")) { outsideWorkspaceAPI = new WorkspaceAPI(analysisExport.BGFWPath, KGIS.Framework.AE.Enum.WorkspaceTypeEnum.GDBFile, true); outsideFeatureClass = outsideWorkspaceAPI.OpenFeatureClass("DLTBGXGC").FeatureClass; } string temppath = analysisExport.OutputExcelPath + $"\\Temp\\{analysisExport.XZQDM}"; if (!Directory.Exists(temppath)) { Directory.CreateDirectory(temppath); } else { try { DelectDirect(temppath); } catch (Exception ex) { } } JCAPI = new WorkspaceAPI(analysisExport.JCSJPath, KGIS.Framework.AE.Enum.WorkspaceTypeEnum.GDBFile, true); JCFeatureLayer = new FeatureLayer() { FeatureClass = JCAPI.OpenFeatureClass("DLTB").FeatureClass }; //复制变更gdb DirectoryCopy(SysAppPath.GetCurrentAppPath() + "Template\\BGDB.gdb", temppath); string BGDatabase = System.IO.Path.Combine(temppath, "BGDB.gdb"); BGAPI = new WorkspaceAPI(BGDatabase, KGIS.Framework.AE.Enum.WorkspaceTypeEnum.GDBFile, true); GeoDBAPI.SetGeoDatasetSpatialReference(BGAPI.CurrentWorkspace, (JCFeatureLayer.FeatureClass as IGeoDataset).SpatialReference, 0.0001); //复制增量gdb DirectoryCopy(SysAppPath.GetCurrentAppPath() + "Template\\ZLDB.gdb", temppath); string ZLDatabase = System.IO.Path.Combine(temppath, "ZLDB.gdb"); ZLAPI = new WorkspaceAPI(ZLDatabase, KGIS.Framework.AE.Enum.WorkspaceTypeEnum.GDBFile, true); GeoDBAPI.SetGeoDatasetSpatialReference(ZLAPI.CurrentWorkspace, (JCFeatureLayer.FeatureClass as IGeoDataset).SpatialReference, 0.0001); DirectoryCopy(SysAppPath.GetCurrentAppPath() + "Template\\BGTJ.sqlite", temppath); File.Copy(SysAppPath.GetCurrentAppPath() + "Template\\BGTJ.sqlite", temppath + "\\BGTJ.sqlite", true); //复制BG_GDLXConfig.xml File.Copy(SysAppPath.GetCurrentAppPath() + "Template\\BG_GDLXConfig.xml", temppath + "\\BG_GDLXConfig.xml", true); #endregion DirectoryCopy(SysAppPath.GetCurrentAppPath() + "Template\\BGDB.gdb", temppath + "\\temp"); string tempBGDatabase = System.IO.Path.Combine(temppath + "\\temp", "BGDB.gdb"); tempBGAPI = new WorkspaceAPI(tempBGDatabase, KGIS.Framework.AE.Enum.WorkspaceTypeEnum.GDBFile, true); GeoDBAPI.SetGeoDatasetSpatialReference(tempBGAPI.CurrentWorkspace, (JCFeatureLayer.FeatureClass as IGeoDataset).SpatialReference, 0.0001); IFeatureClassAPI fcAPI = new FeatureClassAPI(outsideFeatureClass); IFeatureClassAPI DLTBGXGCAPI = ZLAPI.OpenFeatureClass("DLTBGXGC"); //fcAPI.FcToFc(DLTBGXGCAPI.FeatureClass, new QueryFilterClass() { WhereClause = $"xzqdm='{analysisExport.XZQDM}'" }, true); fcAPI.FcToFc(DLTBGXGCAPI.FeatureClass, null, true); CustomIDGParm Parm = new CustomIDGParm(); IDGParameter mIDGParm = new IDGParameter(); ProjectInfo prjInfo = new ProjectInfo(); prjInfo.CODE = analysisExport.XZQDM; prjInfo.ProjDir = temppath; prjInfo.ProjName = analysisExport.XZQDM; prjInfo.ProjSuffix = ".KBG"; prjInfo.ZLDatabase = ZLDatabase; prjInfo.BGDatabase = BGDatabase; prjInfo.JCKPath = analysisExport.JCSJPath; prjInfo.Save(); mIDGParm.StrProjInfo = System.IO.Path.Combine(prjInfo.ProjDir, prjInfo.ProjName + prjInfo.ProjSuffix); mIDGParm.ExeDLTB = false; mIDGParm.AllowPDFZ = false; mIDGParm.AllowUnion = false; mIDGParm.AutoCalcGDKCSX = false; mIDGParm.AutoSetGDLX = false; mIDGParm.ExeGDDB = false; mIDGParm.ExeZLHZ = true; Parm.analysisExport = analysisExport; Parm.PressParameter = mIDGParm; return Parm; } catch (Exception ex) { LogAPI.Debug(ex.Message); LogAPI.Debug(ex.StackTrace); throw ex; } finally { if (outsideFeatureClass != null) Marshal.ReleaseComObject(outsideFeatureClass); if (BGFeatureClass != null) Marshal.ReleaseComObject(BGFeatureClass); if (BGLayer != null) Marshal.ReleaseComObject(BGLayer); if (JCFeatureLayer != null) Marshal.ReleaseComObject(JCFeatureLayer); if (pWorkspace != null) Marshal.ReleaseComObject(pWorkspace); if (dltbgxTb != null) Marshal.ReleaseComObject(dltbgxTb); if (UnionLayer != null) Marshal.ReleaseComObject(UnionLayer); if (MultipartLayer != null) Marshal.ReleaseComObject(MultipartLayer); JCAPI?.CloseWorkspace(); BGAPI?.CloseWorkspace(); ZLAPI?.CloseWorkspace(); outsideWorkspaceAPI?.CloseWorkspace(); } } private CustomIDGParm InitData_DLTBGX(object pThreadParm) { IFeatureClass BGFeatureClass = null; IFeatureLayer JCFeatureLayer = null; IFeatureClass outsideFeatureClass = null; ESRI.ArcGIS.Geodatabase.IWorkspace pWorkspace = null; IWorkspaceAPI JCAPI = null; IWorkspaceAPI BGAPI = null; IWorkspaceAPI tempBGAPI = null; IWorkspaceAPI ZLAPI = null; IFeatureLayer BGLayer = null; IQueryFilter queryFilter = new QueryFilterClass() { }; try { ThreadParam param = pThreadParm as ThreadParam; AnalysisExport analysisExport = param.analysisExport; #region 初始化工程模版 IWorkspaceFactory wsf = new ShapefileWorkspaceFactory(); pWorkspace = wsf.OpenFromFile(analysisExport.ParengFolder, 0); IFeatureWorkspace pFeatureWorkspace = pWorkspace as IFeatureWorkspace; outsideFeatureClass = pFeatureWorkspace.OpenFeatureClass(analysisExport.FileName.Replace(".shp", "")); string temppath = analysisExport.OutputExcelPath + $"\\Temp\\{analysisExport.XZQDM}"; if (!Directory.Exists(temppath)) { Directory.CreateDirectory(temppath); } else { try { DelectDirect(temppath); } catch (Exception ex) { } } JCAPI = new WorkspaceAPI(analysisExport.JCSJPath, KGIS.Framework.AE.Enum.WorkspaceTypeEnum.GDBFile); JCFeatureLayer = new FeatureLayer() { FeatureClass = JCAPI.OpenFeatureClass("DLTB").FeatureClass }; //复制变更gdb DirectoryCopy(SysAppPath.GetCurrentAppPath() + "Template\\BGDB.gdb", temppath); string BGDatabase = System.IO.Path.Combine(temppath, "BGDB.gdb"); BGAPI = new WorkspaceAPI(BGDatabase, KGIS.Framework.AE.Enum.WorkspaceTypeEnum.GDBFile); GeoDBAPI.SetGeoDatasetSpatialReference(BGAPI.CurrentWorkspace, (JCFeatureLayer.FeatureClass as IGeoDataset).SpatialReference, 0.0001); //复制增量gdb DirectoryCopy(SysAppPath.GetCurrentAppPath() + "Template\\ZLDB.gdb", temppath); string ZLDatabase = System.IO.Path.Combine(temppath, "ZLDB.gdb"); ZLAPI = new WorkspaceAPI(ZLDatabase, KGIS.Framework.AE.Enum.WorkspaceTypeEnum.GDBFile, true); GeoDBAPI.SetGeoDatasetSpatialReference(ZLAPI.CurrentWorkspace, (JCFeatureLayer.FeatureClass as IGeoDataset).SpatialReference, 0.0001); DirectoryCopy(SysAppPath.GetCurrentAppPath() + "Template\\BGTJ.sqlite", temppath); File.Copy(SysAppPath.GetCurrentAppPath() + "Template\\BGTJ.sqlite", temppath + "\\BGTJ.sqlite", true); //复制BG_GDLXConfig.xml File.Copy(SysAppPath.GetCurrentAppPath() + "Template\\BG_GDLXConfig.xml", temppath + "\\BG_GDLXConfig.xml", true); //复制年末gdb DirectoryCopy(SysAppPath.GetCurrentAppPath() + "Template\\NMDB.gdb", temppath); string NMLDatabase = System.IO.Path.Combine(temppath, "NMDB.gdb"); #endregion DirectoryCopy(SysAppPath.GetCurrentAppPath() + "Template\\BGDB.gdb", temppath + "\\temp"); string tempBGDatabase = System.IO.Path.Combine(temppath + "\\temp", "BGDB.gdb"); tempBGAPI = new WorkspaceAPI(tempBGDatabase, KGIS.Framework.AE.Enum.WorkspaceTypeEnum.GDBFile, true); GeoDBAPI.SetGeoDatasetSpatialReference(tempBGAPI.CurrentWorkspace, (JCFeatureLayer.FeatureClass as IGeoDataset).SpatialReference, 0.0001); IFeatureClassAPI fcAPI = new FeatureClassAPI(outsideFeatureClass); IFeatureClassAPI IFeatureClassAPI = BGAPI.OpenFeatureClass("DLTBBG"); #region MyRegion IFeatureCursor insertCur = IFeatureClassAPI.FeatureClass.Insert(true); IFeatureBuffer gcBuf = IFeatureClassAPI.FeatureClass.CreateFeatureBuffer(); IFeature feature = null; IFeatureCursor S_Cursor = fcAPI.FeatureClass.Search(new QueryFilterClass() { WhereClause = $"xzqdm='{analysisExport.XZQDM}'" }, true); while ((feature = S_Cursor.NextFeature()) != null) { gcBuf.Shape = feature.ShapeCopy; for (int i = 0; i < IFeatureClassAPI.FeatureClass.Fields.FieldCount; i++) { IField field = IFeatureClassAPI.FeatureClass.Fields.Field[i]; if (!field.Editable || field.Name.Contains("SHAPE")) continue; string sFieldName = field.Name; int idx = feature.Fields.FindField(sFieldName); if (idx != -1) gcBuf.Value[i] = feature.Value[idx]; } insertCur.InsertFeature(gcBuf); } insertCur.Flush(); if (insertCur != null) Marshal.ReleaseComObject(insertCur); if (feature != null) Marshal.ReleaseComObject(feature); if (gcBuf != null) Marshal.ReleaseComObject(gcBuf); #endregion //fcAPI.FcToFc(IFeatureClassAPI.FeatureClass, new QueryFilterClass() { WhereClause = $"xzqdm='{analysisExport.XZQDM}'" }, true); IFeatureClassAPI.CloseFeatureClass(); CustomIDGParm Parm = new CustomIDGParm(); IDGParameter mIDGParm = new IDGParameter(); ProjectInfo prjInfo = new ProjectInfo(); prjInfo.CODE = analysisExport.XZQDM; prjInfo.ProjDir = temppath; prjInfo.ProjName = analysisExport.XZQDM; prjInfo.ProjSuffix = ".KBG"; prjInfo.ZLDatabase = ZLDatabase; prjInfo.BGDatabase = BGDatabase; prjInfo.NMDatabase = NMLDatabase; prjInfo.JCKPath = analysisExport.JCSJPath; prjInfo.Save(); mIDGParm.StrProjInfo = System.IO.Path.Combine(prjInfo.ProjDir, prjInfo.ProjName + prjInfo.ProjSuffix); mIDGParm.ExeDLTB = true; mIDGParm.AllowPDFZ = true; mIDGParm.AllowUnion = true; mIDGParm.AutoCalcGDKCSX = true; mIDGParm.AutoSetGDLX = true; mIDGParm.ExeGDDB = false; mIDGParm.ExeZLHZ = true; Parm.analysisExport = analysisExport; Parm.PressParameter = mIDGParm; return Parm; } catch (Exception ex) { LogAPI.Debug(ex.Message); LogAPI.Debug(ex.StackTrace); throw ex; } finally { if (outsideFeatureClass != null) Marshal.ReleaseComObject(outsideFeatureClass); if (BGLayer != null) Marshal.ReleaseComObject(BGLayer); if (JCFeatureLayer != null) Marshal.ReleaseComObject(JCFeatureLayer); if (pWorkspace != null) Marshal.ReleaseComObject(pWorkspace); if (BGFeatureClass != null) Marshal.ReleaseComObject(BGFeatureClass); JCAPI?.CloseWorkspace(); BGAPI?.CloseWorkspace(); ZLAPI?.CloseWorkspace(); } } public void RepairGeo(IFeatureClass pFc) { Geoprocessor gp = new Geoprocessor(); try { RepairGeometry repairgeo = new RepairGeometry(); repairgeo.in_features = pFc; //repairgeo.out_feature_class = outFC; repairgeo.delete_null = "TRUE"; IGeoProcessorResult tGeoResult = (IGeoProcessorResult)gp.Execute(repairgeo, null); if (tGeoResult == null || tGeoResult.Status != esriJobStatus.esriJobSucceeded) { //LogAPI.Debug("检查图形失败:"); throw new Exception(ReturnMessages(gp)); } string msg = ReturnMessages(gp); } catch (Exception ex) { throw new Exception(ReturnMessages(gp)); } } /// /// 获取GP任务执行信息 /// /// /// private string ReturnMessages(Geoprocessor gp) { string ms = ""; if (gp.MessageCount > 0) { for (int Count = 0; Count <= gp.MessageCount - 1; Count++) { ms += "$" + gp.GetMessage(Count) + "\n\n"; } } return ms; } public static void CopyDirectory(string SourcePath, string DestinationPath, bool overwriteexisting) { try { SourcePath = SourcePath.EndsWith(@"\") ? SourcePath : SourcePath + @"\"; DestinationPath = DestinationPath.EndsWith(@"\") ? DestinationPath : DestinationPath + @"\"; if (Directory.Exists(SourcePath)) { if (Directory.Exists(DestinationPath) == false) Directory.CreateDirectory(DestinationPath); foreach (string fls in Directory.GetFiles(SourcePath)) { FileInfo flinfo = new FileInfo(fls); flinfo.CopyTo(DestinationPath + flinfo.Name, overwriteexisting); } foreach (string drs in Directory.GetDirectories(SourcePath)) { DirectoryInfo drinfo = new DirectoryInfo(drs); CopyDirectory(drs, DestinationPath + drinfo.Name, overwriteexisting); } } } catch (Exception ex) { throw ex; } } private void ExecuteBG(object pThreadParm) { IRDBHelper rdbHelper = null; try { if (pThreadParm == null) return; CustomIDGParm param = pThreadParm as CustomIDGParm; ProcesHelper.Instance.ProgressHandle = (o) => { //this.UpdateMsg(o.ToString()); }; string result = ProcesHelper.Instance.ExeGPForProces2(param.PressParameter); if (result.Contains("Err")) { //throw new Exception(result); param.ErrorMessage = result; } else { lock (locObj) { #region 导出土地利用现状变更表 StatisticalReportClass statistical = new StatisticalReportClass(); FileInfo proFile = new FileInfo(param.PressParameter.StrProjInfo); //读取-导入年初数据报表 statistical.ExcelToDataTable(proFile.DirectoryName, param.analysisExport.JCSJExcelPath, param.analysisExport.XZQDM); //导出报表 string outExcelPath = param.analysisExport.OutputExcelPath + "\\县级统计表"; if (!Directory.Exists(outExcelPath)) { Directory.CreateDirectory(outExcelPath); } var outExcel = outExcelPath + $"\\2022({param.analysisExport.XZQDM})土地利用现状变更表.xlsx"; statistical.ExportTDLYXZBGB(outExcel, param.analysisExport, proFile.DirectoryName); //2023耕地流向汇总统计表.xlsx FileInfo fileInfo = new FileInfo(param.analysisExport.OutputExcelPath + "\\2023耕地流向汇总统计表.xlsx"); if (!fileInfo.Exists) { File.Copy(SysAppPath.GetCurrentAppPath() + "Template\\2023耕地流向汇总统计表.xlsx", param.analysisExport.OutputExcelPath + "\\2023耕地流向汇总统计表.xlsx"); } #region 统计表写入 //获取当前区县在统计表中的位置 var ExcelCell_X = 0; using (var streamData = File.Open(fileInfo.FullName, FileMode.Open, FileAccess.Read)) { using (var readerData = ExcelReaderFactory.CreateReader(streamData)) { var tjresult = readerData.AsDataSet(); DataTable tjdataTable = tjresult.Tables[0]; if (tjdataTable != null && tjdataTable.Rows.Count > 0) { foreach (DataRow item in tjdataTable.Rows) { if (param.analysisExport.XZQDM.ToTrim() == item["column0"].ToTrim()) { ExcelCell_X = tjdataTable.Rows.IndexOf(item); break; } } } } } #endregion string dbPath = proFile.DirectoryName + @"\BGTJ.sqlite"; rdbHelper = RDBFactory.CreateDbHelper("Data Source=" + dbPath, DatabaseType.SQLite); #region 默认 //DataTable table = rdbHelper.ExecuteDatatable("table", @" select substr(nyd,0,instr(nyd,'-'))|| '-' || sum(replace(nyd, rtrim(nyd, replace(nyd, '-', '')), '')) from ( // select //case //when bgh = '0201' then '9' || '-' || BGMJ //when bgh = '0204' then '10' || '-' || BGMJ //when bgh = '0301' then '12' || '-' || BGMJ //when bgh = '0305' then '13' || '-' || BGMJ //when bgh = '0307' then '14' || '-' || BGMJ //when bgh = '1202' then '15' || '-' || BGMJ //when bgh = '1006' then '16' || '-' || BGMJ //when bgh = '0401' then '17' || '-' || BGMJ //when bgh = '0403' then '18' || '-' || BGMJ //when bgh = '0304' then '19' || '-' || BGMJ //when bgh = '0306' then '20' || '-' || BGMJ //when bgh = '0402' then '21' || '-' || BGMJ //when bgh = '1103' then '22' || '-' || BGMJ //when bgh = '1104' then '23' || '-' || BGMJ //when bgh = '1107' then '24' || '-' || BGMJ //when bgh = '201' then '27' || '-' || BGMJ //when bgh = '202' then '28' || '-' || BGMJ //when bgh = '203' then '29' || '-' || BGMJ //when bgh = '204' then '30' || '-' || BGMJ //when bgh = '205' then '31' || '-' || BGMJ //when bgh = '1001' then '33' || '-' || BGMJ //when bgh = '1002' then '34' || '-' || BGMJ //when bgh = '1003' then '35' || '-' || BGMJ //when bgh = '1007' then '36' || '-' || BGMJ //when bgh = '1008' then '37' || '-' || BGMJ //when bgh = '1009' then '38' || '-' || BGMJ //when bgh = '1109' then '39' || '-' || BGMJ //when bgh = '0404' then '41' || '-' || BGMJ //when bgh = '1101' then '42' || '-' || BGMJ //when bgh = '1102' then '43' || '-' || BGMJ //when bgh = '1106' then '44' || '-' || BGMJ //when bgh = '1108' then '45' || '-' || BGMJ //when bgh = '1204' then '46' || '-' || BGMJ //when bgh = '1205' then '47' || '-' || BGMJ //when bgh = '1206' then '48' || '-' || BGMJ //when bgh = '1207' then '49' || '-' || BGMJ //else '' END NYD // from( // select bgq, bgh, SUM(BGMJ)BGMJ from( // select bgq, bgh, SUM(BGMJ)BGMJ from // ( // select // --case when bgq in ('1001', '1002', '1003', '1007', '1008', '1009', '1109')or substr(bgq, 1, 2) = '20' THEN 'JSYD' ELSE bgq END // bgq, // --case when bgh in ('1001', '1002', '1003', '1007', '1008', '1009', '1109')or substr(bgh, 1, 2) = '20' THEN 'JSYD' ELSE bgh END // bgh, BGMJ from // ( // select case when BGQCZCSXM = '空' then BGQDLBM else BGQCZCSXM end bgq,case when BGHCZCSXM = '空' then BGHDLBM else BGHCZCSXM end bgh,BGMJ from(select substr(BGQDLBM, 1, 4) BGQDLBM,substr(BGQCZCSXM, 1, 3) BGQCZCSXM, substr(BGHDLBM, 1, 4) BGHDLBM,substr(BGHCZCSXM, 1, 3) BGHCZCSXM,BGMJ, XZQTZLX from JCTJB_GQ )A )A // )A WHERE bgq<> bgh and(bgq = 'JSYD' OR bgh = 'JSYD') GROUP BY bgq,bgh // union ALL // select bgq,bgh,SUM(BGMJ)BGMJ from // ( // select case when BGQCZCSXM = '空' then BGQDLBM else BGQCZCSXM end bgq,case when BGHCZCSXM = '空' then BGHDLBM else BGHCZCSXM end bgh,BGMJ from(select substr(BGQDLBM, 1, 4) BGQDLBM,substr(BGQCZCSXM, 1, 3) BGQCZCSXM, substr(BGHDLBM, 1, 4) BGHDLBM,substr(BGHCZCSXM, 1, 3) BGHCZCSXM,BGMJ, XZQTZLX from JCTJB_GQ )A // )A WHERE bgq<> bgh GROUP BY bgq,bgh // )A GROUP BY bgq, bgh // )A WHERE substr(bgq, 1, 2) = '01' and substr(bgh, 1, 2)<> '01' //)a WHERE length(nyd) > 0 GROUP by substr(nyd, 1, 2) // union all //select substr(nyd,0,instr(nyd,'-'))|| '-' || sum(replace(nyd, rtrim(nyd, replace(nyd, '-', '')), '')) from( // select //case //when bgq = '0201' then '53' || '-' || BGMJ //when bgq = '0204' then '54' || '-' || BGMJ //when bgq = '0301' then '56' || '-' || BGMJ //when bgq = '0305' then '57' || '-' || BGMJ //when bgq = '0307' then '58' || '-' || BGMJ //when bgq = '1202' then '59' || '-' || BGMJ //when bgq = '1006' then '60' || '-' || BGMJ //when bgq = '0401' then '61' || '-' || BGMJ //when bgq = '0403' then '62' || '-' || BGMJ //when bgq = '0304' then '63' || '-' || BGMJ //when bgq = '0306' then '64' || '-' || BGMJ //when bgq = '0402' then '65' || '-' || BGMJ //when bgq = '1103' then '66' || '-' || BGMJ //when bgq = '1104' then '67' || '-' || BGMJ //when bgq = '1107' then '68' || '-' || BGMJ //when bgq = '201' then '71' || '-' || BGMJ //when bgq = '202' then '72' || '-' || BGMJ //when bgq = '203' then '73' || '-' || BGMJ //when bgq = '204' then '74' || '-' || BGMJ //when bgq = '205' then '75' || '-' || BGMJ //when bgq = '1001' then '77' || '-' || BGMJ //when bgq = '1002' then '78' || '-' || BGMJ //when bgq = '1003' then '79' || '-' || BGMJ //when bgq = '1007' then '80' || '-' || BGMJ //when bgq = '1008' then '81' || '-' || BGMJ //when bgq = '1009' then '82' || '-' || BGMJ //when bgq = '1109' then '83' || '-' || BGMJ //when bgq = '0404' then '85' || '-' || BGMJ //when bgq = '1101' then '86' || '-' || BGMJ //when bgq = '1102' then '87' || '-' || BGMJ //when bgq = '1106' then '88' || '-' || BGMJ //when bgq = '1108' then '89' || '-' || BGMJ //when bgq = '1204' then '90' || '-' || BGMJ //when bgq = '1205' then '91' || '-' || BGMJ //when bgq = '1206' then '92' || '-' || BGMJ //when bgq = '1207' then '93' || '-' || BGMJ //else '' END NYD // from( // select bgq, bgh, SUM(BGMJ)BGMJ from( // select bgq, bgh, SUM(BGMJ)BGMJ from // ( // select // --case when bgq in ('1001', '1002', '1003', '1007', '1008', '1009', '1109')or substr(bgq, 1, 2) = '20' THEN 'JSYD' ELSE bgq END // bgq, // --case when bgh in ('1001', '1002', '1003', '1007', '1008', '1009', '1109')or substr(bgh, 1, 2) = '20' THEN 'JSYD' ELSE bgh END // bgh, BGMJ from // ( // select case when BGQCZCSXM = '空' then BGQDLBM else BGQCZCSXM end bgq,case when BGHCZCSXM = '空' then BGHDLBM else BGHCZCSXM end bgh,BGMJ from(select substr(BGQDLBM, 1, 4) BGQDLBM,substr(BGQCZCSXM, 1, 3) BGQCZCSXM, substr(BGHDLBM, 1, 4) BGHDLBM,substr(BGHCZCSXM, 1, 3) BGHCZCSXM,BGMJ, XZQTZLX from JCTJB_GQ )A )A // )A WHERE bgq<> bgh and(bgq = 'JSYD' OR bgh = 'JSYD') GROUP BY bgq,bgh // union ALL // select bgq,bgh,SUM(BGMJ)BGMJ from // ( // select case when BGQCZCSXM = '空' then BGQDLBM else BGQCZCSXM end bgq,case when BGHCZCSXM = '空' then BGHDLBM else BGHCZCSXM end bgh,BGMJ from(select substr(BGQDLBM, 1, 4) BGQDLBM,substr(BGQCZCSXM, 1, 3) BGQCZCSXM, substr(BGHDLBM, 1, 4) BGHDLBM,substr(BGHCZCSXM, 1, 3) BGHCZCSXM,BGMJ, XZQTZLX from JCTJB_GQ )A // )A WHERE bgq<> bgh GROUP BY bgq,bgh // )A GROUP BY bgq, bgh // )A WHERE substr(bgq, 1, 2) <> '01' and substr(bgh, 1, 2)= '01' //)a WHERE length(nyd) > 0 GROUP by substr(nyd, 1, 2) ", true); #endregion #region 宁波/陕西 DataTable table = rdbHelper.ExecuteDatatable("table", @" select substr(nyd,0,instr(nyd,'-'))|| '-' || sum(replace(nyd, rtrim(nyd, replace(nyd, '-', '')), '')) from ( select case when bgh = '0303' then '9' || '-' || BGMJ when bgh = '0304' then '10' || '-' || BGMJ when bgh = '0306' then '11' || '-' || BGMJ when bgh = '0402' then '12' || '-' || BGMJ when bgh = '0101' then '14' || '-' || BGMJ when bgh = '0102' then '15' || '-' || BGMJ when bgh = '0103' then '16' || '-' || BGMJ when bgh = '0201' then '18' || '-' || BGMJ when bgh = '0202' then '19' || '-' || BGMJ when bgh = '0203' then '20' || '-' || BGMJ when bgh = '0204' then '21' || '-' || BGMJ when bgh = '0301' then '23' || '-' || BGMJ when bgh = '0302' then '24' || '-' || BGMJ when bgh = '0305' then '25' || '-' || BGMJ when bgh = '0307' then '26' || '-' || BGMJ when bgh = '0401' then '28' || '-' || BGMJ when bgh = '0403' then '29' || '-' || BGMJ when bgh = '1006' then '30' || '-' || BGMJ when bgh = '1103' then '32' || '-' || BGMJ when bgh = '1104' then '33' || '-' || BGMJ when bgh = '1107' then '34' || '-' || BGMJ when bgh = '1202' then '36' || '-' || BGMJ when bgh = '1203' then '37' || '-' || BGMJ when bgh = '201' then '40' || '-' || BGMJ when bgh = '202' then '41' || '-' || BGMJ when bgh = '203' then '42' || '-' || BGMJ when bgh = '204' then '43' || '-' || BGMJ when bgh = '205' then '44' || '-' || BGMJ when bgh = '1001' then '46' || '-' || BGMJ when bgh = '1002' then '47' || '-' || BGMJ when bgh = '1003' then '48' || '-' || BGMJ when bgh = '1007' then '49' || '-' || BGMJ when bgh = '1008' then '50' || '-' || BGMJ when bgh = '1009' then '51' || '-' || BGMJ when bgh = '1109' then '52' || '-' || BGMJ when bgh = '1105' then '55' || '-' || BGMJ when bgh = '1106' then '56' || '-' || BGMJ when bgh = '1108' then '57' || '-' || BGMJ when bgh = '0404' then '58' || '-' || BGMJ when bgh = '1101' then '60' || '-' || BGMJ when bgh = '1102' then '61' || '-' || BGMJ when bgh = '1110' then '62' || '-' || BGMJ when bgh = '1204' then '64' || '-' || BGMJ when bgh = '1205' then '65' || '-' || BGMJ when bgh = '1206' then '66' || '-' || BGMJ when bgh = '1207' then '67' || '-' || BGMJ else '' END NYD from( select bgq, bgh, SUM(BGMJ)BGMJ from( select bgq, bgh, SUM(BGMJ)BGMJ from ( select --case when bgq in ('1001', '1002', '1003', '1007', '1008', '1009', '1109')or substr(bgq, 1, 2) = '20' THEN 'JSYD' ELSE bgq END bgq, --case when bgh in ('1001', '1002', '1003', '1007', '1008', '1009', '1109')or substr(bgh, 1, 2) = '20' THEN 'JSYD' ELSE bgh END bgh, BGMJ from ( select case when BGQCZCSXM = '空' then BGQDLBM else BGQCZCSXM end bgq,case when BGHCZCSXM = '空' then BGHDLBM else BGHCZCSXM end bgh,BGMJ from(select substr(BGQDLBM, 1, 4) BGQDLBM,substr(BGQCZCSXM, 1, 3) BGQCZCSXM, substr(BGHDLBM, 1, 4) BGHDLBM,substr(BGHCZCSXM, 1, 3) BGHCZCSXM,BGMJ, XZQTZLX from JCTJB_GQ )A )A )A WHERE bgq<> bgh and(bgq = 'JSYD' OR bgh = 'JSYD') GROUP BY bgq,bgh union ALL select bgq,bgh,SUM(BGMJ)BGMJ from ( select case when BGQCZCSXM = '空' then BGQDLBM else BGQCZCSXM end bgq,case when BGHCZCSXM = '空' then BGHDLBM else BGHCZCSXM end bgh,BGMJ from(select substr(BGQDLBM, 1, 4) BGQDLBM,substr(BGQCZCSXM, 1, 3) BGQCZCSXM, substr(BGHDLBM, 1, 4) BGHDLBM,substr(BGHCZCSXM, 1, 3) BGHCZCSXM,BGMJ, XZQTZLX from JCTJB_GQ )A )A WHERE bgq<> bgh GROUP BY bgq,bgh )A GROUP BY bgq, bgh )A WHERE substr(bgq, 1, 2) = '01' and substr(bgh, 1, 2)<> '01' )a WHERE length(nyd) > 0 GROUP by substr(nyd, 1, 2) union all select substr(nyd,0,instr(nyd,'-'))|| '-' || sum(replace(nyd, rtrim(nyd, replace(nyd, '-', '')), '')) from( select case when bgq = '0303' then '71' || '-' || BGMJ when bgq = '0304' then '70' || '-' || BGMJ when bgq = '0306' then '73' || '-' || BGMJ when bgq = '0402' then '74' || '-' || BGMJ when bgq = '0101' then '76' || '-' || BGMJ when bgq = '0102' then '77' || '-' || BGMJ when bgq = '0103' then '78' || '-' || BGMJ when bgq = '0201' then '80' || '-' || BGMJ when bgq = '0202' then '81' || '-' || BGMJ when bgq = '0203' then '82' || '-' || BGMJ when bgq = '0204' then '83' || '-' || BGMJ when bgq = '0301' then '85' || '-' || BGMJ when bgq = '0302' then '86' || '-' || BGMJ when bgq = '0305' then '87' || '-' || BGMJ when bgq = '0307' then '88' || '-' || BGMJ when bgq = '0401' then '90' || '-' || BGMJ when bgq = '0403' then '91' || '-' || BGMJ when bgq = '1006' then '92' || '-' || BGMJ when bgq = '1103' then '94' || '-' || BGMJ when bgq = '1104' then '95' || '-' || BGMJ when bgq = '1107' then '96' || '-' || BGMJ when bgq = '1202' then '98' || '-' || BGMJ when bgq = '1203' then '99' || '-' || BGMJ when bgq = '201' then '102' || '-' || BGMJ when bgq = '202' then '103' || '-' || BGMJ when bgq = '203' then '104' || '-' || BGMJ when bgq = '204' then '105' || '-' || BGMJ when bgq = '205' then '106' || '-' || BGMJ when bgq = '1001' then '108' || '-' || BGMJ when bgq = '1002' then '109' || '-' || BGMJ when bgq = '1003' then '110' || '-' || BGMJ when bgq = '1007' then '111' || '-' || BGMJ when bgq = '1008' then '112' || '-' || BGMJ when bgq = '1009' then '113' || '-' || BGMJ when bgq = '1109' then '114' || '-' || BGMJ when bgq = '1105' then '117' || '-' || BGMJ when bgq = '1106' then '118' || '-' || BGMJ when bgq = '1108' then '119' || '-' || BGMJ when bgq = '0404' then '120' || '-' || BGMJ when bgq = '1101' then '122' || '-' || BGMJ when bgq = '1102' then '123' || '-' || BGMJ when bgq = '1110' then '124' || '-' || BGMJ when bgq = '1204' then '126' || '-' || BGMJ when bgq = '1205' then '127' || '-' || BGMJ when bgq = '1206' then '128' || '-' || BGMJ when bgq = '1207' then '129' || '-' || BGMJ else '' END NYD from( select bgq, bgh, SUM(BGMJ)BGMJ from( select bgq, bgh, SUM(BGMJ)BGMJ from ( select --case when bgq in ('1001', '1002', '1003', '1007', '1008', '1009', '1109')or substr(bgq, 1, 2) = '20' THEN 'JSYD' ELSE bgq END bgq, --case when bgh in ('1001', '1002', '1003', '1007', '1008', '1009', '1109')or substr(bgh, 1, 2) = '20' THEN 'JSYD' ELSE bgh END bgh, BGMJ from ( select case when BGQCZCSXM = '空' then BGQDLBM else BGQCZCSXM end bgq,case when BGHCZCSXM = '空' then BGHDLBM else BGHCZCSXM end bgh,BGMJ from(select substr(BGQDLBM, 1, 4) BGQDLBM,substr(BGQCZCSXM, 1, 3) BGQCZCSXM, substr(BGHDLBM, 1, 4) BGHDLBM,substr(BGHCZCSXM, 1, 3) BGHCZCSXM,BGMJ, XZQTZLX from JCTJB_GQ )A )A )A WHERE bgq<> bgh and(bgq = 'JSYD' OR bgh = 'JSYD') GROUP BY bgq,bgh union ALL select bgq,bgh,SUM(BGMJ)BGMJ from ( select case when BGQCZCSXM = '空' then BGQDLBM else BGQCZCSXM end bgq,case when BGHCZCSXM = '空' then BGHDLBM else BGHCZCSXM end bgh,BGMJ from(select substr(BGQDLBM, 1, 4) BGQDLBM,substr(BGQCZCSXM, 1, 3) BGQCZCSXM, substr(BGHDLBM, 1, 4) BGHDLBM,substr(BGHCZCSXM, 1, 3) BGHCZCSXM,BGMJ, XZQTZLX from JCTJB_GQ )A )A WHERE bgq<> bgh GROUP BY bgq,bgh )A GROUP BY bgq, bgh )A WHERE substr(bgq, 1, 2) <> '01' and substr(bgh, 1, 2)= '01' )a WHERE length(nyd) > 0 GROUP by substr(nyd, 1, 3) ", true); #endregion Workbook workbook = new Workbook(fileInfo.FullName); //工作簿 Worksheet sheet = workbook.Worksheets[0]; //工作表 foreach (DataRow item in table.Rows) { var ExcelCell_Y = item[0].ToTrim().Split('-')[0].ToInt(); var Cells_Value = item[0].ToTrim().Split('-')[1].ToDouble(); Cells cells = sheet.Cells;//单元格 cells[ExcelCell_X, ExcelCell_Y].Value = Cells_Value; } workbook.Save(fileInfo.FullName); #endregion param.ErrorMessage = "完成"; } } } catch (Exception ex) { LogAPI.Debug(ex.Message); LogAPI.Debug(ex.StackTrace); throw ex; } finally { if (rdbHelper != null) rdbHelper.DisConnect(); } } public static void SetFileToDisk(int Cells_X, int Cells_Y, string path, double Cells_Value) { try { Workbook workbook = new Workbook(path); //工作簿 Worksheet sheet = workbook.Worksheets[0]; //工作表 Cells cells = sheet.Cells;//单元格 cells[Cells_X, Cells_Y].Value = Cells_Value; workbook.Save(path); } catch (Exception exc) { System.Windows.MessageBox.Show(exc.Message); } } 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 private void txt_execute_MouseLeftButtonDown(object sender, System.Windows.Input.MouseButtonEventArgs e) { } private void chkSelectedAll_EditValueChanged(object sender, DevExpress.Xpf.Editors.EditValueChangedEventArgs e) { try { if (this.ListData != null && this.ListData.Count > 0) { bool check = (sender as DevExpress.Xpf.Editors.CheckEdit).IsChecked == null ? false : bool.Parse((sender as DevExpress.Xpf.Editors.CheckEdit).IsChecked.Value.ToString()); this.ListData.ForEach(x => x.IsChecked = check); } } catch (Exception ex) { MessageHelper.ShowError("全选发生异常:" + ex.Message); } } /// /// 通过IDataStatistics获取图层指定字段唯一值 /// /// /// /// 指定字段所有唯一值 private List GetLayerUniqueFieldValueByDataStatistics(IFeatureClass featureClass, string fieldName) { try { List arrValues = new List(); IQueryFilter pQueryFilter = new QueryFilterClass(); IFeatureCursor pFeatureCursor = null; pQueryFilter.SubFields = fieldName; pFeatureCursor = featureClass.Search(pQueryFilter, true); IDataStatistics pDataStati = new DataStatisticsClass(); pDataStati.Field = fieldName; pDataStati.Cursor = (ICursor)pFeatureCursor; IEnumerator pEnumerator = pDataStati.UniqueValues; pEnumerator.Reset(); while (pEnumerator.MoveNext()) { object pObj = pEnumerator.Current; arrValues.Add(pObj.ToString()); } arrValues.Sort(); return arrValues; } catch (Exception ex) { LogAPI.Debug("GetLayerUniqueFieldValueByDataStatistics异常:" + ex.Message); LogAPI.Debug("GetLayerUniqueFieldValueByDataStatistics异常:" + ex.StackTrace); throw ex; } } public bool DirectoryCopy(string sourceDir, string targetDirPath) { try { if (!Directory.Exists(sourceDir)) return false; string targetDir = targetDirPath + "\\" + System.IO.Path.GetFileName(sourceDir); if (!Directory.Exists(targetDir)) Directory.CreateDirectory(targetDir); // 文件及文件夹名称数组 string[] dirColl = Directory.GetDirectories(sourceDir); string[] fileColl = Directory.GetFiles(sourceDir); // 便利所有文件 if (fileColl.Length > 0) { string fileName; foreach (string fileDir in fileColl) { fileName = System.IO.Path.GetFileName(fileDir); File.Copy(sourceDir + "\\" + fileName, targetDir + "\\" + fileName, true); } } // 遍历所有文件夹 if (dirColl.Length > 0) { string folderName; foreach (string dir in dirColl) { folderName = System.IO.Path.GetFileName(dir); // 递归调用 Directory.CreateDirectory(targetDir + "\\" + folderName); DirectoryCopy(dir, targetDir + "\\" + folderName); } } return true; } catch (Exception ex) { LogAPI.Debug("新建工程页面中,文件夹复制时失败,异常原因: " + ex + " ; "); return false; throw; } } public virtual 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; } } /// /// /// /// 数据源 /// 目标数据 /// 筛选条件 /// public bool BGFWFcToFc(IFeatureClass sourceFeatureClass, IFeatureClass targetFeatureClass, IQueryFilter pFilter) { IFeatureCursor S_Cursor = null; IFeatureCursor T_Cursor = null; try { if (sourceFeatureClass == null || targetFeatureClass == null) return false; IFeatureClassLoad pFclsLoad = targetFeatureClass as IFeatureClassLoad; if (pFclsLoad != null) pFclsLoad.LoadOnlyMode = true; //此处写编辑的代码 S_Cursor = sourceFeatureClass.Search(pFilter, true); IFeature f = null; T_Cursor = targetFeatureClass.Insert(true); IFeatureBuffer buffer = targetFeatureClass.CreateFeatureBuffer(); var s_ihcbgdl = sourceFeatureClass.FindField("hcbgdl"); var s_idlbm = sourceFeatureClass.FindField("dlbm"); var s_ihcbgdl_1 = sourceFeatureClass.FindField("hcbgdl_1"); var s_izzsx = sourceFeatureClass.FindField("zzsx"); var s_izzsx_1 = sourceFeatureClass.FindField("zzsx_1"); var s_igdlx = sourceFeatureClass.FindField("gdlx"); var s_igdlx_1 = sourceFeatureClass.FindField("gdlx_1"); var s_ihfsx = sourceFeatureClass.FindField("hfsx"); var s_ihfsx_1 = sourceFeatureClass.FindField("hfsx_1"); var s_itblx = sourceFeatureClass.FindField("tblx"); var s_itblx_1 = sourceFeatureClass.FindField("tblx_1"); var s_itbbsm = sourceFeatureClass.FindField("tbbsm"); var s_itbbsm_1 = sourceFeatureClass.FindField("tbbsm_1"); var s_iczcsxm = sourceFeatureClass.FindField("czcsxm"); var s_iczcsxm_1 = sourceFeatureClass.FindField("czcsxm_1"); var s_isjdrly1 = sourceFeatureClass.FindField("FID_sjdrly1"); var t_idlbm = targetFeatureClass.FindField("dlbm"); var t_izzsxdm = targetFeatureClass.FindField("zzsxdm"); var t_igdlx = targetFeatureClass.FindField("gdlx"); var t_iBSM = targetFeatureClass.FindField("tbbsm"); var t_iCZCSXM = targetFeatureClass.FindField("czcsxm"); List tBLXConverts = TBLXConvert(); while ((f = S_Cursor.NextFeature()) != null) { bool setdlbm = true; string sjdrly1 = string.Empty; if (s_isjdrly1 > 0) { sjdrly1 = f.Value[s_isjdrly1].ToTrim(); } if (sjdrly1 == "-1") { if (s_itblx_1 > 0 && tBLXConverts.Count > 0) { string tblx = f.Value[s_itblx_1].ToTrim(); var _TBLXConvert = tBLXConverts.FirstOrDefault(x => x.FieldValue == tblx); if (_TBLXConvert != null) { if (string.IsNullOrEmpty(f.Value[s_ihcbgdl_1].ToTrim())) { buffer.Value[t_idlbm] = _TBLXConvert.DLBM; setdlbm = false; } } } buffer.Shape = f.ShapeCopy; //hcbgdl---dlbm //zzsx ---zzsxdm //gdlx---gdlx //hfsx---zzsxdm if (setdlbm) buffer.Value[t_idlbm] = f.Value[s_ihcbgdl_1]; buffer.Value[t_igdlx] = f.Value[s_igdlx_1]; var zzsx = f.Value[s_izzsx_1].ToTrim(); if (!string.IsNullOrEmpty(zzsx)) buffer.Value[t_izzsxdm] = zzsx; else buffer.Value[t_izzsxdm] = f.Value[s_ihfsx_1]; if (s_iczcsxm_1 > 0) { buffer.Value[t_iCZCSXM] = f.Value[s_iczcsxm_1]; } buffer.Value[t_iBSM] = f.Value[s_itbbsm_1]; } else { if (s_itblx > 0 && tBLXConverts.Count > 0) { string tblx = f.Value[s_itblx].ToTrim(); var _TBLXConvert = tBLXConverts.FirstOrDefault(x => x.FieldValue == tblx); if (_TBLXConvert != null) { if (s_ihcbgdl > 0) { if (string.IsNullOrEmpty(f.Value[s_ihcbgdl].ToTrim())) { buffer.Value[t_idlbm] = _TBLXConvert.DLBM; setdlbm = false; } } } } buffer.Shape = f.ShapeCopy; //hcbgdl---dlbm //zzsx ---zzsxdm //gdlx---gdlx //hfsx---zzsxdm if (setdlbm) { if (s_ihcbgdl > 0) buffer.Value[t_idlbm] = f.Value[s_ihcbgdl]; } if (s_idlbm > 0) buffer.Value[t_idlbm] = f.Value[s_idlbm]; if (s_igdlx > 0) buffer.Value[t_igdlx] = f.Value[s_igdlx]; var zzsx = string.Empty; if (s_izzsx > 0) zzsx = f.Value[s_izzsx].ToTrim(); if (!string.IsNullOrEmpty(zzsx)) buffer.Value[t_izzsxdm] = zzsx; else if (s_ihfsx > 0) buffer.Value[t_izzsxdm] = f.Value[s_ihfsx]; if (s_iczcsxm > 0) buffer.Value[t_iCZCSXM] = f.Value[s_iczcsxm]; if (s_itbbsm > 0) buffer.Value[t_iBSM] = f.Value[s_itbbsm]; } T_Cursor.InsertFeature(buffer); } T_Cursor.Flush(); if (pFclsLoad != null) pFclsLoad.LoadOnlyMode = false; return true; } catch (Exception ex) { throw ex; } finally { if (T_Cursor != null) { Marshal.ReleaseComObject(T_Cursor); } } } public bool BGFWFcToFc_0813(IFeatureClass sourceFeatureClass, IFeatureClass targetFeatureClass, IQueryFilter pFilter) { IFeatureCursor S_Cursor = null; IFeatureCursor T_Cursor = null; try { if (sourceFeatureClass == null || targetFeatureClass == null) return false; IFeatureClassLoad pFclsLoad = targetFeatureClass as IFeatureClassLoad; if (pFclsLoad != null) pFclsLoad.LoadOnlyMode = true; //此处写编辑的代码 S_Cursor = sourceFeatureClass.Search(pFilter, true); IFeature f = null; T_Cursor = targetFeatureClass.Insert(true); IFeatureBuffer buffer = targetFeatureClass.CreateFeatureBuffer(); var s_tblx = sourceFeatureClass.FindField("tblx"); var t_idlbm = targetFeatureClass.FindField("dlbm"); List tBLXConverts = TBLXConvert(); while ((f = S_Cursor.NextFeature()) != null) { string tblx = string.Empty; if (s_tblx > 0) { tblx = f.Value[s_tblx].ToTrim(); } if (tBLXConverts.Count > 0) { var _TBLXConvert = tBLXConverts.FirstOrDefault(x => x.FieldValue == tblx); if (_TBLXConvert != null) { buffer.Value[t_idlbm] = _TBLXConvert.DLBM; } } #region 投影坐标 ISpatialReference s_spatialReference = f.ShapeCopy.SpatialReference; ISpatialReference t_spatialReference = (targetFeatureClass.FeatureDataset as IGeoDataset).SpatialReference; if (s_spatialReference.Name != t_spatialReference.Name) { IGeometry geo = null; geo = f.ShapeCopy; geo.SpatialReference = s_spatialReference; geo.Project(t_spatialReference); ITopologicalOperator topologicalOperator = geo as ITopologicalOperator; topologicalOperator.Simplify(); buffer.Shape = geo; } else { buffer.Shape = f.ShapeCopy; } #endregion T_Cursor.InsertFeature(buffer); } T_Cursor.Flush(); if (pFclsLoad != null) pFclsLoad.LoadOnlyMode = false; return true; } catch (Exception ex) { throw ex; } finally { if (T_Cursor != null) { Marshal.ReleaseComObject(T_Cursor); } } } public bool BGFcToFc(IFeatureClass sourceFeatureClass, IFeatureClass targetFeatureClass, IQueryFilter pFilter) { IFeatureCursor S_Cursor = null; IFeatureCursor T_Cursor = null; IFeature f = null; try { if (sourceFeatureClass == null || targetFeatureClass == null) return false; List filedname = new List() { "DLBM", "GDLX", "ZZSXDM" }; //IFeatureClassLoad pFclsLoad = targetFeatureClass as IFeatureClassLoad; //if (pFclsLoad != null) // pFclsLoad.LoadOnlyMode = true; Dictionary keyValuePairs = new Dictionary(); for (int i = 0; i < targetFeatureClass.Fields.FieldCount; i++) { IField field = targetFeatureClass.Fields.Field[i]; if (field.Name == targetFeatureClass.ShapeFieldName || field.Name.Contains(targetFeatureClass.ShapeFieldName) || field.Name == targetFeatureClass.OIDFieldName || !field.Editable || !filedname.Contains(field.Name)) continue; var sindex = sourceFeatureClass.Fields.FindField(field.Name); if (sindex > 0) keyValuePairs.Add(i, sindex); } //此处写编辑的代码 S_Cursor = sourceFeatureClass.Search(pFilter, true); T_Cursor = targetFeatureClass.Insert(true); var s_iCZCLX = sourceFeatureClass.FindField("CZCLX"); var s_iCZCSXM = sourceFeatureClass.FindField("CZCSXM"); var t_iczcsxm = targetFeatureClass.FindField("CZCSXM"); var s_idlbm = sourceFeatureClass.FindField("DLBM"); IFeatureBuffer buffer = targetFeatureClass.CreateFeatureBuffer(); while ((f = S_Cursor.NextFeature()) != null) { foreach (var item in keyValuePairs) { buffer.Value[item.Key] = f.Value[item.Value]; } string dlbm = f.Value[s_idlbm].ToTrim(); //06类的为204,09类为205,0701为202,其余为203 List jsyd = new List() { "0508", "05H1", "0701", "0809", "0810", "0810A", "08H1", "08H2", "08H2A", "1004", "1005", "1201" }; string czcsxm = string.IsNullOrEmpty(f.Value[s_iCZCSXM].ToTrim()) ? f.Value[s_iCZCLX].ToTrim() : f.Value[s_iCZCSXM].ToTrim(); if (czcsxm.IsNullOrEmpty()) { if (dlbm.StartsWith("06")) czcsxm = "204"; if (dlbm.StartsWith("09")) czcsxm = "205"; if (dlbm == "0702") czcsxm = "202"; if (jsyd.Contains(dlbm)) czcsxm = "203"; } buffer.Value[t_iczcsxm] = czcsxm; buffer.Shape = f.ShapeCopy; T_Cursor.InsertFeature(buffer); } T_Cursor.Flush(); //if (pFclsLoad != null) // pFclsLoad.LoadOnlyMode = false; return true; } catch (Exception ex) { throw ex; } finally { if (T_Cursor != null) Marshal.ReleaseComObject(T_Cursor); if (f != null) Marshal.ReleaseComObject(f); } } /// /// 获取转换关系 /// /// private List TBLXConvert() { List tBLXConverts = new List(); try { string strPath = SysAppPath.GetCurrentAppPath() + "Configs\\TBLX_Config.xml"; XDocument xDoc = XDocument.Load(strPath); foreach (XElement xElement in xDoc.Descendants("Item")) { string FieldName = xElement.Attributes("FieldName").Single().Value; string FieldValue = xElement.Attributes("FieldValue").Single().Value; string DLBM = xElement.Attributes("DLBM").Single().Value; string Iseffective = xElement.Attributes("Iseffective").Single().Value; if (Iseffective != "true") continue; tBLXConverts.Add(new WpfApp1.TBLXConvert() { FieldName = FieldName, FieldValue = FieldValue, DLBM = DLBM }); } } catch (Exception ex) { LogAPI.Debug("获取转换关系异常:" + ex.Message); LogAPI.Debug("获取转换关系异常:" + ex.StackTrace); } return tBLXConverts; } private void btn_nO_Click(object sender, RoutedEventArgs e) { Process.GetCurrentProcess().Kill(); } private void czc20x_Checked(object sender, RoutedEventArgs e) { } private void CheckAll_Checked(object sender, RoutedEventArgs e) { try { list.ForEach(f => f.IsChecked = (sender as System.Windows.Controls.CheckBox).IsChecked == true); } catch (Exception ex) { } } private string Overlap_AfterTreatment { get; set; } private void btn_overlap_Click(object sender, RoutedEventArgs e) { IQueryFilter queryFilter = null; GPParamClass gPParamClass = null; IFeatureLayer MultipartLayer = null; FileInfo file = null; IFeatureClass outsideFeatureClass = null; List files = new List(); string temppath = string.Empty; try { string filepath = bgfwpath.Text; if (string.IsNullOrEmpty(filepath) || filepath == "矢量数据中包含多个区县的变更范围,请先勾选下方复选框") { MessageHelper.ShowTips("请先选择变更范围图斑."); return; } if (Directory.Exists(filepath + "\\去重数据\\BGDB.gdb")) { if (MessageHelper.ShowYesNoAndTips("已存在去重数据,是否重新生成去重数据.") != System.Windows.Forms.DialogResult.Yes) { Overlap_AfterTreatment = $"{filepath + "\\去重数据\\BGDB.gdb\\AfterTreatment"}"; return; } } if (!string.IsNullOrEmpty(filepath)) { var filesshp = System.IO.Directory.GetFiles(filepath, "*.shp", SearchOption.AllDirectories); files.AddRange(filesshp); if (filesshp.Length == 0) return; this.ShowLoading("正在处理重叠数据", 0, 0); file = new FileInfo(files[0]); IWorkspaceFactory wsf = new ShapefileWorkspaceFactory(); ESRI.ArcGIS.Geodatabase.IWorkspace pWorkspace = wsf.OpenFromFile(file.DirectoryName, 0); IFeatureWorkspace pFeatureWorkspace = pWorkspace as IFeatureWorkspace; outsideFeatureClass = pFeatureWorkspace.OpenFeatureClass(file.Name.Replace(".shp", "")); if (outsideFeatureClass == null) { MessageHelper.ShowTips("变更范围图斑读取失败,请检查数据是否正确."); return; } temppath = filepath + "\\去重数据"; if (!Directory.Exists(temppath)) { Directory.CreateDirectory(temppath); } else { try { DelectDirect(temppath); } catch (Exception ex) { } } DirectoryCopy(SysAppPath.GetCurrentAppPath() + "Template\\BGDB.gdb", temppath); temppath = $"{temppath}\\BGDB.gdb"; #region 根据sjdrly 擦除重复数据 1 国家提取 2自主提取 用sjdrly=1的 擦除sjdrly=2的数据 然后拆分多部件 IWorkspaceAPI wsAPI = new WorkspaceAPI(temppath, WorkspaceTypeEnum.GDBFile); GeoDBAPI.SetGeoDatasetSpatialReference(wsAPI.CurrentWorkspace, GeoDBAPI.GetGeoDatasetSpatialReference(pWorkspace), 0.0001); IFeatureClassAPI sjdrly_1 = wsAPI.CreateFeatureClass("sjdrly1", (outsideFeatureClass as IGeoDataset).SpatialReference, outsideFeatureClass.Fields); IFeatureClassAPI sjdrly_2 = wsAPI.CreateFeatureClass("sjdrly2", (outsideFeatureClass as IGeoDataset).SpatialReference, outsideFeatureClass.Fields); IFeatureClassAPI fcAPI = new FeatureClassAPI(outsideFeatureClass); queryFilter = new QueryFilter() { }; queryFilter.WhereClause = $"sdxz = '3' and sjdrly='1' "; fcAPI.FcToFc(sjdrly_1.FeatureClass, queryFilter, true); queryFilter.WhereClause = $"sdxz = '3' and sjdrly='2' "; fcAPI.FcToFc(sjdrly_2.FeatureClass, queryFilter, true); IFeatureLayer EraseLayer = null; gPParamClass = new GPParamClass { FirstFeatureLayer = new FeatureLayer() { FeatureClass = sjdrly_1.FeatureClass, Name = "sjdrly1" }, SecondFeatureLayer = new FeatureLayer() { FeatureClass = sjdrly_2.FeatureClass, Name = "sjdrly2" }, OutFeatureClassPath = $"{temppath}\\shapeErase", IsGetOutPutFeature = true, GPType = EnumGPType.Erase, }; GPHelper.Instance.ExeGPForProces(gPParamClass, ref EraseLayer); #region 拆分多部件 gPParamClass = new GPParamClass(); gPParamClass.FirstFeatureLayer = EraseLayer; gPParamClass.OutFeatureClassPath = $"{temppath}\\AfterTreatment"; gPParamClass.IsGetOutPutFeature = true; gPParamClass.GPType = EnumGPType.MultipartToSinglePath; GPHelper.Instance.ExeGPForProces(gPParamClass, ref MultipartLayer); #endregion #endregion } Overlap_AfterTreatment = $"{temppath}\\AfterTreatment"; this.CloseLoading(); MessageHelper.ShowTips("重叠数据处理完成."); } catch (Exception ex) { this.CloseLoading(); LogAPI.Debug(ex.Message + ex.StackTrace); MessageHelper.ShowError("重叠图斑处理失败:" + ex.Message); } } private void Overlap_Checked(object sender, RoutedEventArgs e) { } #region 流量分析数据为DLTBGXGC层数据 private void DLTBGXGC_Checked(object sender, RoutedEventArgs e) { if (DLTBGXGC.IsChecked == true) { GTDCY.IsChecked = false; JCTB.IsChecked = false; } } #endregion private void btn_FG_Click(object sender, RoutedEventArgs e) { ESRI.ArcGIS.Geodatabase.IWorkspace pWorkspace = null; IFeatureClass outsideFeatureClass = null; try { if (ListData == null || ListData.Count == 0) { MessageHelper.ShowTips("请先选择需要分析的数据."); return; } this.ShowLoading("正在进行拆分...", 0, 0); List files = new List(); var filesshp = System.IO.Directory.GetFiles(bgfwpath.Text, "*.shp", SearchOption.AllDirectories); files.AddRange(filesshp); if (filesshp.Length == 0) return; FileInfo file = new FileInfo(files[0]); IWorkspaceFactory wsf = new ShapefileWorkspaceFactory(); pWorkspace = wsf.OpenFromFile(file.DirectoryName, 0); IFeatureWorkspace pFeatureWorkspace = pWorkspace as IFeatureWorkspace; outsideFeatureClass = pFeatureWorkspace.OpenFeatureClass(file.Name.Replace(".shp", "")); if (outsideFeatureClass == null) return; foreach (var item in ListData) { if (item.XZQDM == null) continue; string gdbFolder = bgfwpath.Text + $"\\分县导出\\{item.XZQDM}"; if (!Directory.Exists(gdbFolder)) Directory.CreateDirectory(gdbFolder); try { DelectDirect(gdbFolder); } catch { //删除临时数据异常 不做处理 } ExportFeaturesToShp(outsideFeatureClass, new QueryFilterClass() { WhereClause = $"xzqdm='{item.XZQDM}'" }, gdbFolder, item.XZQDM); } this.CloseLoading(); MessageHelper.ShowTips($"分县导出完成。"); } catch (Exception ex) { this.CloseLoading(); LogAPI.Debug("分县导出失败" + ex.Message + ex.StackTrace); MessageHelper.ShowError($"地类图斑数据提取失败:{ex.Message}"); } finally { btn_oK.IsEnabled = true; btn_nO.IsEnabled = true; } } /// /// 导出SHP数据 /// /// /// /// /// public static void ExportFeaturesToShp(IFeatureClass pSourceFeatureClass, IQueryFilter pQueryFilter, string forlder, string fileName) { IWorkspaceFactory workFactory = null; IFeatureWorkspace pFeatureWorkspace = null; IFeatureCursor pFeatureCursor = null; IFeatureClass pFeatureClass = null; IFeatureCursor pInsertFeatureCursor = null; int count = 0; try { if (!System.IO.Directory.Exists(forlder)) { System.IO.Directory.CreateDirectory(forlder); } count = pSourceFeatureClass.FeatureCount(pQueryFilter); pFeatureCursor = pSourceFeatureClass.Search(pQueryFilter, true); workFactory = new ESRI.ArcGIS.DataSourcesFile.ShapefileWorkspaceFactoryClass(); pFeatureWorkspace = workFactory.OpenFromFile(forlder, 0) as IFeatureWorkspace; //创建字段信息 IFields pFields = new FieldsClass(); IFieldsEdit pFieldsEdit = pFields as IFieldsEdit; List fieldNames = new List(); for (int i = 0; i < pSourceFeatureClass.Fields.FieldCount; i++) { IField field = pSourceFeatureClass.Fields.get_Field(i); if ((field.Type == esriFieldType.esriFieldTypeBlob || field.Type == esriFieldType.esriFieldTypeRaster) && field.Type != esriFieldType.esriFieldTypeGeometry) continue; if (field.Type == esriFieldType.esriFieldTypeGeometry) { IField pField = new FieldClass(); IFieldEdit pFieldEdit = pField as IFieldEdit; pFieldEdit.Name_2 = "Shape"; pFieldEdit.Type_2 = esriFieldType.esriFieldTypeGeometry; IGeometryDef pGeometryDef = new GeometryDef(); IGeometryDefEdit pGeometryDefEdit = pGeometryDef as IGeometryDefEdit; pGeometryDefEdit.GeometryType_2 = pSourceFeatureClass.ShapeType;//pFeature.Shape.GeometryType; if ((pSourceFeatureClass as IGeoDataset) != null) { pGeometryDefEdit.SpatialReference_2 = (pSourceFeatureClass as IGeoDataset).SpatialReference;//pFeature.Shape.SpatialReference; } pFieldEdit.GeometryDef_2 = pGeometryDef; pFieldsEdit.AddField(pField); } else { IField pField = new FieldClass(); IFieldEdit pFieldEdit = pField as IFieldEdit; pFieldEdit.Length_2 = field.Length; if (field.AliasName == "种植属性名称") { pFieldEdit.Length_2 = field.Length + 10; } if (field.Name.Length > 10) { string fname = field.Name.Substring(0, 10); int n = 1; while (fieldNames.Contains(fname)) { string end = n.ToString(); fname = fname.Remove(10 - end.Length) + end; n++; } pFieldEdit.Name_2 = fname; } else { pFieldEdit.Name_2 = field.Name; } fieldNames.Add(pFieldEdit.Name); pFieldEdit.AliasName_2 = field.AliasName; pFieldEdit.Type_2 = field.Type; pFieldsEdit.AddField(pField); } } pFeatureClass = pFeatureWorkspace.CreateFeatureClass(fileName, pFields, null, null, pSourceFeatureClass.FeatureType, "SHAPE", ""); pInsertFeatureCursor = pFeatureClass.Insert(true); int num = 0; ProgressHelper.CountProgress = count; Dictionary dicMatchFields = new Dictionary(); GetMatchFieldsDirectory(pSourceFeatureClass, pFeatureClass, ref dicMatchFields, true); IFeatureBuffer featureAdd = pFeatureClass.CreateFeatureBuffer(); IFeature pFeature = null; while ((pFeature = pFeatureCursor.NextFeature()) != null) { featureAdd.Shape = pFeature.Shape; foreach (KeyValuePair kvpMatchField in dicMatchFields) { if (pFeature.Value[kvpMatchField.Value] != DBNull.Value) { featureAdd.set_Value(kvpMatchField.Key, pFeature.get_Value(kvpMatchField.Value)); } else { featureAdd.set_Value(kvpMatchField.Key, null); } } pInsertFeatureCursor.InsertFeature(featureAdd); num++; if (num % 100 == 0 || num == count) { ProgressHelper.CurrentProgress = num; } } pInsertFeatureCursor.Flush(); ProgressHelper.CloseProcessBar(); //关闭lock IWorkspaceFactoryLockControl ipWsFactoryLock = (IWorkspaceFactoryLockControl)workFactory; if (ipWsFactoryLock.SchemaLockingEnabled) { ipWsFactoryLock.DisableSchemaLocking(); } } catch (Exception ex) { ProgressHelper.CloseProcessBar(); MessageHelper.ShowError("导出SHAPE文件出错:" + ex.Message); LogAPI.Debug("导出SHAPE文件出错,可能的原因是:" + ex.Message); } finally { if (pFeatureCursor != null) { Marshal.ReleaseComObject(pFeatureCursor); } if (pFeatureClass != null) { Marshal.ReleaseComObject(pFeatureClass); } if (pInsertFeatureCursor != null) { Marshal.ReleaseComObject(pInsertFeatureCursor); } if (pFeatureWorkspace != null) { Marshal.ReleaseComObject(pFeatureWorkspace); } if (workFactory != null) { Marshal.ReleaseComObject(workFactory); } } } /// /// 获得匹配的字段索引集合 /// /// 源要素类 /// 目标要素类 /// 匹配字段集合-KEY为目标图层字段,VALUE为源图层字段 /// 是否获取必须字段 public static void GetMatchFieldsDirectory(IClass pSourceClass, IClass pTargetClass, ref Dictionary dicMatchFields, bool isGetRequired = false) { for (int i = 0; i < pTargetClass.Fields.FieldCount; i++) { IField pTargetField = pTargetClass.Fields.get_Field(i); //目标图层的字段必须为可编辑并且不是必须字段 if (pTargetField.Required == false && pTargetField.Editable == true) { int iSourceFeatureClassIndex = pSourceClass.Fields.FindField(pTargetField.Name); if (pTargetField.Name == "SHAPE_Leng") { iSourceFeatureClassIndex = pSourceClass.Fields.FindField("SHAPE_Length"); } //源要素类中该字段存在 if (iSourceFeatureClassIndex > -1) { IField pSourceField = pSourceClass.Fields.get_Field(iSourceFeatureClassIndex); //目标图层的字段也必须为可编辑并且不是必须字段 if (pSourceField.Required == false && pSourceField.Editable == true) { //添加到字段匹配集合中 dicMatchFields.Add(i, iSourceFeatureClassIndex); } else if (isGetRequired) { dicMatchFields.Add(i, iSourceFeatureClassIndex); } } } //此处为了保留原有要素ObjectID字段值 if (pTargetField.Name.Equals("OIDCOPY", StringComparison.CurrentCultureIgnoreCase)) { dicMatchFields.Add(i, pSourceClass.FindField(pSourceClass.OIDFieldName)); } } } public virtual string CreateTempDB(string pType, string pSubType = "") { string result = string.Empty; try { string gdbFolder = Directory.GetCurrentDirectory() + "\\Temp\\" + pType; if (!Directory.Exists(gdbFolder)) Directory.CreateDirectory(gdbFolder); try { DelectDirect(gdbFolder); } catch { //删除临时数据异常 不做处理 } //IWorkspaceFactory pFtWsFct = new ESRI.ArcGIS.DataSourcesGDB.FileGDBWorkspaceFactory(); string gdbFileName = DateTime.Now.ToString("yyyyMMddHHmmssfff");// Guid.NewGuid().ToString().Replace("-", ""); string path = System.IO.Path.Combine(gdbFolder, string.IsNullOrWhiteSpace(pSubType) ? gdbFileName : pSubType); //pFtWsFct.Create(path, "TempGDB", null, 0); if (!Directory.Exists(path)) { Directory.CreateDirectory(path); } string savePath = System.IO.Path.Combine(path, "TempGDB.gdb"); string templeteGDBPath = System.IO.Path.Combine(SysAppPath.GetCurrentAppPath(), "Template", "TempGDB.gdb"); CopyDirectory(templeteGDBPath, savePath, true); result = path;// System.IO.Path.Combine(path, "TempGDB.gdb");//临时数据存放路径 } catch (Exception ex) { Console.WriteLine("创建临时数据库失败!" + ex.Message); throw ex; } return result; } private void DLTBGX_Checked(object sender, RoutedEventArgs e) { } private void JCTB_Checked(object sender, RoutedEventArgs e) { if (JCTB.IsChecked == true) { this.GTDCY.IsChecked = false; this.DLTBGXGC.IsChecked = false; } } private void GTDCY_Checked(object sender, RoutedEventArgs e) { if (GTDCY.IsChecked == true) { this.JCTB.IsChecked = false; this.DLTBGXGC.IsChecked = false; } } } public class ThreadParam { public string ThreadName { get; set; } public List Codes { get; set; } public ProjectInfo ProjInfo { get; set; } public string StrBgTbLayer { get; set; } public string StrJcTbLayer { get; set; } public List Layers { get; set; } public AnalysisExport analysisExport { get; set; } public string nodeid { get; set; } } public class CustomIDGParm { public AnalysisExport analysisExport { get; set; } public IDGParameter PressParameter { get; set; } public string ErrorMessage { get; set; } } public class TBLXConvert { /// /// 字段名称 /// public string FieldName { get; set; } /// /// 字段值 /// public string FieldValue { get; set; } /// /// 对应的地类编码 /// public string DLBM { get; set; } /// /// 是否转换 /// public bool Iseffective { get; set; } } public class TestData : INotifyPropertyChanged { private bool _IsChecked; public bool IsChecked { get { return _IsChecked; } set { _IsChecked = value; RaisePropertyChanged("IsChecked"); } } public string ItemType { get; set; } public string Descriction { get; set; } public event PropertyChangedEventHandler PropertyChanged; protected void RaisePropertyChanged(string propertyName) { PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName)); } } }