年度变更建库软件5.0版本
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 

721 lines
36 KiB

using ESRI.ArcGIS.Geodatabase;
using ESRI.ArcGIS.Geometry;
using KGIS.Framework.AE;
using KGIS.Framework.AE.Enum;
using KGIS.Framework.AE.GPHelper;
using KGIS.Framework.Common.Interface;
using KGIS.Framework.DBOperator;
using KGIS.Framework.Maps;
using KGIS.Framework.Platform;
using KGIS.Framework.Platform.Helper;
using KGIS.Framework.Utils;
using KGIS.Framework.Utils.ExtensionMethod;
using KGIS.Framework.Utils.Helper;
using KGIS.Framework.Utils.Model;
using kingo.Plugin.BGResultManager.Interface;
using kingo.Plugin.BGResultManager.Utility;
using kingo.Plugin.BGResultManager.Utility.Dic;
using kingo.Plugin.BGResultManager.Utility.GDB;
using kingo.Plugin.BGResultManager.Utility.MDB;
using kingo.Plugin.BGResultManager.Utility.Metadata;
using Kingo.PluginServiceInterface;
using ReactiveUI;
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Runtime.InteropServices;
using System.Xml;
using UIShell.OSGi;
namespace Kingo.Plugin.BGResultManager.ViewModel
{
public class ExportBGNMKViewModel : ReactiveObject, IScreen
{
private string _OutDir;
public string OutDir
{
get { return _OutDir; }
set { this.RaiseAndSetIfChanged(ref _OutDir, value); }
}
private string _NMKDir;
/// <summary>
/// 指定的年末库mdb所在地址
/// </summary>
public string NMKDir
{
get { return _NMKDir; }
set { this.RaiseAndSetIfChanged(ref _NMKDir, value); }
}
private bool _hasPdt;
public bool HasPDT
{
get { return _hasPdt; }
set { this.RaiseAndSetIfChanged(ref _hasPdt, value); }
}
private bool _IsBL;//是否补充0至19位
public bool IsBL
{
get { return _IsBL; }
set { this.RaiseAndSetIfChanged(ref _IsBL, value); }
}
private bool _IsHZPC;//是否汇总平差
public bool IsHZPC
{
get { return _IsHZPC; }
set { this.RaiseAndSetIfChanged(ref _IsHZPC, value); }
}
public List<ResultsCatalog> Items { get; set; }
/// <summary>
/// 输出成果根目录
/// </summary>
public string OutDataRootDir { get; set; }
public RoutingState Router
{
get;
}
public bool bHasHZPC;
public ReactiveCommand<object> ExportClick { get; protected set; }
public ExportBGNMKViewModel()
{
HasPDT = false;
IsBL = false;
Items = GetResultsCatalog();
ExportClick = ReactiveCommand.Create();
ExportClick.Subscribe(x =>
{
try
{
if (Items == null)
return;
NMKDir = string.Empty;
IsHZPC = true;
if (string.IsNullOrWhiteSpace(OutDir))
{
MessageHelper.Show("请选择输出目录!");
return;
}
ProgressHelper.ShowProcessBar("正在导出......");
OutDataRootDir = Items[0].Name;
CreateCatalogDir(Items);
ProgressHelper.CloseProcessBar();
MessageHelper.ShowTips("导出完成!");
}
catch (Exception ex)
{
ProgressHelper.CloseProcessBar();
MessageHelper.ShowError("导出失败:" + ex.Message);
LogAPI.Debug(ex);
}
});
}
IReportService _ReportService = null;
private void CreateCatalogDir(List<ResultsCatalog> pCatalog)
{
try
{
bHasHZPC = false;
if (pCatalog == null) return;
List<DataDicTionary> qsDic = Platform.Instance.DicHelper.GetNoGroupDic(DicTypeEnum.QSDM);
foreach (ResultsCatalog item in pCatalog)
{
item.Path = item.Path.Replace("县行政区划代码6位", (MapsManager.Instance.MapService.GetProjectInfo() as ProjectInfo).CODE);
//白明雅 2019-03-05 比例尺不写死
item.Name = item.Name.Replace("县行政区划代码6位", (MapsManager.Instance.MapService.GetProjectInfo() as ProjectInfo).CODE).Replace("年代代码4位", DateTime.Now.Year.ToString()).Replace("比例尺代码1位", (MapsManager.Instance.MapService.GetProjectInfo() as ProjectInfo).ScaleCode);
if (item.IsChecked == false) continue;
string sPath = string.Empty;
switch (item.Type)
{
case "Directory":
ProgressHelper.ShowProcessBar(string.Format("正在创建目录:{0}", item.Name));
sPath = System.IO.Path.Combine(OutDir, item.Path);
if (!System.IO.Directory.Exists(sPath))
System.IO.Directory.CreateDirectory(sPath);
if (item.SubCatalog != null)
CreateCatalogDir(item.SubCatalog);
break;
case "MetadataFile":
sPath = System.IO.Path.Combine(OutDir, item.Path);
ProgressHelper.ShowProcessBar(string.Format("正在生成元数据【{0}】", item.Name));
ExportMetadata exportMetadata = new ExportMetadata();
exportMetadata.OutPath = System.IO.Path.GetDirectoryName(sPath);
exportMetadata.Scale = new ScaleCodeTable() { Scale = (MapsManager.Instance.MapService.GetProjectInfo() as ProjectInfo).Scale, ScaleCode = (MapsManager.Instance.MapService.GetProjectInfo() as ProjectInfo).ScaleCode };
exportMetadata.Export();
break;
case "MDBFile":
sPath = System.IO.Path.Combine(OutDir, item.Path);
ProgressHelper.ShowProcessBar(string.Format("正在导出【{0}】", item.Name));
ExportMDB exportMDB = new ExportMDB();
exportMDB.OutPath = sPath;
exportMDB.Export(true, NMKDir);
break;
case "CopyMDBFile":
try
{
sPath = System.IO.Path.Combine(OutDir, item.Path);
ProgressHelper.ShowProcessBar(string.Format("正在导出【{0}】", item.Name));
//导出年末库MDB
NMKDir = sPath;
ExportMDB(sPath);
}
catch (Exception ex)
{
throw ex;
}
break;
case "CopyGDBFile":
try
{
if (!System.IO.File.Exists(NMKDir))
{
throw new Exception("请勾选生成原格式数据!");
}
sPath = System.IO.Path.Combine(OutDir, item.Path);
ProgressHelper.ShowProcessBar(string.Format("正在导出【{0}】", item.Name));
string sFilePath = System.IO.Path.Combine(OutDir, OutDataRootDir, item.CopyFile, System.IO.Path.GetFileName(sPath));
ExportGDB exportGDB2 = new ExportGDB();
exportGDB2.OutPath = sPath;
exportGDB2.Export_PDT(NMKDir);//生成坡度图gdb
}
catch (Exception ex)
{
throw ex;
}
break;
case "VCTFile":
if (!System.IO.File.Exists(NMKDir))
{
throw new Exception("请勾选生成原格式数据!");
}
ProgressHelper.ShowProcessBar(string.Format("正在导出【{0}】", item.Name));
sPath = System.IO.Path.Combine(OutDir, item.Path);
IVCTExport vctExport = new MDBToVCTWindow();
vctExport.OutPath = System.IO.Path.GetDirectoryName(sPath);
vctExport.Scale = new ScaleCodeTable() { Scale = (MapsManager.Instance.MapService.GetProjectInfo() as ProjectInfo).Scale, ScaleCode = (MapsManager.Instance.MapService.GetProjectInfo() as ProjectInfo).ScaleCode };
vctExport.ExportVCT(HasPDT, NMKDir);
break;
case "OwnerUnitCodeFile":
sPath = System.IO.Path.Combine(OutDir, item.Path);
ProgressHelper.ShowProcessBar(string.Format("正在导出【{0}】", item.Name));
ExportOwnerUnitCode exportOwnerUnitCode = new ExportOwnerUnitCode();
exportOwnerUnitCode.OutPath = sPath + ".xlsx";
exportOwnerUnitCode.Export(IsBL);
break;
case "ReportExcel":
if (!System.IO.File.Exists(NMKDir))
{
throw new Exception("请勾选生成原格式数据!");
}
if (bHasHZPC == false)
{
if (File.Exists(NMKDir))
{
sPath = System.IO.Path.Combine(OutDir, Guid.NewGuid().ToTrim() + ".mdb");
File.Copy(NMKDir, sPath);
NMKDir = sPath;
NMKPC();
bHasHZPC = true;
}
}
ProgressHelper.ShowProcessBar(string.Format("正在导出【{0}】", item.Name));
sPath = System.IO.Path.Combine(OutDir, item.Path);
if (_ReportService == null)
_ReportService = BundleRuntime.Instance.GetFirstOrDefaultService<IReportService>();
if (_ReportService != null)
{
_ReportService.ExportBGNMKReport(item.FileType, System.IO.Path.GetDirectoryName((MapsManager.Instance.MapService.GetProjectInfo() as ProjectInfo).GetProjFilePath()) + @"\BGTJ.sqlite", sPath);
}
else
{
LogAPI.Debug("未能获取到报表输出服务,无法进行报表输出!");
}
break;
case "ReportWord":
ProgressHelper.ShowProcessBar(string.Format("正在导出【{0}】", item.Name));
sPath = System.IO.Path.Combine(OutDir, item.Path);
if (_ReportService == null)
_ReportService = BundleRuntime.Instance.GetFirstOrDefaultService<IReportService>();
if (_ReportService != null)
{
_ReportService.ExportWordReport(item.FileType, sPath);
}
else
{
LogAPI.Debug("未能获取到报表输出服务,无法进行报表输出!");
}
break;
case "ReportShap":
sPath = System.IO.Path.Combine(OutDir, item.Path);
IWorkspaceAPI wsAPI_1 = new WorkspaceAPI(NMKDir, WorkspaceTypeEnum.MDBFile);
IFeatureClassAPI ifeatureClassApi = wsAPI_1.OpenFeatureClass("YJGD");
int index = sPath.LastIndexOf("\\");
var str = sPath.Substring(0, index);
FeatureOperator.ExportFeaturesToShp2(ifeatureClassApi.FeatureClass, null, str, "YJGD");
break;
default:
break;
}
}
bHasHZPC = false;
}
catch (Exception ex)
{
throw ex;
}
}
private void ExportMDB(string t_targetPath)
{
WorkspaceAPI t_WsAPI = null;
WorkspaceAPI s_WsAPI = null;
IEnumDataset pEnumDataset = null;
try
{
if (File.Exists(t_targetPath))
{
File.Delete(t_targetPath);
}
s_WsAPI = new WorkspaceAPI((MapsManager.Instance.MapService.GetProjectInfo() as ProjectInfo).GetProjFilePath(), KGIS.Framework.AE.Enum.WorkspaceTypeEnum.GDBFile);
//创建mdb
CreateFileMDB(t_targetPath, System.IO.Path.GetFileName(t_targetPath));
t_WsAPI = new WorkspaceAPI(t_targetPath, KGIS.Framework.AE.Enum.WorkspaceTypeEnum.MDBFile);
pEnumDataset = s_WsAPI.CurrentWorkspace.Datasets[esriDatasetType.esriDTFeatureDataset];
if (pEnumDataset != null)
{
pEnumDataset.Reset();
IDataset pDataset = null;
//如果数据集是IFeatureDataset,则遍历它下面的子类
while ((pDataset = pEnumDataset.Next()) != null)
{
if (pDataset.BrowseName != "变更成果库")
{
continue;
}
IDataset newDataset = null;
newDataset = CreateFeatureDataset(pDataset, t_WsAPI);
if (newDataset == null)
{
continue;
}
List<string> listFeatureClass = new List<string>();
List<string> listFeatureClassNameList = new List<string>();
IEnumDataset ed = pDataset.Subsets;
if (ed != null)
{
IDataset dataset = ed.Next();
while (dataset != null)
{
if ((dataset as IFeatureClass) != null)
{
string featureClassName = dataset.BrowseName;
if (!string.IsNullOrWhiteSpace(featureClassName) && !listFeatureClass.Contains(featureClassName))
{
listFeatureClass.Add(System.IO.Path.Combine(pDataset.Workspace.PathName.ToString(), pDataset.BrowseName, featureClassName));
listFeatureClassNameList.Add(featureClassName);
}
}
System.Runtime.InteropServices.Marshal.FinalReleaseComObject(dataset);
dataset = ed.Next();
}
}
if (listFeatureClass.Count > 0)
{
//KGIS.Framework.AE.GPHelper.GeoprocessorHelper.FeatureClassToGeodatabase(listFeatureClass, t_targetPath + "\\" + newDataset.BrowseName);
//因为原先这个 FeatureClassToGeodatabase 方法不稳定所以采用如下新的处理方式-2020-6-1 沈超
GeoprocessorHelper iGeoprocessorHelper = new GeoprocessorHelper();
//iGeoprocessorHelper.InsertMDBFeatureClassFromGDBFeatureClass((MapsManager.Instance.MapService.GetProjectInfo() as ProjectInfo).GetProjFilePath(), listFeatureClassNameList, t_targetPath, newDataset.BrowseName, null);
}
if (newDataset != null)
System.Runtime.InteropServices.Marshal.FinalReleaseComObject(newDataset);
}
}
}
catch (Exception ex)
{
throw;
}
finally
{
if (t_WsAPI != null)
{
t_WsAPI.CloseWorkspace();
}
if (s_WsAPI != null)
{
s_WsAPI.CloseWorkspace();
}
if (pEnumDataset != null)
{
Marshal.ReleaseComObject(pEnumDataset);
}
}
}
public void ExportFeature(IFeatureClass pInFeatureClass, string pPath)
{
IWorkspaceFactory pWorkspaceFactory = new ESRI.ArcGIS.DataSourcesFile.ShapefileWorkspaceFactoryClass();
string parentPath = pPath.Substring(0, pPath.LastIndexOf('\\'));
string fileName = pPath.Substring(pPath.LastIndexOf('\\') + 1, pPath.Length - pPath.LastIndexOf('\\') - 1);
//AE.WorkspaceAPI workspaceApi = new WorkspaceAPI(parentPath, AE.Enum.WorkspaceTypeEnum.ShapeFile);
//IWorkspaceName pWorkspaceName = workspaceApi.CurrentWorkspace as IWorkspaceName;
IWorkspaceName pWorkspaceName = pWorkspaceFactory.Create(parentPath, fileName, null, 0);
ESRI.ArcGIS.esriSystem.IName name = (ESRI.ArcGIS.esriSystem.IName)pWorkspaceName;
IWorkspace pOutWorkspace = (IWorkspace)name.Open();
IDataset pInDataset = pInFeatureClass as IDataset;
IFeatureClassName pInFCName = pInDataset.FullName as IFeatureClassName;
IWorkspace pInWorkspace = pInDataset.Workspace;
IDataset pOutDataset = pOutWorkspace as IDataset;
IWorkspaceName pOutWorkspaceName = pOutDataset.FullName as IWorkspaceName;
IFeatureClassName pOutFCName = new FeatureClassNameClass();
IDatasetName pDatasetName = pOutFCName as IDatasetName;
pDatasetName.WorkspaceName = pOutWorkspaceName;
pDatasetName.Name = "YJGD";
IFieldChecker pFieldChecker = new FieldCheckerClass();
pFieldChecker.InputWorkspace = pInWorkspace;
pFieldChecker.ValidateWorkspace = pOutWorkspace;
IFields pFields = pInFeatureClass.Fields;
IFields pOutFields;
IEnumFieldError pEnumFieldError;
pFieldChecker.Validate(pFields, out pEnumFieldError, out pOutFields);
IFeatureDataConverter pFeatureDataConverter = new FeatureDataConverterClass();
pFeatureDataConverter.ConvertFeatureClass(pInFCName, null, null, pOutFCName, null, pOutFields, "", 100, 0);
}
#region 年末库平差
/// <summary>
/// 年末库平差
/// </summary>
public void NMKPC()
{
string sNMK_MDBPath = NMKDir;
string dbpath = System.IO.Path.GetDirectoryName((MapsManager.Instance.MapService.GetProjectInfo() as ProjectInfo).GetProjFilePath()) + @"\BGTJ.sqlite";
IRDBHelper dbHelper = null;
try
{
dbHelper = RDBFactory.CreateDbHelper("Data Source=" + dbpath, DatabaseType.SQLite);
if (IsHZPC == true && !System.IO.File.Exists(sNMK_MDBPath) && !dbHelper.TableIsExist("MJHZJCTJB"))
{
MessageHelper.ShowTips("请勾选生成原格式数据!");
return;
}
if (IsHZPC == true || !dbHelper.TableIsExist("MJHZJCTJB"))
{
dbHelper.DisConnect();
#region 汇总平差
var HZHDLD = (MapsManager.Instance.MapService.GetProjectInfo() as ProjectInfo).DCMJ + (MapsManager.Instance.MapService.GetProjectInfo() as ProjectInfo).DCMJHD;
string connStr = SysConfigsOprator.GetDBConnectionByName("MDBOledbConnection");
string SourcePath = string.Format(connStr, sNMK_MDBPath);
//创建数据库连接
dbHelper = RDBFactory.CreateDbHelper(SourcePath, DatabaseType.MSAccess);
decimal xjkzmj = (MapsManager.Instance.MapService.GetProjectInfo() as ProjectInfo).DCMJ.ToDecimal(2);
System.Data.DataTable dt = dbHelper.ExecuteDatatable("cjzmj", "SELECT sum(TBMJ) as TBMJ,sum(KCMJ) as KCMJ,sum(tbdlmj) as TBDLMJ FROM dltb ", true);
decimal tbmj = dt.Rows[0]["TBMJ"].ToDecimal(2);
decimal kcmj = dt.Rows[0]["KCMJ"].ToDecimal(2);
decimal tbdlmj = dt.Rows[0]["TBDLMJ"].ToDecimal(2);
if ((kcmj + tbdlmj).ToDecimal(2) != tbmj)
{
MessageHelper.ShowTips("图斑地类面积与田坎面积之和不等于图斑总面积,不能进行汇总平差!");
return;
}
if (HZHDLD.ToDecimal(2) != tbmj)
{
MessageHelper.ShowTips("控制面积平差失败,不能进行汇总平差!");
return;
}
ProgressHelper.ShowProcessBar("正在汇总平差...");
dbHelper.DisConnect();
GeoDBAPI.CompactAccessDataBaseByWorkspace(null, sNMK_MDBPath);
string dir = System.IO.Path.Combine(SysAppPath.GetCurrentAppPath(), "TempCache");
var path = System.IO.Path.Combine(dir, Guid.NewGuid().ToString().Split('-')[0] + ".mdb");
if (!System.IO.Directory.Exists(dir))
{
System.IO.Directory.CreateDirectory(dir);
}
if (!System.IO.File.Exists(path))
{
System.IO.File.Copy(SysAppPath.GetCurrentAppPath() + "工作空间\\模板\\临时文件\\TempMDB.mdb", path, true);
}
if (_ReportService == null)
_ReportService = BundleRuntime.Instance.GetFirstOrDefaultService<IReportService>();
if (_ReportService != null)
{
_ReportService.InitMJHZJCTJBData(sNMK_MDBPath, path);
}
else
{
LogAPI.Debug("未能获取到报表输出服务,无法进行报表输出!");
}
}
ProgressHelper.CloseProcessBar();
try
{
GeoDBAPI.CompactAccessDataBaseByWorkspace(null, sNMK_MDBPath);
}
catch (Exception ex_1)
{
}
#endregion
}
catch (Exception ex)
{
LogAPI.Debug("年末库平差失败,异常原因: " + ex + " ; ");
ProgressHelper.CloseProcessBar();
MessageHelper.ShowError("汇总平差错误:" + ex.Message);
return;
}
finally
{
ProgressHelper.CloseProcessBar();
if (dbHelper != null)
{
dbHelper.DisConnect();
}
}
}
#endregion
#region
public static List<ResultsCatalog> GetResultsCatalog()
{
List<ResultsCatalog> result = new List<ResultsCatalog>();
try
{
XmlDocument doc = new XmlDocument();
string strPath = SysAppPath.GetResultsCataCfgForBGNMKPath();
doc.Load(strPath);
XmlNode nodeDataCatalog = doc.SelectSingleNode("ResultsCatalog");
if (nodeDataCatalog == null)
return result;
List<DataDicTionary> qsDic = Platform.Instance.DicHelper.GetNoGroupDic(DicTypeEnum.QSDM);
foreach (XmlNode item in nodeDataCatalog.ChildNodes)
{
if (item.Name == "DataCatalog")
{
ResultsCatalog rootCatalog = new ResultsCatalog();
rootCatalog.Name = item.Attributes["Name"] == null ? "" : item.Attributes["Name"].Value;
rootCatalog.Path = rootCatalog.Name;
rootCatalog.Type = "Directory";
if (item.ChildNodes != null)
{
List<ResultsCatalog> tree = GetSubCatalog(item, rootCatalog);
if (rootCatalog.SubCatalog == null)
rootCatalog.SubCatalog = new List<ResultsCatalog>();
rootCatalog.SubCatalog.AddRange(tree);
}
if (qsDic != null)
{
DataDicTionary dic = qsDic.FirstOrDefault(f => f.CODE.Length == 2);
if (dic != null)
{
rootCatalog.Path = rootCatalog.Path.Replace("*省", dic.NAME);
rootCatalog.Name = rootCatalog.Name.Replace("*省", dic.NAME);
}
dic = qsDic.FirstOrDefault(f => f.CODE.Length == 4);
if (dic != null)
{
rootCatalog.Path = rootCatalog.Path.Replace("*市", dic.NAME);
rootCatalog.Name = rootCatalog.Name.Replace("*市", dic.NAME);
}
dic = qsDic.FirstOrDefault(f => f.CODE == (MapsManager.Instance.MapService.GetProjectInfo() as ProjectInfo).CODE);
//dic = qsDic.FindLast(f => == (MapsManager.Instance.MapService.GetProjectInfo() as ProjectInfo).CODE);
if (dic != null)
{
rootCatalog.Path = rootCatalog.Path.Replace("*县", dic.NAME);
rootCatalog.Name = rootCatalog.Name.Replace("*县", dic.NAME);
}
}
rootCatalog.Path = rootCatalog.Path.Replace("县行政区划代码6位", (MapsManager.Instance.MapService.GetProjectInfo() as ProjectInfo).CODE);
rootCatalog.Name = rootCatalog.Name.Replace("县行政区划代码6位", (MapsManager.Instance.MapService.GetProjectInfo() as ProjectInfo).CODE).Replace("年代代码4位", DateTime.Now.Year.ToString()).Replace("比例尺代码1位", (MapsManager.Instance.MapService.GetProjectInfo() as ProjectInfo).ScaleCode);
result.Add(rootCatalog);
}
}
return result;
}
catch (Exception ex)
{
LogAPI.Debug(ex);
throw;
}
}
public static List<ResultsCatalog> GetSubCatalog(XmlNode pNode, ResultsCatalog pCatalog)
{
List<ResultsCatalog> result = new List<ResultsCatalog>();
if (pNode != null && pNode.ChildNodes != null)
{
string sPName = pNode.Attributes["Name"] == null ? "" : pNode.Attributes["Name"].Value.ToString();
sPName = sPName.Replace("县行政区划代码6位", (MapsManager.Instance.MapService.GetProjectInfo() as ProjectInfo).CODE).Replace("年代代码4位", DateTime.Now.Year.ToString()).Replace("比例尺代码1位", (MapsManager.Instance.MapService.GetProjectInfo() as ProjectInfo).ScaleCode);
List<DataDicTionary> qsDic = Platform.Instance.DicHelper.GetNoGroupDic(DicTypeEnum.QSDM);
if (qsDic != null)
{
DataDicTionary dic = qsDic.FirstOrDefault(f => f.CODE.Length == 2);
if (dic != null)
{
sPName = sPName.Replace("*省", dic.NAME);
}
dic = qsDic.FirstOrDefault(f => f.CODE.Length == 4);
if (dic != null)
{
sPName = sPName.Replace("*市", dic.NAME);
}
dic = qsDic.FirstOrDefault(f => f.CODE == (MapsManager.Instance.MapService.GetProjectInfo() as ProjectInfo).CODE);
if (dic != null)
{
sPName = sPName.Replace("*县", dic.NAME);
}
}
foreach (XmlNode item in pNode.ChildNodes)
{
ResultsCatalog catalog = new ResultsCatalog();
try
{
if (item.Attributes != null && item.Attributes["ShowFilter"] != null)
{
string[] showFilter = item.Attributes["ShowFilter"].Value.ToString().Split('_');
if (!(MapsManager.Instance.MapService.GetProjectInfo() as ProjectInfo).CODE.StartsWith(showFilter[0]) && !sPName.StartsWith(showFilter[1]))
{
continue;
}
}
catalog.Name = item.Attributes["Name"] == null ? "" : item.Attributes["Name"].Value;
catalog.Path = System.IO.Path.Combine(pCatalog.Path, catalog.Name);
catalog.CopyFile = item.Attributes["CopyFile"] == null ? "" : item.Attributes["CopyFile"].Value;
catalog.Type = item.Name;
catalog.Parent = pCatalog;
if (qsDic != null)
{
DataDicTionary dic = qsDic.FirstOrDefault(f => f.CODE.Length == 2);
if (dic != null)
{
catalog.Path = catalog.Path.Replace("*省", dic.NAME);
catalog.Name = catalog.Name.Replace("*省", dic.NAME);
}
dic = qsDic.FirstOrDefault(f => f.CODE.Length == 4);
if (dic != null)
{
catalog.Path = catalog.Path.Replace("*市", dic.NAME);
catalog.Name = catalog.Name.Replace("*市", dic.NAME);
}
dic = qsDic.FirstOrDefault(f => f.CODE == (MapsManager.Instance.MapService.GetProjectInfo() as ProjectInfo).CODE);
if (dic != null)
{
catalog.Path = catalog.Path.Replace("*县", dic.NAME);
catalog.Name = catalog.Name.Replace("*县", dic.NAME);
}
}
catalog.Path = catalog.Path.Replace("县行政区划代码6位", (MapsManager.Instance.MapService.GetProjectInfo() as ProjectInfo).CODE);
catalog.Name = catalog.Name.Replace("县行政区划代码6位", (MapsManager.Instance.MapService.GetProjectInfo() as ProjectInfo).CODE).Replace("年代代码4位", DateTime.Now.Year.ToString()).Replace("比例尺代码1位", (MapsManager.Instance.MapService.GetProjectInfo() as ProjectInfo).ScaleCode);
result.Add(catalog);
}
catch (Exception ex)
{ }
if (item.ChildNodes != null)
{
if ("ReportExcel,ReportWord".Contains(item.Name))
{
ReadAttribute(item, catalog);
}
else
{
catalog.SubCatalog = GetSubCatalog(item, catalog);
}
}
}
}
return result;
}
private static void ReadAttribute(XmlNode pNode, ResultsCatalog pCatalog)
{
if (pNode != null && pNode.ChildNodes != null)
{
foreach (XmlNode item in pNode.ChildNodes)
{
switch (item.Name)
{
case "ReportType":
pCatalog.FileType = item.InnerText;
break;
case "TempalateFileName":
pCatalog.FileTempalate = item.InnerText;
break;
default:
break;
}
}
}
}
#endregion
/// <summary>
/// 创建FileMDB
/// </summary>
/// <param name="fullPath">路径名</param>
public static void CreateFileMDB(string fullPath, string gdbName)
{
string temp = SysAppPath.GetTemplatePath() + "Temp.mdb";
if (File.Exists(temp))
{
File.Copy(temp, fullPath);
}
}
private IFeatureDataset CreateFeatureDataset(IDataset pDataset, KGIS.Framework.AE.WorkspaceAPI workspaceAPI)
{
try
{
IFeatureWorkspace targetWorkspac = workspaceAPI.CurrentWorkspace as IFeatureWorkspace;
ISpatialReference SpatialReference = new UnknownCoordinateSystemClass();
IControlPrecision2 pCP = SpatialReference as IControlPrecision2;
//要素分辨率
ISpatialReferenceResolution spatialReferenceResolution = SpatialReference as ISpatialReferenceResolution;
spatialReferenceResolution.set_XYResolution(false, 0.000005);
spatialReferenceResolution.set_ZResolution(false, 0.000005);
//要素数据集容差
ISpatialReferenceTolerance spatialReferenceTolerance = SpatialReference as ISpatialReferenceTolerance;
double tolerance = 0;
if (double.TryParse(KGIS.Framework.Utils.SysConfigsOprator.GetAppsetingValueByKey("Tolerance"), out tolerance))
{
spatialReferenceTolerance.XYTolerance = tolerance;
spatialReferenceTolerance.ZTolerance = tolerance;
spatialReferenceTolerance.MTolerance = tolerance;
}
else
{
spatialReferenceTolerance.XYTolerance = 0.0001;
spatialReferenceTolerance.ZTolerance = 0.0001;
spatialReferenceTolerance.MTolerance = 0.0001;
}
SpatialReference.SetDomain(0, 45035996273.705, 0, 45035996273.705);
return targetWorkspac.CreateFeatureDataset("土地调查标准数据集", SpatialReference);
}
catch (Exception ex)
{
LogAPI.Debug("异常原因: " + ex + " ; ");
throw ex;
}
}
}
}