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.
1300 lines
58 KiB
1300 lines
58 KiB
using ESRI.ArcGIS.ADF; |
|
using ESRI.ArcGIS.Carto; |
|
using ESRI.ArcGIS.DataSourcesFile; |
|
using ESRI.ArcGIS.Geodatabase; |
|
using KGIS.Framework.AE; |
|
using KGIS.Framework.OpenData.Control; |
|
using KGIS.Framework.OpenData.Filter; |
|
using KGIS.Framework.OpenData.InterFace; |
|
using Kingo.OpenData.Filter; |
|
using System; |
|
using System.Collections.Generic; |
|
using System.ComponentModel; |
|
using System.IO; |
|
using System.Linq; |
|
using System.Windows; |
|
using KGIS.Framework.Utils; |
|
using KGIS.Framework.Utils.Helper; |
|
using KGIS.Framework.Maps; |
|
using Path = System.IO.Path; |
|
using KGIS.Framework.Platform; |
|
using Kingo.PluginServiceInterface; |
|
using KGIS.Framework.AE.Enum; |
|
using UIShell.OSGi; |
|
using KGIS.Framework.DBOperator; |
|
using System.Data; |
|
using KGIS.Framework.Utils.Utility; |
|
using KUI.Windows; |
|
using System.Runtime.InteropServices; |
|
using Kingo.PluginServiceInterface.Helper.VCT; |
|
using Kingo.PluginServiceInterface.Model; |
|
|
|
namespace Kingo.Plugin.DataLoad.View |
|
{ |
|
/// <summary> |
|
/// 参考数据加载 的交互逻辑 |
|
/// </summary> |
|
public partial class FrmLoadOtherData : BaseWindow |
|
{ |
|
|
|
private IDataCatalogService _DataCatalog = null; |
|
|
|
public bool shutDown = false; |
|
|
|
/// <summary> |
|
/// 导入数据类型(mdb文件为空,Shape文件为Shape) |
|
/// </summary> |
|
public string ImportDataType { get; set; } |
|
|
|
private List<IFeatureClass> pSourceFCList; |
|
|
|
private string TargetGDBPath = string.Empty; |
|
private string SourceMDBPath { get; set; } |
|
/// <summary> |
|
/// 拷贝参考数据路径 |
|
/// </summary> |
|
private string TempFinalLocation { get; set; } |
|
private List<ISpatialDataObject> TempSelection { get; set; } |
|
|
|
/// <summary> |
|
/// 当前工程参考数据路径 |
|
/// </summary> |
|
private string projectOtherDataPath = string.Empty; |
|
public FrmLoadOtherData() |
|
{ |
|
InitializeComponent(); |
|
if (_DataCatalog == null) |
|
_DataCatalog = BundleRuntime.Instance.GetFirstOrDefaultService<IDataCatalogService>(); |
|
BindOtherDataPath(); |
|
//隐藏复选框 |
|
cbCopyBaseData.Height = 0; |
|
} |
|
|
|
#region 最新数据加载 |
|
private void BindOtherDataPath() |
|
{ |
|
try |
|
{ |
|
IWorkCatalog workCatalog = BundleRuntime.Instance.GetFirstOrDefaultService<IWorkCatalog>(); |
|
string code = (MapsManager.Instance.CurrProjectInfo as ProjectInfo).CODE; |
|
string xzqmc = GetXZQMC(code); |
|
string xzqDir = string.Format("{0}({1})", xzqmc, code); |
|
if (workCatalog != null && !string.IsNullOrWhiteSpace(code)) |
|
{ |
|
string projectPath = Path.Combine(workCatalog.SaveWorkSapcePath, xzqDir, "参考数据"); |
|
if (Directory.Exists(projectPath)) |
|
{ |
|
List<string> dataPathList = new List<string>(); |
|
GetOtherDataPath(projectPath, dataPathList); |
|
if (dataPathList.Count != 0) |
|
{ |
|
this.cobDataBase.ItemsSource = dataPathList; |
|
} |
|
} |
|
} |
|
} |
|
catch (Exception ex) |
|
{ |
|
LogAPI.Debug("获取参考数据文件失败:" + ex); |
|
MessageHelper.Show("获取参考数据文件失败:" + ex); |
|
} |
|
} |
|
|
|
private string GetXZQMC(string xzqdm) |
|
{ |
|
string xzqmc = string.Empty; |
|
KGIS.Framework.DBOperator.IRDBHelper rdbHelper = null; |
|
try |
|
{ |
|
string systemPath = SysAppPath.GetDataBasePath() + "System.mdb"; |
|
if (File.Exists(systemPath)) |
|
{ |
|
string connStr = SysConfigsOprator.GetDBConnectionByName("MDBOledbConnection"); |
|
connStr = string.Format(connStr, systemPath); |
|
rdbHelper = RDBFactory.CreateDbHelper(connStr, DatabaseType.MSAccess); |
|
//string strSQL = "select OBJECTID AS ID, XZQ AS CODE,XZQMC AS NAME from XZQ Where XZQ LIKE '" + xzqdm + "%'"; |
|
string strSQL = string.Format("select OBJECTID AS ID, XZQ AS CODE,XZQMC AS NAME from XZQ Where XZQ = '{0}'", xzqdm); |
|
DataTable dt = rdbHelper.ExecuteDatatable("Dic", strSQL, true); |
|
if (dt != null) |
|
{ |
|
List<DataDicTionary> xzqCoderesult = TBToList.ToList<DataDicTionary>(dt); |
|
foreach (var item in xzqCoderesult) |
|
{ |
|
if (dt.Rows.Count == 1) |
|
xzqmc = item.NAME; |
|
} |
|
} |
|
} |
|
} |
|
catch (Exception ex) |
|
{ |
|
LogAPI.Debug(ex); |
|
} |
|
finally |
|
{ |
|
if (rdbHelper != null) |
|
rdbHelper.DisConnect(); |
|
} |
|
return xzqmc; |
|
} |
|
|
|
private void GetOtherDataPath(string dirPath, List<string> pathList) |
|
{ |
|
try |
|
{ |
|
string[] dirArr = Directory.GetDirectories(dirPath); |
|
string[] fileArr = Directory.GetFiles(dirPath); |
|
|
|
// 遍历所有文件 |
|
if (fileArr.Length > 0) |
|
{ |
|
string fileName; |
|
foreach (string file in fileArr) |
|
{ |
|
fileName = Path.GetFileName(file); |
|
if ((fileName.ToLower().Contains(".vct") || fileName.ToLower().Contains(".mdb")) && !pathList.Contains(file)) |
|
{ |
|
pathList.Add(file); |
|
} |
|
} |
|
} |
|
|
|
// 遍历所有文件夹 |
|
if (dirArr.Length > 0) |
|
{ |
|
string folderName; |
|
foreach (string dir in dirArr) |
|
{ |
|
folderName = Path.GetFileName(dir); |
|
if (folderName.ToLower().Contains(".gdb") && !pathList.Contains(dir)) |
|
{ |
|
pathList.Add(dir); |
|
} |
|
GetOtherDataPath(dir, pathList); |
|
} |
|
} |
|
} |
|
catch (Exception ex) |
|
{ |
|
LogAPI.Debug("获取参考数据文件失败:" + ex); |
|
} |
|
} |
|
|
|
/// <summary> |
|
/// 文件路径加载切换事件 |
|
/// </summary> |
|
/// <param name="sender"></param> |
|
/// <param name="e"></param> |
|
private void CobDataBase_SelectedIndexChanged(object sender, RoutedEventArgs e) |
|
{ |
|
if (this.cobDataBase.ItemsSource != null) |
|
{ |
|
try |
|
{ |
|
IFeatureClass pSourceFeatureClass = null; |
|
if (this.cobDataBase.SelectedItem == null) return; |
|
string selectedPath = this.cobDataBase.SelectedItem.ToString(); |
|
using (ComReleaser com = new ComReleaser()) |
|
{ |
|
IWorkspaceFactory pWorkspaceFactory = null; |
|
IWorkspace pWorkspace = null; |
|
IFeatureWorkspace pFeatureWorkspace = null; |
|
if (string.IsNullOrWhiteSpace(ImportDataType)) |
|
ImportDataType = Path.GetExtension(selectedPath).ToUpper().Replace('.', ' ').TrimStart(); |
|
|
|
this.ShowLoading("正在打开数据文件...", 0, 0); |
|
System.Threading.Thread.Sleep(1000); |
|
string fileName = string.Empty; |
|
if (string.IsNullOrWhiteSpace(ImportDataType)) |
|
{ |
|
ImportDataType = "Shape"; |
|
List<string> shpPathList = new List<string>(); |
|
if (shpPathList.Count == 0) |
|
{ |
|
(this.cobDataBase.ItemsSource as List<string>).Remove(selectedPath); |
|
this.cobDataBase.RefreshData(); |
|
MessageHelper.ShowError("当前路径错误,请重新选择!"); |
|
return; |
|
} |
|
if (Directory.Exists(selectedPath)) |
|
{ |
|
string[] fileArr = Directory.GetFiles(selectedPath); |
|
|
|
// 遍历所有文件 |
|
if (fileArr.Length > 0) |
|
{ |
|
foreach (string file in fileArr) |
|
{ |
|
string extension = Path.GetExtension(file); |
|
if (extension.ToLower() == ".shp" && !shpPathList.Contains(file)) |
|
{ |
|
shpPathList.Add(file); |
|
} |
|
} |
|
} |
|
|
|
pSourceFCList = new List<IFeatureClass>(); |
|
for (int i = 0; i < shpPathList.Count; i++) |
|
{ |
|
pWorkspaceFactory = new ShapefileWorkspaceFactoryClass(); |
|
pWorkspace = pWorkspaceFactory.OpenFromFile(System.IO.Path.GetDirectoryName(shpPathList[i]), 0); |
|
pFeatureWorkspace = pWorkspace as IFeatureWorkspace; |
|
string name = Path.GetFileName(shpPathList[i]); |
|
pSourceFeatureClass = pFeatureWorkspace.OpenFeatureClass(name); |
|
pSourceFCList.Add(pSourceFeatureClass); |
|
fileName += name + ";"; |
|
} |
|
|
|
if (pSourceFCList.Count > 0) |
|
{ |
|
SetShapeTableMapping(); |
|
} |
|
} |
|
} |
|
else if (!string.IsNullOrWhiteSpace(ImportDataType) && ImportDataType.Equals("Shape") && pSourceFCList.Count != 0) |
|
{ |
|
SetShapeTableMapping(); |
|
} |
|
else if (!string.IsNullOrWhiteSpace(ImportDataType) && ImportDataType.Equals("VCT")) |
|
{ |
|
string TempMDBFolderPath = Path.GetTempPath(); |
|
string TempMDBPath = Path.Combine(TempMDBFolderPath, string.Format("{0}.mdb", Path.GetFileNameWithoutExtension(selectedPath))); |
|
if (File.Exists(TempMDBPath)) |
|
{ |
|
File.Delete(TempMDBPath); |
|
} |
|
this.ShowLoading("正在解析VCT文件... ...", 0, 0); |
|
VCTToMDBHelper3 vcttomdb = new VCTToMDBHelper3(); |
|
vcttomdb.RootPath = TempMDBFolderPath; |
|
vcttomdb.VCTToMDB(selectedPath); |
|
this.CloseLoading(); |
|
if (!File.Exists(TempMDBPath)) |
|
{ |
|
MessageHelper.ShowError("VCT文件解析失败"); |
|
return; |
|
} |
|
SourceMDBPath = TempMDBPath; |
|
SetTableMapping(); |
|
} |
|
else |
|
{ |
|
SetTableMapping(); |
|
} |
|
this.CloseLoading(); |
|
com.ManageLifetime(pWorkspaceFactory); |
|
com.ManageLifetime(pWorkspace); |
|
com.ManageLifetime(pFeatureWorkspace); |
|
} |
|
} |
|
catch (Exception ex) |
|
{ |
|
LogAPI.Debug("选择参考数据库失败:" + ex); |
|
this.CloseLoading(); |
|
MessageHelper.Show("选择参考数据库失败:" + ex); |
|
} |
|
finally |
|
{ |
|
this.CloseLoading(); |
|
} |
|
} |
|
} |
|
|
|
private void SetTableMapping() |
|
{ |
|
IWorkspaceAPI t_WsAPI = null; |
|
IWorkspaceAPI s_WsAPI = null; |
|
IFeatureClassAPI s_FCAPI = null; |
|
try |
|
{ |
|
dgTableMapping.ItemsSource = null; |
|
string s_MdbPath = null; |
|
if (ImportDataType == "VCT") |
|
{ |
|
s_MdbPath = SourceMDBPath; |
|
} |
|
else |
|
{ |
|
if (this.cobDataBase.SelectedItem != null) |
|
s_MdbPath = this.cobDataBase.SelectedItem.ToString(); |
|
} |
|
if ((ImportDataType == "MDB" || ImportDataType == "VCT") && !File.Exists(s_MdbPath)) |
|
{ |
|
this.CloseLoading(); |
|
MessageHelper.ShowTips("请确保文件存在,并且为mdb文件!"); |
|
return; |
|
} |
|
else if (ImportDataType == "GDB" && !Directory.Exists(s_MdbPath)) |
|
{ |
|
this.CloseLoading(); |
|
MessageHelper.ShowTips("请确保GDB文件夹存在!"); |
|
return; |
|
} |
|
if (ImportDataType == "MDB" || ImportDataType == "VCT") |
|
{ |
|
FileInfo s_MdbPathInfo = new FileInfo(s_MdbPath); |
|
if (!s_MdbPathInfo.Extension.Equals(".mdb")) |
|
{ |
|
this.CloseLoading(); |
|
MessageHelper.ShowTips("必须为mdb文件才能进行导入!"); |
|
return; |
|
} |
|
} |
|
|
|
if (ImportDataType == "MDB" || ImportDataType == "VCT") |
|
{ |
|
s_WsAPI = new WorkspaceAPI(s_MdbPath, WorkspaceTypeEnum.MDBFile); |
|
} |
|
else if (ImportDataType == "GDB" && Directory.Exists(s_MdbPath)) |
|
{ |
|
s_WsAPI = new WorkspaceAPI(s_MdbPath, WorkspaceTypeEnum.GDBFile); |
|
} |
|
else if (!Directory.Exists(s_MdbPath) && !File.Exists(s_MdbPath)) |
|
{ |
|
return; |
|
} |
|
|
|
List<KeyAndValue> s_TbList = s_WsAPI.GetFeatureClassName(esriDatasetType.esriDTFeatureDataset).Where(x => !x.Value.StartsWith("TDQSQ") && !x.Value.StartsWith("JC_CZCDYD")).Select(x => new KeyAndValue() { S_Key = x.Key, S_Value = x.Value }).ToList();//周旺华 0424 排除TDQSQ导致的导入问题 |
|
Dictionary<string, string> s_TbList2 = s_WsAPI.GetFeatureClassName(esriDatasetType.esriDTFeatureClass); |
|
Dictionary<string, string> s_TbList3 = s_WsAPI.GetFeatureClassName(esriDatasetType.esriDTTable); |
|
foreach (string item in s_TbList2.Keys) |
|
{ |
|
if (!s_TbList.Select(x => x.S_Value).Contains(item)) |
|
s_TbList.Add(new KeyAndValue() { S_Key = item, S_Value = s_TbList2[item] }); |
|
} |
|
|
|
if (s_TbList != null) |
|
{ |
|
List<TableMapping> MappingList = new List<TableMapping>(); |
|
foreach (string key in s_TbList.Select(x => x.S_Key)) |
|
{ |
|
var s_keyvalue = s_TbList.FirstOrDefault(x => x.S_Key == key).S_Value; |
|
TableMapping mapping = new TableMapping(); |
|
|
|
mapping.State = TBState.Waiting; |
|
mapping.S_TableName = s_keyvalue; |
|
mapping.S_TableAliasName = key; |
|
|
|
if (s_TbList3.Values.Contains(mapping.S_TableName)) |
|
{ |
|
mapping.S_TableType = "Table"; |
|
} |
|
else |
|
{ |
|
s_FCAPI = s_WsAPI.OpenFeatureClass(s_keyvalue); |
|
mapping.S_Spatial = (s_FCAPI.FeatureClass as IGeoDataset).SpatialReference.Name; |
|
mapping.S_TableType = s_FCAPI.FeatureClass.ShapeType.ToString(); |
|
s_FCAPI.CloseFeatureClass(); |
|
} |
|
mapping.T_TableName = s_keyvalue; |
|
mapping.T_TableAliasName = key; |
|
MappingList.Add(mapping); |
|
|
|
} |
|
dgTableMapping.ItemsSource = MappingList; |
|
} |
|
} |
|
catch (Exception ex) |
|
{ |
|
LogAPI.Debug(ex); |
|
MessageHelper.ShowTips(ex.Message); |
|
} |
|
finally |
|
{ |
|
if (s_WsAPI != null) |
|
s_WsAPI.CloseWorkspace(); |
|
if (t_WsAPI != null) |
|
t_WsAPI.CloseWorkspace(); |
|
if (s_FCAPI != null) |
|
{ |
|
s_FCAPI.CloseFeatureClass(); |
|
s_FCAPI = null; |
|
} |
|
} |
|
} |
|
|
|
private void SetShapeTableMapping() |
|
{ |
|
try |
|
{ |
|
dgTableMapping.ItemsSource = null; |
|
List<TableMapping> MappingList = new List<TableMapping>(); |
|
foreach (IFeatureClass pSourceFeatureClass in pSourceFCList) |
|
{ |
|
//pSourceFeatureClass.CheckArea(); |
|
TableMapping mapping = new TableMapping(); |
|
mapping.State = TBState.Waiting; |
|
mapping.S_TableName = (pSourceFeatureClass as FeatureClass).Name; |
|
mapping.S_TableAliasName = pSourceFeatureClass.AliasName; |
|
|
|
mapping.S_Spatial = (pSourceFeatureClass as IGeoDataset).SpatialReference.Name; |
|
mapping.S_TableType = pSourceFeatureClass.ShapeType.ToString(); |
|
|
|
mapping.T_TableName = (pSourceFeatureClass as FeatureClass).Name; |
|
mapping.T_TableAliasName = pSourceFeatureClass.AliasName; |
|
mapping.S_TableType = pSourceFeatureClass.ShapeType.ToString(); |
|
|
|
MappingList.Add(mapping); |
|
} |
|
|
|
dgTableMapping.ItemsSource = MappingList; |
|
//JudgeIsTheSameSpatialReference(); |
|
} |
|
catch (Exception ex) |
|
{ |
|
LogAPI.Debug(ex); |
|
MessageHelper.ShowTips(ex.Message); |
|
} |
|
|
|
} |
|
|
|
/// <summary> |
|
/// 重置导入 |
|
/// </summary> |
|
public void ResetImport() |
|
{ |
|
try |
|
{ |
|
//将选中的数据源地址清空 |
|
this.cobDataBase.SelectedItem = null; |
|
//将映射关系置空 |
|
if (dgTableMapping != null) |
|
{ |
|
if (dgTableMapping.ItemsSource != null) |
|
{ |
|
dgTableMapping.ItemsSource = null; |
|
} |
|
dgTableMapping.UnselectAll(); |
|
dgTableMapping.RefreshData(); |
|
} |
|
} |
|
catch (Exception ex) |
|
{ |
|
LogAPI.Debug("重置 " + ImportDataType + " 的导入失败,异常原因: " + ex + " ; "); |
|
} |
|
} |
|
|
|
/// <summary> |
|
/// 全选和反选事件 |
|
/// </summary> |
|
/// <param name="sender"></param> |
|
/// <param name="e"></param> |
|
private void chkSelectedAll_EditValueChanged(object sender, DevExpress.Xpf.Editors.EditValueChangedEventArgs e) |
|
{ |
|
try |
|
{ |
|
if (this.dgTableMapping == null || (dgTableMapping.ItemsSource as List<TableMapping>) == null) |
|
{ |
|
return; |
|
} |
|
List<TableMapping> listTableMapping = (dgTableMapping.ItemsSource as List<TableMapping>); |
|
bool check = (sender as DevExpress.Xpf.Editors.CheckEdit).IsChecked == null ? false : bool.Parse((sender as DevExpress.Xpf.Editors.CheckEdit).IsChecked.Value.ToString()); |
|
if (check) |
|
{ |
|
listTableMapping.ForEach(x => x.State = TBState.Waiting); |
|
} |
|
else |
|
{ |
|
listTableMapping.ForEach(x => x.State = TBState.Delete); |
|
} |
|
dgTableMapping.RefreshData(); |
|
} |
|
catch (Exception ex) |
|
{ |
|
MessageHelper.ShowTips("全选发生异常:" + ex.Message); |
|
} |
|
} |
|
|
|
private void BtnLoad_Click(object sender, RoutedEventArgs e) |
|
{ |
|
try |
|
{ |
|
//外部数据拷贝至工作目录参考数据文件夹 |
|
if (this.cbCopyBaseData.IsChecked == true && TempSelection != null) |
|
{ |
|
IWorkCatalog workCatalog = BundleRuntime.Instance.GetFirstOrDefaultService<IWorkCatalog>(); |
|
string code = (MapsManager.Instance.CurrProjectInfo as ProjectInfo).CODE; |
|
string xzqmc = GetXZQMC(code); |
|
string xzqDir = string.Format("{0}({1})", xzqmc, code); |
|
if (workCatalog != null && !string.IsNullOrWhiteSpace(code)) |
|
{ |
|
projectOtherDataPath = Path.Combine(workCatalog.SaveWorkSapcePath, xzqDir, "参考数据"); |
|
if (!Directory.Exists(projectOtherDataPath)) |
|
Directory.CreateDirectory(projectOtherDataPath); |
|
|
|
if (ImportDataType == "GDB") |
|
{ |
|
DirectoryCopy(TempFinalLocation, projectOtherDataPath); |
|
} |
|
else |
|
{ |
|
for (int i = 0; i < TempSelection.Count; i++) |
|
{ |
|
|
|
string name = Path.GetFileName(TempSelection[i].FullName); |
|
string nameWithoutExtension = Path.GetFileNameWithoutExtension(TempSelection[i].FullName); |
|
if (ImportDataType == "SHP") |
|
{ |
|
string shpDir = Path.GetDirectoryName(TempSelection[i].FullName); |
|
string[] fileArr = Directory.GetFiles(shpDir); |
|
for (int j = 0; j < fileArr.Length; j++) |
|
{ |
|
string name2 = Path.GetFileName(fileArr[j]); |
|
string name2WithoutExtension = Path.GetFileNameWithoutExtension(fileArr[j]); |
|
if (nameWithoutExtension == name2WithoutExtension) |
|
File.Copy(fileArr[j], projectOtherDataPath + "\\" + name2, true); |
|
} |
|
} |
|
else |
|
{ |
|
File.Copy(TempSelection[i].FullName, projectOtherDataPath + "\\" + name, true); |
|
} |
|
} |
|
} |
|
} |
|
} |
|
if (!string.IsNullOrWhiteSpace(ImportDataType) && ImportDataType.Equals("Shape")) |
|
{ |
|
LoadShpData(); |
|
} |
|
else |
|
{ |
|
LoadData(); |
|
} |
|
//刷新视图 |
|
//Platform.Instance.SendMsg(new KGIS.Framework.Utils.Interface.NotifyMsgPackage() { MsgType = "RefreshLayer" }); |
|
} |
|
catch (Exception ex) |
|
{ |
|
MessageHelper.ShowError(ex.Message); |
|
LogAPI.Debug(ex); |
|
} |
|
} |
|
|
|
private void LoadData() |
|
{ |
|
this.btnLoad.IsEnabled = false; |
|
List<TableMapping> mapping = dgTableMapping.ItemsSource as List<TableMapping>; |
|
IWorkspaceAPI pSourceWsAPI = null; |
|
try |
|
{ |
|
if (this.cobDataBase.SelectedItem == null) |
|
{ |
|
MessageHelper.ShowTips("请先选择要导入的参考数据!"); |
|
return; |
|
} |
|
else |
|
{ |
|
if (ImportDataType == "GDB") |
|
{ |
|
if ((Directory.Exists(this.cobDataBase.SelectedItem.ToString()) == false) || this.cobDataBase.SelectedItem.ToString().ToLower().EndsWith(".gdb") == false) |
|
{ |
|
MessageHelper.ShowTips("无效的 " + ImportDataType + " 数据源"); |
|
this.cobDataBase.SelectedItem = null; |
|
return; |
|
} |
|
|
|
} |
|
else//MDB/VCT/DCSJ |
|
{ |
|
if (File.Exists(this.cobDataBase.SelectedItem.ToString()) == false) |
|
{ |
|
MessageHelper.ShowTips("无效的 " + ImportDataType + " 数据源"); |
|
this.cobDataBase.SelectedItem = null; |
|
return; |
|
} |
|
} |
|
} |
|
|
|
string s_MdbPath = null; |
|
if (ImportDataType == "VCT") |
|
{ |
|
s_MdbPath = SourceMDBPath; |
|
} |
|
else if (this.cobDataBase.SelectedItem != null) |
|
{ |
|
s_MdbPath = this.cobDataBase.SelectedItem.ToString(); |
|
} |
|
|
|
if (string.IsNullOrWhiteSpace(s_MdbPath)) return; |
|
if (ImportDataType == "MDB" || ImportDataType == "VCT" || ImportDataType == "DCSJ") |
|
{ |
|
if (!File.Exists(s_MdbPath)) return; |
|
pSourceWsAPI = new WorkspaceAPI(s_MdbPath, WorkspaceTypeEnum.MDBFile); |
|
} |
|
else |
|
{ |
|
if (!Directory.Exists(s_MdbPath)) return; |
|
pSourceWsAPI = new WorkspaceAPI(s_MdbPath, WorkspaceTypeEnum.GDBFile); |
|
} |
|
|
|
if (mapping != null) |
|
{ |
|
//循环导入要素类 |
|
string message = string.Empty; |
|
string errorMessage = string.Empty; |
|
int SuccessImportLayerCount = 0; |
|
int DeletedImportLayerCount = 0; |
|
int FailImportLayerCount = 0; |
|
ILayer layer = MapsManager.Instance.MapService.GetGroupLayer("CKSJ");//获取参考数据图层组 |
|
LayerCfg GroupLayerInfo = null; |
|
if (_DataCatalog != null) |
|
{ |
|
_DataCatalog.GetNodeByLayer(layer); |
|
LayerCfg rootLayer = _DataCatalog.CurrentLayers as LayerCfg; |
|
List<LayerCfg> AllLayers = rootLayer.GetAllItem(); |
|
GroupLayerInfo = AllLayers.FirstOrDefault(f => f.LayerName == layer.Name); |
|
} |
|
foreach (TableMapping table in mapping) |
|
{ |
|
if (shutDown) |
|
{ |
|
return; |
|
} |
|
if (table.State == TBState.Delete) continue; |
|
if (string.IsNullOrWhiteSpace(table.T_TableName) || table.T_TableName == "null" || string.IsNullOrWhiteSpace(table.T_TableAliasName)) |
|
continue; |
|
dgTableMapping.SelectedItem = table; |
|
dgTableMapping.View.ScrollIntoView(dgTableMapping.SelectedItem); |
|
System.Windows.Forms.Application.DoEvents(); |
|
table.State = TBState.BeingImport; |
|
|
|
if (AddLayerToMap(GroupLayerInfo, table, pSourceWsAPI, ref message, ref errorMessage, ref FailImportLayerCount)) |
|
{ |
|
table.State = TBState.EndImport; |
|
SuccessImportLayerCount++; |
|
} |
|
else |
|
{ |
|
table.State = TBState.Delete; |
|
DeletedImportLayerCount++; |
|
} |
|
} |
|
if (_DataCatalog != null) |
|
{ |
|
if (GroupLayerInfo.Layers.Count > 0) |
|
GroupLayerInfo.Expanded = true;//添加数据时展开 |
|
_DataCatalog.UpdateTree(); |
|
} |
|
if (!string.IsNullOrWhiteSpace(errorMessage)) |
|
{ |
|
int TotalImportLayerCount = SuccessImportLayerCount + DeletedImportLayerCount + FailImportLayerCount; |
|
errorMessage = string.Format("共导入{0}个图层,成功{1}个,删除{2}个,失败{3}个。", TotalImportLayerCount, SuccessImportLayerCount, |
|
DeletedImportLayerCount, FailImportLayerCount) + errorMessage; |
|
MessageHelper.Show(errorMessage, true); |
|
} |
|
else |
|
{ |
|
int TotalImportLayerCount = SuccessImportLayerCount + DeletedImportLayerCount + FailImportLayerCount; |
|
message = string.Format("共导入{0}个图层,成功{1}个,删除{2}个,失败{3}个。", TotalImportLayerCount, SuccessImportLayerCount, |
|
DeletedImportLayerCount, FailImportLayerCount) + message; |
|
MessageHelper.Show(message, true); |
|
} |
|
Platform.Instance.SendMsg(new KGIS.Framework.Utils.Interface.NotifyMsgPackage() { MsgType = "SaveProject" }); |
|
//这里设置关闭 |
|
this.Close(); |
|
} |
|
} |
|
catch (Exception ex) |
|
{ |
|
LogAPI.Debug("导入 " + ImportDataType + " 数据时失败,异常原因: " + ex + " ; "); |
|
} |
|
finally |
|
{ |
|
this.btnLoad.IsEnabled = true; |
|
if (pSourceWsAPI != null) |
|
{ |
|
pSourceWsAPI.CloseWorkspace(); |
|
} |
|
if (mapping != null && mapping.Count() > 0) |
|
{ |
|
mapping = null; |
|
} |
|
} |
|
} |
|
|
|
private void LoadShpData() |
|
{ |
|
try |
|
{ |
|
string str = "1234567890"; |
|
if (dgTableMapping.ItemsSource is List<TableMapping> mapping) |
|
{ |
|
//循环导入要素类 |
|
string message = string.Empty; |
|
string errorMessage = string.Empty; |
|
int SuccessImportLayerCount = 0; |
|
int DeletedImportLayerCount = 0; |
|
int FailImportLayerCount = 0; |
|
|
|
ILayer layer = MapsManager.Instance.MapService.GetGroupLayer("CKSJ");//获取参考数据图层组 |
|
LayerCfg GroupLayerInfo = null; |
|
if (_DataCatalog != null) |
|
{ |
|
_DataCatalog.GetNodeByLayer(layer); |
|
LayerCfg rootLayer = _DataCatalog.CurrentLayers as LayerCfg; |
|
List<LayerCfg> AllLayers = rootLayer.GetAllItem(); |
|
GroupLayerInfo = AllLayers.FirstOrDefault(f => f.LayerName == layer.Name); |
|
} |
|
|
|
foreach (TableMapping table in mapping) |
|
{ |
|
//增加控制,以数字开头的图层不能追加到当前工程。对应bug11125 |
|
if (str.Contains(table.S_TableName.Substring(0, 1)) && table.T_TableName == "Add") |
|
{ |
|
MessageHelper.ShowTips("以数字开头的图层不能追加到当前工程!"); |
|
return; |
|
} |
|
if (shutDown) |
|
{ |
|
break; |
|
} |
|
if (table.State == TBState.Delete) |
|
continue; |
|
if (string.IsNullOrWhiteSpace(table.T_TableName) || table.T_TableName == "null" || string.IsNullOrWhiteSpace(table.T_TableAliasName)) |
|
continue; |
|
dgTableMapping.SelectedItem = table; |
|
dgTableMapping.View.ScrollIntoView(dgTableMapping.SelectedItem); |
|
System.Windows.Forms.Application.DoEvents(); |
|
table.State = TBState.BeingImport; |
|
if (AddShpToMap(GroupLayerInfo, table, ref message, ref errorMessage, ref FailImportLayerCount)) |
|
{ |
|
table.State = TBState.EndImport; |
|
SuccessImportLayerCount++; |
|
} |
|
else |
|
{ |
|
table.State = TBState.Delete; |
|
SuccessImportLayerCount++; |
|
} |
|
} |
|
|
|
if (_DataCatalog != null) |
|
{ |
|
if (GroupLayerInfo.Layers.Count > 0) |
|
GroupLayerInfo.Expanded = true; |
|
_DataCatalog.UpdateTree(); |
|
} |
|
MapsManager.Instance.MapService.getAxMapControl().Refresh(); |
|
|
|
if (!string.IsNullOrWhiteSpace(errorMessage)) |
|
{ |
|
int TotalImportLayerCount = SuccessImportLayerCount + DeletedImportLayerCount + FailImportLayerCount; |
|
errorMessage = string.Format("共导入{0}个图层,成功{1}个,删除{2}个,失败{3}个。", TotalImportLayerCount, SuccessImportLayerCount, |
|
DeletedImportLayerCount, FailImportLayerCount) + errorMessage; |
|
MessageHelper.Show(errorMessage, true); |
|
} |
|
else |
|
{ |
|
int TotalImportLayerCount = SuccessImportLayerCount + DeletedImportLayerCount + FailImportLayerCount; |
|
message = string.Format("共导入{0}个图层,成功{1}个,删除{2}个,失败{3}个。", TotalImportLayerCount, SuccessImportLayerCount, |
|
DeletedImportLayerCount, FailImportLayerCount) + message; |
|
MessageHelper.Show(message, true); |
|
} |
|
Platform.Instance.SendMsg(new KGIS.Framework.Utils.Interface.NotifyMsgPackage() { MsgType = "SaveProject" }); |
|
//这里设置关闭 |
|
this.Close(); |
|
} |
|
else |
|
{ |
|
if (this.cobDataBase.SelectedItem == null) |
|
{ |
|
MessageHelper.ShowTips("请先选择 Shape 数据源"); |
|
} |
|
else |
|
{ |
|
string s_MdbPath_T2 = this.cobDataBase.SelectedItem.ToString(); |
|
if (string.IsNullOrWhiteSpace(s_MdbPath_T2) == true) |
|
{ |
|
MessageHelper.ShowTips("请先选择 Shape 数据源"); |
|
} |
|
else |
|
{ |
|
if (Directory.Exists(s_MdbPath_T2) == false) |
|
{ |
|
MessageHelper.ShowTips("选择的 Shape 数据源不存在"); |
|
(this.cobDataBase.ItemsSource as List<string>).Remove(s_MdbPath_T2);// = null; |
|
this.cobDataBase.RefreshData(); |
|
} |
|
else |
|
{ |
|
//判断目录下有没有shape文件 |
|
string[] strFiles = Directory.GetFiles(s_MdbPath_T2); |
|
int iFileDirs = strFiles.Count(); |
|
List<string> ShapeFileNameList = strFiles.ToList(); |
|
|
|
if (ShapeFileNameList == null || ShapeFileNameList.Count <= 0) |
|
{ |
|
MessageHelper.ShowTips("Shape 数据源不能为空"); |
|
(this.cobDataBase.ItemsSource as List<string>).Remove(s_MdbPath_T2);// = null; |
|
this.cobDataBase.RefreshData(); |
|
} |
|
else |
|
{ |
|
bool bHaveShp = false; |
|
foreach (string strFile in strFiles) |
|
{ |
|
if (strFile.ToLower().EndsWith(".shp") == true) |
|
{ |
|
bHaveShp = true; |
|
break; |
|
} |
|
} |
|
|
|
if (bHaveShp == false) |
|
{ |
|
MessageHelper.ShowTips("Shape 数据源不能为空"); |
|
(this.cobDataBase.ItemsSource as List<string>).Remove(s_MdbPath_T2);// = null; |
|
this.cobDataBase.RefreshData(); |
|
} |
|
} |
|
} |
|
} |
|
} |
|
} |
|
} |
|
catch (Exception ex) |
|
{ |
|
throw ex; |
|
} |
|
finally |
|
{ |
|
if (pSourceFCList != null && pSourceFCList.Count > 0) |
|
{ |
|
using (ESRI.ArcGIS.ADF.ComReleaser com = new ComReleaser()) |
|
{ |
|
foreach (IFeatureClass item in pSourceFCList) |
|
{ |
|
com.ManageLifetime(item); |
|
} |
|
} |
|
} |
|
this.CloseLoading(); |
|
} |
|
} |
|
|
|
private bool AddLayerToMap(LayerCfg cksjGroupLayer, TableMapping pTbMaping, IWorkspaceAPI pSourceWsAPI, ref string message, ref string errorMessage, ref int FailImportLayerCount) |
|
{ |
|
if (pSourceWsAPI == null || pSourceWsAPI.CurrentWorkspace == null || cksjGroupLayer == null) |
|
return false; |
|
IFeatureClassAPI s_FcAPI = null; |
|
|
|
try |
|
{ |
|
if (!string.IsNullOrWhiteSpace(pTbMaping.S_TableName) && !string.IsNullOrWhiteSpace(pTbMaping.T_TableName)) |
|
{ |
|
s_FcAPI = pSourceWsAPI.OpenFeatureClass(pTbMaping.S_TableName); |
|
if (s_FcAPI != null && s_FcAPI.FeatureClass != null) |
|
{ |
|
IFeatureLayer pTargetLayer = new FeatureLayer |
|
{ |
|
FeatureClass = s_FcAPI.FeatureClass, |
|
Name = pTbMaping.T_TableAliasName |
|
}; |
|
|
|
ILegendInfo pLegendInfo = pTargetLayer as ILegendInfo; |
|
int legendGroupCount = pLegendInfo.LegendGroupCount; |
|
ILegendGroup pLGroup; |
|
for (int i = 0; i < legendGroupCount; i++) |
|
{ |
|
pLGroup = pLegendInfo.get_LegendGroup(i); |
|
pLGroup.Visible = false; |
|
} |
|
if (cksjGroupLayer.Data is IGroupLayer groupLayer) |
|
{ |
|
ICompositeLayer pComLayer = groupLayer as ICompositeLayer; |
|
for (int i = 0; i < pComLayer.Count; i++) |
|
{ |
|
ILayer layer = pComLayer.Layer[i]; |
|
if ((layer as IDataset).BrowseName == pTbMaping.S_TableName) |
|
{ |
|
groupLayer.Delete(layer); |
|
} |
|
} |
|
} |
|
if (_DataCatalog != null) |
|
{ |
|
//object parentLayer = _DataCatalog.GetNodeByLayer(ncsjGroupLayer); |
|
_DataCatalog.AddLayer(pTargetLayer, cksjGroupLayer); |
|
} |
|
} |
|
return true; |
|
} |
|
return false; |
|
} |
|
catch (Exception ex) |
|
{ |
|
FailImportLayerCount++; |
|
errorMessage += (pTbMaping.S_TableName + "图层数据导入异常!" + ex.Message); |
|
return false; |
|
} |
|
finally |
|
{ |
|
if (s_FcAPI != null) |
|
s_FcAPI.CloseFeatureClass(); |
|
} |
|
} |
|
|
|
public List<T> GetSubLayer<T>(ICompositeLayer group) |
|
{ |
|
List<T> result = new List<T>(); |
|
for (int i = 0; i < group.Count; i++) |
|
{ |
|
var item = group.Layer[i]; |
|
if (item is ICompositeLayer) |
|
{ |
|
result.AddRange(GetSubLayer<T>(item as ICompositeLayer)); |
|
} |
|
else if (item is T) |
|
{ |
|
result.Add((T)item); |
|
} |
|
} |
|
return result; |
|
} |
|
|
|
private bool AddShpToMap(LayerCfg cksjGroupLayer, TableMapping pTbMaping, ref string message, ref string errorMessage, ref int FailImportLayerCount) |
|
{ |
|
if (pSourceFCList == null || cksjGroupLayer == null) |
|
return false; |
|
IFeatureClassAPI t_FcAPI = null; |
|
IFeatureClass pSourceFeatureClass = null; |
|
string currentFiled = string.Empty; |
|
try |
|
{ |
|
if (!string.IsNullOrWhiteSpace(pTbMaping.S_TableName) && !string.IsNullOrWhiteSpace(pTbMaping.T_TableName)) |
|
{ |
|
pSourceFeatureClass = pSourceFCList.Where(p => (p as FeatureClass).Name.Equals(pTbMaping.S_TableName) || p.AliasName.Equals(pTbMaping.S_TableName)).Single(); |
|
if (pSourceFeatureClass == null) |
|
{ |
|
return false; |
|
} |
|
IFeatureLayer pTargetLayer = new FeatureLayer(); |
|
pTargetLayer.FeatureClass = pSourceFeatureClass; |
|
pTargetLayer.Name = pTbMaping.T_TableAliasName; |
|
|
|
ILegendInfo pLegendInfo = pTargetLayer as ILegendInfo; |
|
int legendGroupCount = pLegendInfo.LegendGroupCount; |
|
ILegendGroup pLGroup; |
|
for (int i = 0; i < legendGroupCount; i++) |
|
{ |
|
pLGroup = pLegendInfo.get_LegendGroup(i); |
|
pLGroup.Visible = false; |
|
} |
|
//IGroupLayer groupLayer = cksjGroupLayer as IGroupLayer; |
|
//if (groupLayer != null) |
|
//{ |
|
// ICompositeLayer pComLayer = groupLayer as ICompositeLayer; |
|
// for (int i = 0; i < pComLayer.Count; i++) |
|
// { |
|
// ILayer layer = pComLayer.Layer[i]; |
|
// if ((layer as IDataset).BrowseName == pTbMaping.S_TableName) |
|
// { |
|
// groupLayer.Delete(layer); |
|
// } |
|
// } |
|
//} |
|
//groupLayer.Add(pTargetLayer); |
|
_DataCatalog.AddLayer(pTargetLayer, cksjGroupLayer); |
|
} |
|
return false; |
|
} |
|
catch (Exception ex) |
|
{ |
|
FailImportLayerCount++; |
|
errorMessage += (pTbMaping.S_TableName + "图层数据导入异常!" + ex.Message); |
|
return false; |
|
} |
|
finally |
|
{ |
|
if (t_FcAPI != null) |
|
t_FcAPI.CloseFeatureClass(); |
|
} |
|
} |
|
|
|
/// <summary> |
|
/// 选择本地的参考数据 |
|
/// </summary> |
|
/// <param name="sender"></param> |
|
/// <param name="e"></param> |
|
private void btnSelectedOtherData_Click(object sender, RoutedEventArgs e) |
|
{ |
|
try |
|
{ |
|
using (ComReleaser com = new ComReleaser()) |
|
{ |
|
IWorkspaceFactory pWorkspaceFactory = null; |
|
IWorkspace pWorkspace = null; |
|
IFeatureWorkspace pFeatureWorkspace = null; |
|
IFeatureClass pSourceFeatureClass = null; |
|
List<string> otherDataPathList = new List<string>(); |
|
OpenDataDialog pDialog = new OpenDataDialog(); |
|
ISpatialDataObjectFilter pOFilter = new FilterShapefiles();//Shape文件模式 |
|
pDialog.AddFilter(pOFilter, true); |
|
pOFilter = new FilterGeoDatabasePersonal();//mdb文件模式 |
|
pDialog.AddFilter(pOFilter, true); |
|
//pOFilter = new FilterVCTFile();///VCT文件模式 |
|
//pDialog.AddFilter(pOFilter, true); |
|
pOFilter = new FilterGeoDatabaseFile();//GDB文件格式 |
|
pDialog.AddFilter(pOFilter, true); |
|
pDialog.AllowMultiSelect = false; |
|
pDialog.Title = "选择其他参考数据"; |
|
pDialog.RestoreLocation = true; |
|
pDialog.StartLocation = pDialog.FinalLocation; |
|
System.Windows.Forms.DialogResult dialogResult = pDialog.ShowDialog(); |
|
if (dialogResult == System.Windows.Forms.DialogResult.OK && pDialog.Selection.Count != 0) |
|
{ |
|
ResetImport(); |
|
TempSelection = pDialog.Selection; |
|
TempFinalLocation = pDialog.FinalLocation; |
|
ImportDataType = Path.GetExtension(pDialog.FinalLocation).ToUpper().Replace('.', ' ').TrimStart(); |
|
if (string.IsNullOrWhiteSpace(ImportDataType) || (ImportDataType != "VCT" && ImportDataType != "GDB" && ImportDataType != "MDB" && ImportDataType != "SHP")) |
|
{ |
|
MessageHelper.Show("选择的数据路径有误,请根据过滤条件,重新选择数据库!!"); |
|
return; |
|
} |
|
|
|
if (ImportDataType == "SHP") |
|
{ |
|
ImportDataType = "Shape"; |
|
} |
|
this.cobDataBase.ItemsSource = null; |
|
|
|
string fileName = string.Empty; |
|
|
|
if (!string.IsNullOrWhiteSpace(ImportDataType) && ImportDataType.Equals("Shape")) |
|
{ |
|
pSourceFCList = new List<IFeatureClass>(); |
|
for (int i = 0; i < pDialog.Selection.Count; i++) |
|
{ |
|
pWorkspaceFactory = new ShapefileWorkspaceFactoryClass(); |
|
pWorkspace = pWorkspaceFactory.OpenFromFile(Path.GetDirectoryName(pDialog.Selection[i].FullName), 0); |
|
pFeatureWorkspace = pWorkspace as IFeatureWorkspace; |
|
pSourceFeatureClass = pFeatureWorkspace.OpenFeatureClass(pDialog.Selection[i].Name); |
|
pSourceFCList.Add(pSourceFeatureClass); |
|
fileName += pDialog.Selection[i].Name + ";"; |
|
} |
|
otherDataPathList.Add(fileName); |
|
if (pSourceFCList.Count != 0 && otherDataPathList.Count != 0) |
|
{ |
|
this.cobDataBase.ItemsSource = null; |
|
this.cobDataBase.ItemsSource = otherDataPathList; |
|
this.cobDataBase.SelectedIndex = 0; |
|
} |
|
} |
|
else if (!string.IsNullOrWhiteSpace(ImportDataType) && ImportDataType.Equals("VCT")) |
|
{ |
|
string TempMDBFolderPath = Path.GetTempPath(); |
|
string TempMDBPath = Path.Combine(TempMDBFolderPath, string.Format("{0}.mdb", Path.GetFileNameWithoutExtension(pDialog.FinalLocation))); |
|
if (File.Exists(TempMDBPath)) |
|
{ |
|
File.Delete(TempMDBPath); |
|
} |
|
//this.ShowLoading("正在解析VCT文件... ...", 0, 0); |
|
VCTToMDBHelper3 vcttomdb = new VCTToMDBHelper3(); |
|
vcttomdb.RootPath = TempMDBFolderPath; |
|
vcttomdb.VCTToMDB(pDialog.FinalLocation); |
|
this.CloseLoading(); |
|
if (!File.Exists(TempMDBPath)) |
|
{ |
|
MessageHelper.ShowError("VCT文件解析失败"); |
|
return; |
|
} |
|
SourceMDBPath = TempMDBPath; |
|
otherDataPathList.Add(pDialog.FinalLocation); |
|
this.cobDataBase.ItemsSource = null; |
|
this.cobDataBase.ItemsSource = otherDataPathList; |
|
this.cobDataBase.SelectedIndex = 0; |
|
SetTableMapping(); |
|
} |
|
else |
|
{ |
|
otherDataPathList.Add(pDialog.FinalLocation); |
|
this.cobDataBase.ItemsSource = null; |
|
this.cobDataBase.ItemsSource = otherDataPathList; |
|
this.cobDataBase.SelectedIndex = 0; |
|
SetTableMapping(); |
|
} |
|
} |
|
if (pWorkspaceFactory != null) |
|
{ |
|
com.ManageLifetime(pWorkspaceFactory); |
|
Marshal.ReleaseComObject(pWorkspaceFactory); |
|
} |
|
if (pWorkspace != null) |
|
{ |
|
com.ManageLifetime(pWorkspace); |
|
Marshal.ReleaseComObject(pWorkspace); |
|
} |
|
if (pFeatureWorkspace != null) |
|
{ |
|
com.ManageLifetime(pFeatureWorkspace); |
|
Marshal.ReleaseComObject(pFeatureWorkspace); |
|
} |
|
} |
|
} |
|
catch (Exception ex) |
|
{ |
|
LogAPI.Debug("选择参考数据库失败:" + ex); |
|
MessageHelper.Show("选择参考数据库失败:" + ex); |
|
} |
|
} |
|
|
|
private void BtnSelectedShpData_Click(object sender, RoutedEventArgs e) |
|
{ |
|
try |
|
{ |
|
using (ComReleaser com = new ComReleaser()) |
|
{ |
|
IWorkspaceFactory pWorkspaceFactory = null; |
|
IWorkspace pWorkspace = null; |
|
IFeatureWorkspace pFeatureWorkspace = null; |
|
IFeatureClass pSourceFeatureClass = null; |
|
List<string> baseDataPathList = new List<string>(); |
|
OpenDataDialog pDialog = new OpenDataDialog(); |
|
ISpatialDataObjectFilter pOFilter = new FilterShapefiles();//Shape文件模式 |
|
pDialog.AddFilter(pOFilter, true); |
|
pDialog.AllowMultiSelect = true; |
|
pDialog.Title = "选择其他参考数据"; |
|
pDialog.RestoreLocation = true; |
|
pDialog.StartLocation = pDialog.FinalLocation; |
|
System.Windows.Forms.DialogResult dialogResult = pDialog.ShowDialog(); |
|
if (dialogResult == System.Windows.Forms.DialogResult.OK && pDialog.Selection.Count != 0) |
|
{ |
|
TempSelection = pDialog.Selection; |
|
TempFinalLocation = pDialog.FinalLocation; |
|
ImportDataType = Path.GetExtension(pDialog.FinalLocation).ToUpper().Replace('.', ' ').TrimStart(); |
|
if (string.IsNullOrWhiteSpace(ImportDataType) || (ImportDataType != "VCT" && ImportDataType != "GDB" && ImportDataType != "MDB" && ImportDataType != "SHP")) |
|
{ |
|
MessageHelper.Show("选择的数据路径有误,请根据过滤条件,重新选择数据库!!"); |
|
return; |
|
} |
|
if (ImportDataType == "SHP") |
|
{ |
|
ImportDataType = "Shape"; |
|
} |
|
this.cobDataBase.ItemsSource = null; |
|
string fileName = string.Empty; |
|
if (!string.IsNullOrWhiteSpace(ImportDataType) && ImportDataType.Equals("Shape")) |
|
{ |
|
pSourceFCList = new List<IFeatureClass>(); |
|
for (int i = 0; i < pDialog.Selection.Count; i++) |
|
{ |
|
pWorkspaceFactory = new ShapefileWorkspaceFactoryClass(); |
|
pWorkspace = pWorkspaceFactory.OpenFromFile(Path.GetDirectoryName(pDialog.Selection[i].FullName), 0); |
|
pFeatureWorkspace = pWorkspace as IFeatureWorkspace; |
|
pSourceFeatureClass = pFeatureWorkspace.OpenFeatureClass(pDialog.Selection[i].Name); |
|
pSourceFCList.Add(pSourceFeatureClass); |
|
fileName += pDialog.Selection[i].Name + ";"; |
|
} |
|
baseDataPathList.Add(fileName); |
|
if (pSourceFCList.Count != 0 && baseDataPathList.Count != 0) |
|
{ |
|
this.cobDataBase.ItemsSource = baseDataPathList; |
|
this.cobDataBase.SelectedIndex = 0; |
|
} |
|
} |
|
} |
|
com.ManageLifetime(pWorkspaceFactory); |
|
com.ManageLifetime(pWorkspace); |
|
com.ManageLifetime(pFeatureWorkspace); |
|
|
|
Marshal.ReleaseComObject(pWorkspaceFactory); |
|
Marshal.ReleaseComObject(pWorkspace); |
|
Marshal.ReleaseComObject(pFeatureWorkspace); |
|
} |
|
} |
|
catch (Exception ex) |
|
{ |
|
LogAPI.Debug("选择参考数据库失败:" + ex); |
|
MessageHelper.Show("选择参考数据库失败:" + ex); |
|
} |
|
} |
|
|
|
public bool DirectoryCopy(string sourceDir, string targetDirPath) |
|
{ |
|
try |
|
{ |
|
if (!System.IO.Directory.Exists(sourceDir)) return false; |
|
string targetDir = System.IO.Path.Combine(targetDirPath, System.IO.Path.GetFileName(sourceDir)); |
|
if (!System.IO.Directory.Exists(targetDir)) |
|
{ |
|
System.IO.Directory.CreateDirectory(targetDir); |
|
} |
|
// 文件及文件夹名称数组 |
|
string[] dirArr = System.IO.Directory.GetDirectories(sourceDir); |
|
string[] fileArr = System.IO.Directory.GetFiles(sourceDir); |
|
// 遍历复制所有文件 |
|
if (fileArr.Length > 0) |
|
{ |
|
string fileName; |
|
foreach (string fileDir in fileArr) |
|
{ |
|
fileName = System.IO.Path.GetFileName(fileDir); |
|
System.IO.File.Copy(sourceDir + "\\" + fileName, targetDir + "\\" + fileName, true); |
|
} |
|
} |
|
// 遍历复制所有文件夹 |
|
if (dirArr.Length > 0) |
|
{ |
|
string folderName; |
|
foreach (string dir in dirArr) |
|
{ |
|
folderName = System.IO.Path.GetFileName(dir); |
|
// 递归调用 |
|
System.IO.Directory.CreateDirectory(targetDir + "\\" + folderName); |
|
DirectoryCopy(dir, targetDir + "\\" + folderName); |
|
} |
|
} |
|
return true; |
|
} |
|
catch (Exception ex) |
|
{ |
|
LogAPI.Debug("创建工程目录页面中,文件夹复制时失败,异常原因: " + ex.Message + " ; "); |
|
return false; |
|
throw; |
|
} |
|
} |
|
|
|
private void CheckBox_Click(object sender, RoutedEventArgs e) |
|
{ |
|
TableMapping tbm = dgTableMapping.SelectedItem as TableMapping; |
|
if (tbm != null) |
|
{ |
|
switch (tbm.State) |
|
{ |
|
case TBState.Waiting: |
|
tbm.State = TBState.Delete; |
|
break; |
|
case TBState.Delete: |
|
tbm.State = TBState.Waiting; |
|
break; |
|
case TBState.BeingImport: |
|
break; |
|
case TBState.EndImport: |
|
break; |
|
default: |
|
break; |
|
} |
|
dgTableMapping.RefreshData(); |
|
} |
|
} |
|
|
|
/// <summary> |
|
/// 取消 |
|
/// </summary> |
|
/// <param name="sender"></param> |
|
/// <param name="e"></param> |
|
private void btnClose_Click(object sender, RoutedEventArgs e) |
|
{ |
|
this.Close(); |
|
} |
|
|
|
private void BaseWindow_Closing(object sender, CancelEventArgs e) |
|
{ |
|
this.shutDown = true; |
|
} |
|
#endregion |
|
|
|
} |
|
|
|
}
|
|
|