/// <summary> /// /// </summary> /// <param name="files">源文件列表</param> /// <param name="savefile">保存文件(不存在)</param> /// <param name="tables">表</param> private void MergeFile(string[] files,string savefile,List<StockTable> tables) { var model2 = System.IO.Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "TEMPS", "MM.mdb"); if (!System.IO.File.Exists(model2)) { var dir = System.IO.Path.GetDirectoryName(model2); if (!System.IO.Directory.Exists(dir)) { System.IO.Directory.CreateDirectory(dir); } if (!ArcExtensions.CreateAccess(System.IO.Path.GetDirectoryName(model2), System.IO.Path.GetFileNameWithoutExtension(model2))) { OutputMessage(string.Format("创建模板文件2失败")); return; } ArcExtensions.CreateTable(model2, tables); } System.IO.File.Copy(model2, savefile); //if (!ArcExtensions.CreateAccess(System.IO.Path.GetDirectoryName(savefile), System.IO.Path.GetFileNameWithoutExtension(savefile))) //{ // OutputMessage(string.Format("创建mdb文件{0}失败", System.IO.Path.GetFileNameWithoutExtension(savefile))); // return; //} foreach (var item in tables) { if (item.IsSpace == true) { if(!ArcExtensions.Merge(files,item.Name, string.Format("{0}\\{1}", savefile, item.Name))) { OutputMessage(string.Format("合并图层{0}失败", item.Name)); } //if (!ArcExtensions.MergeFeatureClass(string.Join(";", files.Select(e => string.Format("{0}\\{1}", e, item.Name)).ToArray()), null, string.Format("{0}\\{1}", savefile, item.Name))) //{ // OutputMessage(string.Format("合并图层{0}失败", item.Name)); //} } } foreach(var file in files) { if (System.IO.Path.GetFileNameWithoutExtension(file).ToLower() != "MODEL".ToLower()) { ArcExtensions.ImportTables2(savefile, file, tables); } } }
public void Program() { if (System.IO.File.Exists(SaveFile)) { System.IO.File.Delete(SaveFile); } #region 获取mdb文件列表 var mdbfiles = FolderExtensions.GetFiles(SourceFolder, "*.mdb"); if (mdbfiles.Count == 0) { OutputMessage("未获取矢量数据库文件,请核对!"); return; } #endregion var stockTables = ParameterManager.StockTables; var modelMdbFile = System.IO.Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "TEMPS", "MODEL.mdb"); if (!System.IO.File.Exists(modelMdbFile)) { var directory = System.IO.Path.GetDirectoryName(modelMdbFile); if (!System.IO.Directory.Exists(directory)) { System.IO.Directory.CreateDirectory(directory); } #region 创建mdb文件 if (!ArcExtensions.CreateAccess(System.IO.Path.GetDirectoryName(modelMdbFile), System.IO.Path.GetFileNameWithoutExtension(modelMdbFile))) { OutputMessage("创建MDB文件失败!"); return; } #endregion #region 创建表和字段 ArcExtensions.Create(modelMdbFile, stockTables); OutputMessage("成功创建要素类和表"); #endregion } #region 单个区县导入数据 #region 方法一 //var index = 0; //var size = 1; //var currentMdbFilePath = string.Empty; //var files = new List<string>(); //foreach (var DD in ParameterManager.CollectXZQ) //{ // if (index % size == 0) // { // if (System.IO.File.Exists(currentMdbFilePath)) // { // ArcExtensions.DeleteFields(currentMdbFilePath, stockTables); // } // currentMdbFilePath = System.IO.Path.Combine(System.IO.Path.GetDirectoryName(SaveFile), System.IO.Path.GetFileNameWithoutExtension(SaveFile) + string.Format("-{0}", DD.XZQDM) + System.IO.Path.GetExtension(SaveFile)); // System.IO.File.Copy(modelMdbFile, currentMdbFilePath); // files.Add(currentMdbFilePath); // } // index++; // if (DD.Children != null) // { // foreach (var item in DD.Children) // { // var stockFile = mdbfiles.FirstOrDefault(e => e.XZQDM.ToLower() == item.XZCDM.ToLower()); // if (stockFile == null) // { // OutputMessage(string.Format("未识别到行政区代码【{0}】行政区名称【{1}】相关矢量文件", item.XZCDM, item.XZCMC)); // } // else // { // OutputMessage(string.Format("正在导入行政区代码【{0}】行政区名称【{1}】的矢量数据", item.XZCDM, item.XZCMC)); // try // { // ArcExtensions.Import2(currentMdbFilePath, stockFile.FullName, stockTables, DD.XZQDM, DD.XZQMC); // } // catch (Exception ex) // { // OutputMessage("导入矢量数据,发生错误:" + ex.Message); // } // OutputMessage(string.Format("完成导入行政区代码【{0}】行政区名称【{1}】的矢量信息", item.XZCDM, item.XZCMC)); // OutputMessage(string.Format("正在导入行政区代码【{0}】行政区名称【{1}】的属性表格数据", item.XZCDM, item.XZCMC)); // try // { // ArcExtensions.ImportTables(currentMdbFilePath, stockFile.FullName, stockTables, DD.XZQDM, DD.XZQMC); // } // catch (Exception ex) // { // OutputMessage("导入属性数据,发生错误:" + ex.Message); // } // OutputMessage(string.Format("完成导入行政区代码【{0}】行政区名称【{1}】的属性表格数据", item.XZCDM, item.XZCMC)); // } // } // } //} //if (System.IO.File.Exists(currentMdbFilePath)) //{ // ArcExtensions.DeleteFields(currentMdbFilePath, stockTables); //} //#region 将每个地级市数据合并 //var size2 = 6; //for (var i = 0; i < files.Count / size2; i++) //{ // var temp = files.Skip(i * size2).Take(size2).ToArray(); // var saveFile1 = System.IO.Path.Combine(System.IO.Path.GetDirectoryName(SaveFile), System.IO.Path.GetFileNameWithoutExtension(SaveFile) + "-" + i + System.IO.Path.GetExtension(SaveFile)); // MergeFile(temp, saveFile1, stockTables); //} //#endregion #endregion #region 方法二 //var mergeSize = 6; //var results = new List<string>(); //foreach(var dd in ParameterManager.CollectXZQ) //{ // if (dd.Children != null) // { // var childrenFiles = new List<string>(); // //childrenFiles.Add(modelMdbFile); // foreach(var item in dd.Children) // { // var stock = mdbfiles.FirstOrDefault(e => e.XZQDM.ToLower() == item.XZCDM.ToLower()); // if (stock != null) // { // childrenFiles.Add(stock.FullName); // } // } // for(var i = 0; i <= childrenFiles.Count / mergeSize; i++) // { // var temp = childrenFiles.Skip(i * mergeSize).Take(mergeSize).ToList(); // temp.Add(modelMdbFile); // var tempFile = System.IO.Path.Combine(System.IO.Path.GetDirectoryName(SaveFile), string.Format("{0}_{1}_{2}.mdb", dd.XZQDM, i,DateTime.Now.Ticks)); // MergeFile(temp.ToArray(), tempFile, stockTables); // ArcExtensions.SetXZS(tempFile, stockTables, dd.XZQDM, dd.XZQMC); // results.Add(tempFile); // } // } //} #endregion #region 方法三 var model2 = System.IO.Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "TEMPS", "MM.mdb");//属性表 模板文件 if (!System.IO.File.Exists(model2)) { var dir = System.IO.Path.GetDirectoryName(model2); if (!System.IO.Directory.Exists(dir)) { System.IO.Directory.CreateDirectory(dir); } if (!ArcExtensions.CreateAccess(System.IO.Path.GetDirectoryName(model2), System.IO.Path.GetFileNameWithoutExtension(model2))) { OutputMessage(string.Format("创建模板文件2失败")); return; } ArcExtensions.CreateTable2(model2, stockTables.Where(e=>e.IsSpace==false).ToList()); } var mergeSize = 11; var currentmodel = string.Empty; var index = 0; #region 合成属性表 foreach(var dd in ParameterManager.CollectXZQ) { if (index % mergeSize == 0) { currentmodel = System.IO.Path.Combine(System.IO.Path.GetDirectoryName(SaveFile), string.Format("{0}_{1}_属性表.mdb", System.IO.Path.GetFileNameWithoutExtension(SaveFile), index / mergeSize)); System.IO.File.Copy(model2, currentmodel); } index++; if (dd.Children != null) { foreach(var item in dd.Children) { var stock = mdbfiles.FirstOrDefault(e => e.XZQDM.ToLower() == item.XZCDM.ToLower()); if (stock == null) { OutputMessage(string.Format("未识别到行政区代码【{0}】行政区名称【{1}】相关矢量文件", item.XZCDM, item.XZCMC)); } else { OutputMessage(string.Format("正在导入行政区代码【{0}】行政区名称【{1}】的属性表格数据", item.XZCDM, item.XZCMC)); try { ArcExtensions.ImportTables(currentmodel, stock, stockTables, dd.XZQDM, dd.XZQMC); } catch (Exception ex) { OutputMessage("导入属性数据,发生错误:" + ex.Message); } OutputMessage(string.Format("完成导入行政区代码【{0}】行政区名称【{1}】的属性表格数据", item.XZCDM, item.XZCMC)); } } } } OutputMessage("完成属性表数据的合并"); #endregion OutputMessage("开始对矢量数据的合并"); index = 0; mergeSize = 11; var shiTable = stockTables.Where(e => e.IsSpace == true).ToList(); //var model3 = System.IO.Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "TEMPS", "MMM.gdb"); //if (!System.IO.File.Exists(model3)) //{ // if (!ArcExtensions.CreateGDB(System.IO.Path.GetDirectoryName(model3), System.IO.Path.GetFileNameWithoutExtension(model3))) // { // OutputMessage(string.Format("创建模板文件2失败")); // return; // } // ArcExtensions.Create2(model3, shiTable); //} foreach (var dd in ParameterManager.CollectXZQ) { if (index % mergeSize == 0) { currentmodel = System.IO.Path.Combine(System.IO.Path.GetDirectoryName(SaveFile), string.Format("{0}_{1}_矢量表.gdb", System.IO.Path.GetFileNameWithoutExtension(SaveFile), index / mergeSize)); if (!ArcExtensions.CreateGDB(System.IO.Path.GetDirectoryName(currentmodel), System.IO.Path.GetFileNameWithoutExtension(currentmodel))) { OutputMessage(string.Format("创建模板文件2失败")); return; } ArcExtensions.Create2(currentmodel, shiTable); //System.IO.File.Copy(model3, currentmodel); } index++; if (dd.Children != null) { foreach(var item in dd.Children) { var stock = mdbfiles.FirstOrDefault(e => e.XZQDM.ToLower() == item.XZCDM.ToLower()); if (stock != null) { OutputMessage(string.Format("开始导入行政区代码【{0}】行政区名称【{1}】数据", item.XZCDM, item.XZCMC)); ArcExtensions.Import3(currentmodel, stock, shiTable, dd.XZQDM, dd.XZQMC); OutputMessage(string.Format("完成导入行政区代码【{0}】行政区名称【{1}】数据", item.XZCDM, item.XZCMC)); //ArcExtensions.DeleteFields(stock.FullName, shiTable);//删除不必要的字段 //OutputMessage(string.Format("成功删除行政区代码【{0}】行政区名称【{1}】数据中多余字段", item.XZCDM, item.XZCMC)); //ArcExtensions.AddFields(stock.FullName, shiTable);//添加字段 //OutputMessage(string.Format("成功完成行政区代码【{0}】行政区名称【{1}】数据中图层添加字段", item.XZCDM, item.XZCMC)); //ArcExtensions.SetXZS(stock.FullName, shiTable, dd.XZQDM, dd.XZQMC);//给赋值 //OutputMessage(string.Format("成功赋值行政区代码【{0}】行政区名称【{1}】数据中地级市信息", item.XZCDM, item.XZCMC)); } } } } #endregion #endregion OutputMessage(string.Format("完成所有区县数据合并")); }