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.
837 lines
44 KiB
837 lines
44 KiB
using ESRI.ArcGIS.Carto; |
|
using ESRI.ArcGIS.Controls; |
|
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.Commands; |
|
using KGIS.Framework.DBOperator; |
|
using KGIS.Framework.Maps; |
|
using KGIS.Framework.Utils; |
|
using KGIS.Framework.Utils.Helper; |
|
using kingo.Plugin.BGResultManager.Helper; |
|
using Kingo.PluginServiceInterface; |
|
using System; |
|
using System.Collections.Generic; |
|
using System.Data; |
|
using System.IO; |
|
using System.Runtime.InteropServices; |
|
using KUI.Windows; |
|
using ESRI.ArcGIS.esriSystem; |
|
using ESRI.ArcGIS.DataSourcesGDB; |
|
using KGIS.Framework.Utils.ExtensionMethod; |
|
|
|
namespace Kingo.Plugin.BGResultManager.Commands |
|
{ |
|
/// <summary> |
|
/// 变更后年末库导出 |
|
/// </summary> |
|
public class BGENDNMKExportCommand : BaseMenuCommand |
|
{ |
|
private IHookHelper m_hookHelper = null; |
|
public override void OnCreate(object hook) |
|
{ |
|
if (hook == null) |
|
{ |
|
return; |
|
} |
|
try |
|
{ |
|
if (m_hookHelper == null) |
|
{ |
|
m_hookHelper = new HookHelperClass(); |
|
m_hookHelper.Hook = hook; |
|
} |
|
} |
|
catch |
|
{ |
|
m_hookHelper = null; |
|
return; |
|
} |
|
} |
|
|
|
public override void OnClick() |
|
{ |
|
try |
|
{ |
|
ProjectInfo projectInfo = (MapsManager.Instance.MapService.GetProjectInfo() as ProjectInfo); |
|
string Code_Name = GetXZQDic(projectInfo.CODE); |
|
#region 定义变量 |
|
IWorkspaceAPI wsAPI = null; |
|
IFeatureLayer dltbbg_Layer = MapsManager.Instance.MapService.GetFeatureLayerByName("DLTBBG"); |
|
IFeatureLayer dltbgx_Layer = MapsManager.Instance.MapService.GetFeatureLayerByName("DLTBGX"); |
|
IFeatureLayer JCdltb_Layer = MapsManager.Instance.MapService.GetFeatureLayerByLayerName("地类图斑"); |
|
|
|
IFeatureLayer xzqgx_Layer = MapsManager.Instance.MapService.GetFeatureLayerByName("XZQGX"); |
|
IFeatureLayer xzqjxgx_Layer = MapsManager.Instance.MapService.GetFeatureLayerByName("XZQJXGX"); |
|
IFeatureLayer jcxzq_Layer = MapsManager.Instance.MapService.GetFeatureLayerByLayerName("行政区"); |
|
IFeatureLayer czcdydgx_Layer = MapsManager.Instance.MapService.GetFeatureLayerByName("CZCDYDGX"); |
|
IFeatureLayer czcdydgxzj_Layer = MapsManager.Instance.MapService.GetFeatureLayerByName("CZCDYDGXZJ"); |
|
IFeatureLayer czcdydgxgc_Layer = MapsManager.Instance.MapService.GetFeatureLayerByName("CZCDYDGXGC"); |
|
IFeatureLayer cjdcqgx_Layer = MapsManager.Instance.MapService.GetFeatureLayerByName("CJDCQGX"); |
|
IFeatureLayer cjdcqjxgx_Layer = MapsManager.Instance.MapService.GetFeatureLayerByName("CJDCQJXGX"); |
|
IFeatureLayer jccjdcq_Layer = MapsManager.Instance.MapService.GetFeatureLayerByLayerName("村级调查区"); |
|
IFeatureLayer gxzj_Layer = MapsManager.Instance.MapService.GetFeatureLayerByName("ZJGX"); |
|
IFeatureLayer jcczcdyd_Layer = MapsManager.Instance.MapService.GetFeatureLayerByLayerName("城镇村等用地"); |
|
IFeatureLayer jccjdcqjx_Layer = MapsManager.Instance.MapService.GetFeatureLayerByLayerName("村级调查区界线"); |
|
IFeatureLayer jcxzqjx_Layer = MapsManager.Instance.MapService.GetFeatureLayerByLayerName("行政区界线"); |
|
IFeatureLayer XZQNMKLayer = null; |
|
IFeatureLayer CJDCQNMKLayer = null; |
|
IFeatureLayer XZQJXNMKLayer = null; |
|
IFeatureLayer CJDCQJXNMKLayer = null; |
|
ISpatialReference pSR = null; |
|
GPParamClass gPParamClass = new GPParamClass(); |
|
IFeatureClassAPI fcAPI = null; |
|
IFeatureClass featureClass_Temps = null; |
|
IFeatureClassAPI t_FcAPIs = null; |
|
#endregion |
|
string dbPath = System.IO.Path.GetDirectoryName((MapsManager.Instance.MapService.GetProjectInfo() as ProjectInfo).GetProjFilePath()) + @"\BGTJ.sqlite"; |
|
pSR = (JCdltb_Layer.FeatureClass as IGeoDataset).SpatialReference; |
|
string saveFile = ""; |
|
//弹出文件选择对话框 |
|
var saveFileDialog = new Microsoft.Win32.SaveFileDialog |
|
{ |
|
FileName = "年末库导出_" + projectInfo.CODE + Code_Name, |
|
Filter = "GDB文件(*.gdb)|*.gdb|MDB文件(*.mdb)|*.mdb" |
|
}; |
|
var result = saveFileDialog.ShowDialog(); |
|
if (result.Value) |
|
{ |
|
string gdbFileName = saveFileDialog.SafeFileName;// projectInfo.CODE + Code_Name + ".gdb";//创建年末库储存的GDB文件 |
|
string path = string.Empty; |
|
string MDBpath = string.Empty; |
|
path = saveFileDialog.FileName; |
|
if (saveFileDialog.FileName.EndsWith(".mdb")) |
|
{ |
|
saveFile = saveFileDialog.FileName.Split('.')[0].ToString(); |
|
if (Directory.Exists(saveFile)) { MessageHelper.ShowTips("该文件已存在!"); return; } |
|
gdbFileName = projectInfo.CODE + Code_Name + Guid.NewGuid().ToString() + ".gdb"; |
|
MDBpath = System.IO.Path.Combine(saveFile, projectInfo.CODE + Code_Name + ".mdb");//MDB生成路径 |
|
if (!Directory.Exists(saveFile)) |
|
Directory.CreateDirectory(saveFile); |
|
saveFile = SysAppPath.GetTempPath() + @"NMKTemp\";//临时GDB数据 |
|
if (!Directory.Exists(saveFile)) |
|
Directory.CreateDirectory(saveFile); |
|
//删除saveFile当前路径下,所有的文件和目录 |
|
PluginServiceInterface.CommonHelper.DelectDir(saveFile); |
|
path = System.IO.Path.Combine(saveFile, gdbFileName); |
|
} |
|
this.ShowLoading("进行年末库数据导出……", 0, 0); |
|
//workspaceName = pSaveFct.Create(saveFile, gdbFileName, null, 0);//创建数据库 |
|
wsAPI = GeoDBAPI.CreateLocalWorkspace(path); |
|
//wsAPI = new WorkspaceAPI(path, Framework.AE.Enum.WorkspaceTypeEnum.GDBFile, false); |
|
IFeatureWorkspace targetWorkspac = wsAPI.CurrentWorkspace as IFeatureWorkspace; |
|
IDataset newDataset = targetWorkspac.CreateFeatureDataset("TDDC", pSR); |
|
this.UpdateMsg("进行地类图斑年末库数据导出……"); |
|
IFeatureClass sd = BGNMKHelper.BgDLTBNMKData(wsAPI, newDataset); |
|
if (sd == null) |
|
{ |
|
this.CloseLoading(); |
|
return; |
|
} |
|
#region 村级调查区年末库 |
|
if (cjdcqgx_Layer != null && cjdcqgx_Layer.FeatureClass.FeatureCount(null) != 0) |
|
{ |
|
this.UpdateMsg("进行村级调查区年末库数据导出……"); |
|
gPParamClass = new GPParamClass(); |
|
gPParamClass.FirstFeatureLayer = jccjdcq_Layer; |
|
gPParamClass.SecondFeatureLayer = cjdcqgx_Layer; |
|
gPParamClass.OutFeatureClassPath = path + "\\" + "CJDCQs"; |
|
gPParamClass.IsGetOutPutFeature = true; |
|
GeoprocessorHelper.EraseAnalysis(gPParamClass, ref CJDCQNMKLayer); |
|
fcAPI = new FeatureClassAPI(cjdcqgx_Layer.FeatureClass); |
|
fcAPI.FcToFc(CJDCQNMKLayer.FeatureClass, null, false); |
|
featureClass_Temps = wsAPI.CreateFeatureClass("CJDCQ", newDataset as IFeatureDataset, pSR, esriGeometryType.esriGeometryPolygon, CJDCQNMKLayer.FeatureClass.Fields).FeatureClass;//创建数据集 |
|
t_FcAPIs = new FeatureClassAPI(CJDCQNMKLayer.FeatureClass); |
|
t_FcAPIs.FcToFc(featureClass_Temps, null, false); |
|
wsAPI.DeleteFeatureClass("CJDCQs"); |
|
} |
|
else if (jccjdcq_Layer != null && jccjdcq_Layer.FeatureClass.FeatureCount(null) != 0) |
|
{ |
|
featureClass_Temps = wsAPI.CreateFeatureClass("CJDCQ", newDataset as IFeatureDataset, pSR, esriGeometryType.esriGeometryPolygon, jccjdcq_Layer.FeatureClass.Fields).FeatureClass;//创建数据集 |
|
t_FcAPIs = new FeatureClassAPI(jccjdcq_Layer.FeatureClass); |
|
t_FcAPIs.FcToFc(featureClass_Temps, null, false); |
|
} |
|
else |
|
{ |
|
if (cjdcqgx_Layer != null) |
|
featureClass_Temps = wsAPI.CreateFeatureClass("CJDCQ", newDataset as IFeatureDataset, pSR, esriGeometryType.esriGeometryPolygon, cjdcqgx_Layer.FeatureClass.Fields).FeatureClass;//创建数据集 |
|
} |
|
#endregion |
|
|
|
#region 村级调查区界限年末库 |
|
if (cjdcqjxgx_Layer != null && cjdcqjxgx_Layer.FeatureClass.FeatureCount(null) != 0) |
|
{ |
|
this.UpdateMsg("进行村级调查区界限年末库数据导出……"); |
|
IFeatureClass Temp_featureClass = wsAPI.CreateFeatureClass("KPCZCCK_Temp", pSR, cjdcqjxgx_Layer.FeatureClass.Fields).FeatureClass;//创建数据集 |
|
fcAPI = new FeatureClassAPI(cjdcqjxgx_Layer.FeatureClass); |
|
IQueryFilter queryFilter = new QueryFilterClass(); |
|
queryFilter.WhereClause = " BGXW<>'3' "; |
|
fcAPI.FcToFc(Temp_featureClass, queryFilter, false); |
|
|
|
IFeatureClass Temps_featureClass = wsAPI.CreateFeatureClass("KPCZCCKs_Temp", pSR, cjdcqjxgx_Layer.FeatureClass.Fields).FeatureClass;//创建数据集 |
|
fcAPI = new FeatureClassAPI(cjdcqjxgx_Layer.FeatureClass); |
|
IQueryFilter queryFilters = new QueryFilterClass(); |
|
queryFilter.WhereClause = " BGXW<>'0' "; |
|
fcAPI.FcToFc(Temps_featureClass, queryFilter, false); |
|
|
|
gPParamClass = new GPParamClass(); |
|
gPParamClass.FirstFeatureLayer = jccjdcqjx_Layer; |
|
gPParamClass.SecondFeatureLayer = new FeatureLayerClass() { FeatureClass = Temp_featureClass, Name = Temp_featureClass.AliasName }; |
|
gPParamClass.OutFeatureClassPath = path + "\\" + "CJDCQJXs"; |
|
gPParamClass.IsGetOutPutFeature = true; |
|
GeoprocessorHelper.EraseAnalysis(gPParamClass, ref CJDCQJXNMKLayer); |
|
fcAPI = new FeatureClassAPI(Temps_featureClass); |
|
fcAPI.FcToFc(CJDCQJXNMKLayer.FeatureClass, null, false); |
|
wsAPI.DeleteFeatureClass("KPCZCCK_Temp"); |
|
wsAPI.DeleteFeatureClass("KPCZCCKs_Temp"); |
|
|
|
featureClass_Temps = wsAPI.CreateFeatureClass("CJDCQJX", newDataset as IFeatureDataset, pSR, esriGeometryType.esriGeometryPolygon, CJDCQJXNMKLayer.FeatureClass.Fields).FeatureClass;//创建数据集 |
|
t_FcAPIs = new FeatureClassAPI(CJDCQJXNMKLayer.FeatureClass); |
|
t_FcAPIs.FcToFc(featureClass_Temps, null, false); |
|
wsAPI.DeleteFeatureClass("CJDCQJXs"); |
|
} |
|
else if (jccjdcqjx_Layer != null && jccjdcqjx_Layer.FeatureClass.FeatureCount(null) != 0) |
|
{ |
|
featureClass_Temps = wsAPI.CreateFeatureClass("CJDCQJX", newDataset as IFeatureDataset, pSR, esriGeometryType.esriGeometryPolygon, jccjdcqjx_Layer.FeatureClass.Fields).FeatureClass;//创建数据集 |
|
t_FcAPIs = new FeatureClassAPI(jccjdcqjx_Layer.FeatureClass); |
|
t_FcAPIs.FcToFc(featureClass_Temps, null, false); |
|
} |
|
else |
|
{ |
|
if (cjdcqjxgx_Layer != null) |
|
featureClass_Temps = wsAPI.CreateFeatureClass("CJDCQJX", newDataset as IFeatureDataset, pSR, esriGeometryType.esriGeometryPolygon, cjdcqjxgx_Layer.FeatureClass.Fields).FeatureClass;//创建数据集 |
|
} |
|
#endregion |
|
|
|
#region 行政区年末库 |
|
if (xzqgx_Layer != null && xzqgx_Layer.FeatureClass.FeatureCount(null) != 0) |
|
{ |
|
this.UpdateMsg("进行行政区年末库数据导出……"); |
|
gPParamClass = new GPParamClass(); |
|
gPParamClass.FirstFeatureLayer = jcxzq_Layer; |
|
gPParamClass.SecondFeatureLayer = xzqgx_Layer; |
|
gPParamClass.OutFeatureClassPath = path + "\\" + "XZQs"; |
|
gPParamClass.IsGetOutPutFeature = true; |
|
GeoprocessorHelper.EraseAnalysis(gPParamClass, ref XZQNMKLayer); |
|
fcAPI = new FeatureClassAPI(xzqgx_Layer.FeatureClass); |
|
fcAPI.FcToFc(XZQNMKLayer.FeatureClass, null, false); |
|
|
|
featureClass_Temps = wsAPI.CreateFeatureClass("XZQ", newDataset as IFeatureDataset, pSR, esriGeometryType.esriGeometryPolygon, XZQNMKLayer.FeatureClass.Fields).FeatureClass;//创建数据集 |
|
t_FcAPIs = new FeatureClassAPI(XZQNMKLayer.FeatureClass); |
|
t_FcAPIs.FcToFc(featureClass_Temps, null, false); |
|
wsAPI.DeleteFeatureClass("XZQs"); |
|
} |
|
else if (jcxzq_Layer != null && jcxzq_Layer.FeatureClass.FeatureCount(null) != 0) |
|
{ |
|
featureClass_Temps = wsAPI.CreateFeatureClass("XZQ", newDataset as IFeatureDataset, pSR, esriGeometryType.esriGeometryPolygon, jcxzq_Layer.FeatureClass.Fields).FeatureClass;//创建数据集 |
|
t_FcAPIs = new FeatureClassAPI(jcxzq_Layer.FeatureClass); |
|
t_FcAPIs.FcToFc(featureClass_Temps, null, false); |
|
} |
|
else |
|
{ |
|
if (xzqgx_Layer != null) |
|
featureClass_Temps = wsAPI.CreateFeatureClass("XZQ", newDataset as IFeatureDataset, pSR, esriGeometryType.esriGeometryPolygon, xzqgx_Layer.FeatureClass.Fields).FeatureClass;//创建数据集 |
|
} |
|
#endregion |
|
|
|
#region 行政区界线年末库 |
|
if (xzqjxgx_Layer != null && xzqjxgx_Layer.FeatureClass.FeatureCount(null) != 0) |
|
{ |
|
this.UpdateMsg("进行行政区界线年末库数据导出……"); |
|
IFeatureClass Temp_featureClassw = wsAPI.CreateFeatureClass("KPCZCCK_Temsp", pSR, xzqjxgx_Layer.FeatureClass.Fields).FeatureClass;//创建数据集 |
|
fcAPI = new FeatureClassAPI(xzqjxgx_Layer.FeatureClass); |
|
IQueryFilter queryFilter = new QueryFilterClass(); |
|
queryFilter.WhereClause = " BGXW<>'3' "; |
|
fcAPI.FcToFc(Temp_featureClassw, queryFilter, false); |
|
|
|
IFeatureClass Temps_featureClassw = wsAPI.CreateFeatureClass("KPCZCCKs_Temps", pSR, xzqjxgx_Layer.FeatureClass.Fields).FeatureClass;//创建数据集 |
|
fcAPI = new FeatureClassAPI(xzqjxgx_Layer.FeatureClass); |
|
IQueryFilter queryFilters = new QueryFilterClass(); |
|
queryFilter.WhereClause = " BGXW<>'0' "; |
|
fcAPI.FcToFc(Temps_featureClassw, queryFilter, false); |
|
|
|
gPParamClass = new GPParamClass(); |
|
gPParamClass.FirstFeatureLayer = jcxzqjx_Layer; |
|
gPParamClass.SecondFeatureLayer = new FeatureLayerClass() { FeatureClass = Temp_featureClassw, Name = Temp_featureClassw.AliasName }; |
|
gPParamClass.OutFeatureClassPath = path + "\\" + "XZQJXs"; |
|
gPParamClass.IsGetOutPutFeature = true; |
|
GeoprocessorHelper.EraseAnalysis(gPParamClass, ref XZQJXNMKLayer); |
|
fcAPI = new FeatureClassAPI(Temps_featureClassw); |
|
fcAPI.FcToFc(XZQJXNMKLayer.FeatureClass, null, false); |
|
wsAPI.DeleteFeatureClass("KPCZCCK_Temsp"); |
|
wsAPI.DeleteFeatureClass("KPCZCCKs_Temps"); |
|
|
|
featureClass_Temps = wsAPI.CreateFeatureClass("XZQJX", newDataset as IFeatureDataset, pSR, esriGeometryType.esriGeometryPolygon, XZQJXNMKLayer.FeatureClass.Fields).FeatureClass;//创建数据集 |
|
t_FcAPIs = new FeatureClassAPI(XZQJXNMKLayer.FeatureClass); |
|
t_FcAPIs.FcToFc(featureClass_Temps, null, false); |
|
wsAPI.DeleteFeatureClass("XZQJXs"); |
|
} |
|
else if (jcxzqjx_Layer != null && jcxzqjx_Layer.FeatureClass.FeatureCount(null) != 0) |
|
{ |
|
featureClass_Temps = wsAPI.CreateFeatureClass("XZQJX", newDataset as IFeatureDataset, pSR, esriGeometryType.esriGeometryPolygon, jcxzqjx_Layer.FeatureClass.Fields).FeatureClass;//创建数据集 |
|
t_FcAPIs = new FeatureClassAPI(jcxzqjx_Layer.FeatureClass); |
|
t_FcAPIs.FcToFc(featureClass_Temps, null, false); |
|
} |
|
else |
|
{ |
|
if (xzqjxgx_Layer != null) |
|
featureClass_Temps = wsAPI.CreateFeatureClass("XZQJX", newDataset as IFeatureDataset, pSR, esriGeometryType.esriGeometryPolygon, xzqjxgx_Layer.FeatureClass.Fields).FeatureClass;//创建数据集 |
|
} |
|
#endregion |
|
|
|
#region 城镇村年末库 |
|
if (czcdydgx_Layer != null && czcdydgx_Layer.FeatureClass.FeatureCount(null) != 0) |
|
{ |
|
this.UpdateMsg("进行城镇村年末库数据导出……"); |
|
#region MyRegion |
|
IFeatureClass featureClass_CZCDYD = wsAPI.CreateFeatureClass("CZCDYD", newDataset as IFeatureDataset, pSR, esriGeometryType.esriGeometryPolygon, jcczcdyd_Layer.FeatureClass.Fields).FeatureClass;//创建数据集 |
|
fcAPI = new FeatureClassAPI(jcczcdyd_Layer.FeatureClass); |
|
fcAPI.FcToFc(featureClass_CZCDYD, null, false); |
|
IFeatureCursor _cursor = czcdydgxgc_Layer.FeatureClass.Search(new QueryFilterClass() { SubFields = "BGQBSM" }, true); |
|
Dictionary<string, int> DicJcBSMs = new Dictionary<string, int>(); |
|
IFeature fCZC = null; |
|
int idx = czcdydgxgc_Layer.FeatureClass.FindField("BGQBSM"); |
|
if (idx != -1) |
|
{ |
|
while ((fCZC = _cursor.NextFeature()) != null) |
|
{ |
|
string jcbsm = fCZC.Value[idx].ToTrim(); |
|
if (!DicJcBSMs.ContainsKey(jcbsm)) |
|
DicJcBSMs.Add(jcbsm, 0); |
|
} |
|
_cursor = featureClass_CZCDYD.Update(null, true); |
|
idx = featureClass_CZCDYD.FindField("BSM"); |
|
if (idx != -1) |
|
{ |
|
while ((fCZC = _cursor.NextFeature()) != null) |
|
{ |
|
string bsm = fCZC.Value[idx].ToTrim(); |
|
if (DicJcBSMs.ContainsKey(bsm)) |
|
{ |
|
fCZC.Value[idx] = "-1"; |
|
_cursor.UpdateFeature(fCZC); |
|
} |
|
} |
|
_cursor.Flush(); |
|
} |
|
(featureClass_CZCDYD as ITable).DeleteSearchedRows(new QueryFilterClass() { WhereClause = "BSM = '-1'" }); |
|
} |
|
fcAPI = new FeatureClassAPI(czcdydgx_Layer.FeatureClass); |
|
fcAPI.FcToFc(featureClass_CZCDYD, null, false); |
|
IFeatureClassAPI classAPICZC = new FeatureClassAPI(featureClass_CZCDYD); |
|
if (classAPICZC.FeatureClass.FindField("XZQTZLX") != -1) |
|
classAPICZC.DeleteField("XZQTZLX"); |
|
Marshal.ReleaseComObject(featureClass_CZCDYD); |
|
#endregion |
|
} |
|
else |
|
{ |
|
if (czcdydgx_Layer != null) |
|
featureClass_Temps = wsAPI.CreateFeatureClass("CZCDYD", newDataset as IFeatureDataset, pSR, esriGeometryType.esriGeometryPolygon, czcdydgx_Layer.FeatureClass.Fields).FeatureClass;//创建数据集 |
|
} |
|
IFeatureClassAPI classAPI = new FeatureClassAPI(featureClass_Temps); |
|
if (classAPI.FeatureClass.FindField("XZQTZLX") != -1) |
|
classAPI.DeleteField("XZQTZLX"); |
|
#endregion |
|
|
|
#region 单独图层年末库-当前已建议移除整层更新的年末图斑 |
|
//this.UpdateMsg("进行单独图层年末库数据导出……"); |
|
//XDocument xDoc = XDocument.Load(SysAppPath.BG_GetMappingConfigPath()); |
|
//foreach (XElement item in xDoc.Descendants("Table")) |
|
//{ |
|
// if (item.Attributes("TableName") == null || item.Attributes("TableName").Single().Value.ToUpper().EndsWith("GXGC") || item.Attributes("TableName").Single().Value.ToUpper().Equals("PDTGX") || item.Attributes("TableName").Single().Value.ToUpper().Equals("DLTBGX") || item.Attributes("TableName").Single().Value.ToUpper().Equals("XZQGX") || item.Attributes("TableName").Single().Value.ToUpper().Equals("CJDCQGX") || item.Attributes("TableName").Single().Value.ToUpper().Equals("CZCDYDGX") || item.Attributes("TableName").Single().Value.ToUpper().Equals("XZQJXGX") || item.Attributes("TableName").Single().Value.ToUpper().Equals("CJDCQJXGX")) |
|
// { |
|
// continue; |
|
// } |
|
// if (item.Attributes("Visiable").SingleOrDefault() == null || item.Attributes("Visiable").SingleOrDefault().Value.Equals("True")) |
|
// { |
|
// IFeatureLayer featureLayer = MapsManager.Instance.MapService.GetFeatureLayerByName(item.Attributes("TableName").Single().Value); |
|
// if (featureLayer == null) continue; |
|
// GeoDBAPI.CreateFields(featureLayer.FeatureClass.Fields, out IFields fields);//创建字段 |
|
// int v = item.Attributes("TableName").Single().Value.Count(); |
|
// string tempFLName = item.Attributes("TableName").Single().Value.Substring(0, v - 2); |
|
// IFeatureClass featureClass_Temp = wsAPI.CreateFeatureClass(tempFLName, newDataset as IFeatureDataset, pSR, esriGeometryType.esriGeometryPolygon, fields).FeatureClass;//创建数据集 |
|
// IFeatureClassAPI t_FcAPI = new FeatureClassAPI(featureLayer.FeatureClass); |
|
// t_FcAPI.FcToFc(featureClass_Temp, null, false); |
|
// t_FcAPI = new FeatureClassAPI(featureClass_Temp); |
|
// t_FcAPI.DeleteField("GXSJ"); |
|
// Marshal.ReleaseComObject(featureLayer); |
|
// Marshal.ReleaseComObject(featureClass_Temp); |
|
// tempFLName = ""; |
|
// } |
|
//} |
|
#endregion |
|
|
|
if (saveFileDialog.FileName.EndsWith(".mdb")) |
|
{ |
|
this.UpdateMsg("进行年末库MDB数据导出中~"); |
|
UpDataFileAttribute(path); |
|
ExportMDB(MDBpath, path, false); |
|
} |
|
this.CloseLoading(); |
|
MessageHelper.ShowTips("年末库数据导出成功!"); |
|
} |
|
} |
|
catch (Exception ex) |
|
{ |
|
this.CloseLoading(); |
|
MessageHelper.ShowError("年末库导出失败!"); |
|
LogAPI.Debug(ex.Message); |
|
LogAPI.Debug(ex); |
|
} |
|
} |
|
|
|
/// <summary> |
|
/// GDB转换为MDB |
|
/// </summary> |
|
/// <param name="t_targetPath">MDB绝对路径</param> |
|
/// <param name="s_GDBFullPath">GDB绝对路径</param> |
|
/// <param name="isTest">测试项</param> |
|
private void ExportMDB(string t_targetPath, string s_GDBFullPath, bool isTest = false) |
|
{ |
|
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(s_GDBFullPath, WorkspaceTypeEnum.GDBFile); |
|
//创建mdb |
|
CreateFileMDB(t_targetPath, System.IO.Path.GetFileName(t_targetPath)); |
|
t_WsAPI = new WorkspaceAPI(t_targetPath, WorkspaceTypeEnum.MDBFile); |
|
pEnumDataset = s_WsAPI.CurrentWorkspace.Datasets[esriDatasetType.esriDTFeatureDataset]; |
|
if (pEnumDataset != null) |
|
{ |
|
pEnumDataset.Reset(); |
|
IDataset pDataset = null; |
|
//如果数据集是IFeatureDataset,则遍历它下面的子类 |
|
while ((pDataset = pEnumDataset.Next()) != null) |
|
{ |
|
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); |
|
} |
|
} |
|
Marshal.FinalReleaseComObject(dataset); |
|
dataset = ed.Next(); |
|
} |
|
} |
|
if (listFeatureClass.Count > 0) |
|
{ |
|
//GeoprocessorHelper iGeoprocessorHelper = new GeoprocessorHelper(); |
|
InsertMDBFeatureClassFromGDBFeatureClass(s_GDBFullPath, listFeatureClassNameList, t_targetPath, newDataset.BrowseName, null); |
|
} |
|
if (newDataset != null) |
|
Marshal.FinalReleaseComObject(newDataset); |
|
} |
|
} |
|
if (t_WsAPI.ExistFeatureClass("MJHZJCTJB_YJJBNTTB")) |
|
t_WsAPI.DeleteFeatureClass("MJHZJCTJB_YJJBNTTB");//删除多余的表结构数据 |
|
} |
|
catch (Exception ex) |
|
{ |
|
LogAPI.Debug(ex.Message); |
|
} |
|
finally |
|
{ |
|
if (t_WsAPI != null) |
|
{ |
|
t_WsAPI.CloseWorkspace(); |
|
} |
|
if (s_WsAPI != null) |
|
{ |
|
s_WsAPI.CloseWorkspace(); |
|
} |
|
if (pEnumDataset != null) |
|
{ |
|
Marshal.ReleaseComObject(pEnumDataset); |
|
} |
|
} |
|
} |
|
|
|
/// <summary> |
|
/// 创建要素集 |
|
/// </summary> |
|
/// <param name="pDataset"></param> |
|
/// <param name="workspaceAPI"></param> |
|
/// <returns></returns> |
|
private IFeatureDataset CreateFeatureDataset(IDataset pDataset, WorkspaceAPI workspaceAPI) |
|
{ |
|
try |
|
{ |
|
IFeatureWorkspace targetWorkspac = workspaceAPI.CurrentWorkspace as IFeatureWorkspace; |
|
object tst = workspaceAPI.CurrentWorkspace; |
|
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(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("TDDC", SpatialReference); |
|
} |
|
catch (Exception ex) |
|
{ |
|
LogAPI.Debug("异常原因: " + ex + " ; "); |
|
throw ex; |
|
} |
|
} |
|
|
|
/// <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); |
|
} |
|
} |
|
|
|
/// <summary> |
|
/// 从GDB中拷贝要素类插入到MDB中 2020-6-1 沈超 |
|
/// </summary> |
|
/// <param name="sFromGDBPath">GDB地址</param> |
|
/// <param name="iFeatureClassNameList">GDB中要拷贝的要素类名称列表</param> |
|
/// <param name="iOutPutMDBPath">要插入到的MDB的地址路径</param> |
|
/// <param name="sOutPutDataSetName">输出的数据集的名字</param> |
|
/// <param name="sSpatialReference">输出坐标参考:如果不是要素集下的图层,则要赋坐标参考</param> |
|
public void InsertMDBFeatureClassFromGDBFeatureClass(string sFromGDBPath, List<string> iFeatureClassNameList, string iOutPutMDBPath, string sOutPutDataSetName, string sSpatialReference = null) |
|
{ |
|
IFeatureWorkspace fws_gdb = null; |
|
IWorkspace ws_gdb = null; |
|
|
|
WorkspaceAPI wsapi_gdb = null; |
|
IFeatureClassAPI fcapi_gdb = null; |
|
IFeatureClass fc_gdb = null; |
|
|
|
IFeatureClass newFeatureClass = null; |
|
|
|
IFeatureWorkspace fws_mdb = null; |
|
|
|
int iAddSuccessCount = 0; |
|
int iAddFailCount = 0; |
|
bool bFC2FCResult_Temp = false; |
|
|
|
int iFCToFCType = 0;//fc2fc类型(0不涉及到数据集的方式 1涉及到数据集的方式) |
|
try |
|
{ |
|
iFCToFCType = string.IsNullOrWhiteSpace(sOutPutDataSetName) == true ? 0 : 1; |
|
|
|
if (string.IsNullOrWhiteSpace(sFromGDBPath) == true) |
|
{ |
|
LogAPI.Debug("从GDB中拷贝要素类插入到MDB中 时失败,原因: GDB地址 为空 ; "); |
|
throw new Exception("GDB地址 不能为空"); |
|
} |
|
|
|
if (iFeatureClassNameList == null || iFeatureClassNameList.Count <= 0) |
|
{ |
|
LogAPI.Debug("从GDB中拷贝要素类插入到MDB中 时失败,原因: GDB中要拷贝的要素类名称列表 为空 ; "); |
|
throw new Exception("要转换的要素类 不能为空"); |
|
} |
|
IWorkspaceFactory factoryAce = new AccessWorkspaceFactoryClass(); |
|
IPropertySet pset = new PropertySetClass(); |
|
pset.SetProperty("DATABASE", iOutPutMDBPath); |
|
fws_mdb = factoryAce.Open(pset, 0) as IFeatureWorkspace; |
|
if (fws_mdb == null) |
|
{ |
|
throw new Exception("MDB地址 不能为空"); |
|
} |
|
wsapi_gdb = new WorkspaceAPI(sFromGDBPath, WorkspaceTypeEnum.GDBFile); |
|
fws_gdb = wsapi_gdb.CurrentWorkspace as IFeatureWorkspace; |
|
ws_gdb = fws_gdb as IWorkspace; |
|
|
|
for (int i = 0; i < iFeatureClassNameList.Count; i++) |
|
{ |
|
fcapi_gdb = wsapi_gdb.OpenFeatureClass(iFeatureClassNameList[i]); |
|
if (fcapi_gdb != null) |
|
{ |
|
fc_gdb = fcapi_gdb.FeatureClass; |
|
IGeoDataset geoDataset = fc_gdb as IGeoDataset; |
|
if (iFCToFCType == 1)//fc2fc类型:1涉及到数据集的方式; |
|
{ |
|
bFC2FCResult_Temp = Fc2Fc(fc_gdb, fws_mdb as IWorkspace, iFeatureClassNameList[i], sOutPutDataSetName, null); |
|
|
|
#region 处理坐标参考系 |
|
IFeatureDataset dataSet = fws_mdb.OpenFeatureDataset(sOutPutDataSetName); |
|
ISpatialReference sp = geoDataset.SpatialReference; |
|
IGeoDataset pGeoDataset = dataSet as IGeoDataset; |
|
IGeoDatasetSchemaEdit pGeoDatasetSchemaEdit = pGeoDataset as IGeoDatasetSchemaEdit; |
|
if (pGeoDatasetSchemaEdit.CanAlterSpatialReference == true) |
|
{ |
|
pGeoDatasetSchemaEdit.AlterSpatialReference(sp); |
|
} |
|
|
|
Marshal.ReleaseComObject(dataSet); |
|
Marshal.ReleaseComObject(pGeoDataset); |
|
#endregion |
|
} |
|
else//fc2fc类型:0不涉及到数据集的方式; |
|
{ |
|
bFC2FCResult_Temp = Fc2Fc(fc_gdb, fws_mdb as IWorkspace, iFeatureClassNameList[i], null); |
|
|
|
#region 处理坐标参考系 |
|
newFeatureClass = fws_mdb.OpenFeatureClass(iFeatureClassNameList[i]); |
|
IGeoDataset gdataset = newFeatureClass as IGeoDataset; |
|
if (gdataset != null) |
|
{ |
|
IGeoDatasetSchemaEdit pGeoDatasetSchemaEdit = gdataset as IGeoDatasetSchemaEdit; |
|
if (pGeoDatasetSchemaEdit.CanAlterSpatialReference == true) |
|
{ |
|
pGeoDatasetSchemaEdit.AlterSpatialReference(geoDataset.SpatialReference); |
|
} |
|
} |
|
#endregion |
|
Marshal.ReleaseComObject(gdataset); |
|
} |
|
Marshal.ReleaseComObject(geoDataset); |
|
|
|
if (bFC2FCResult_Temp == true) |
|
{ |
|
iAddSuccessCount += 1; |
|
} |
|
else |
|
{ |
|
iAddFailCount += 1; |
|
} |
|
} |
|
} |
|
return; |
|
} |
|
catch (Exception ex) |
|
{ |
|
LogAPI.Debug("将要素类拷贝至MDB中失败,异常原因: " + ex + " ; "); |
|
throw new Exception("GDB转化成MDB地址失败"); |
|
} |
|
finally |
|
{ |
|
if (fws_gdb != null) |
|
{ |
|
Marshal.ReleaseComObject(fws_gdb); |
|
fws_gdb = null; |
|
} |
|
|
|
if (ws_gdb != null) |
|
{ |
|
ws_gdb = null; |
|
} |
|
|
|
if (wsapi_gdb != null) |
|
{ |
|
wsapi_gdb.CloseWorkspace(); |
|
} |
|
|
|
if (fcapi_gdb != null) |
|
{ |
|
fcapi_gdb.CloseFeatureClass(); |
|
} |
|
|
|
if (fc_gdb != null) |
|
{ |
|
Marshal.ReleaseComObject(fc_gdb); |
|
fc_gdb = null; |
|
} |
|
|
|
if (fws_mdb != null) |
|
{ |
|
Marshal.ReleaseComObject(fws_mdb); |
|
fws_mdb = null; |
|
} |
|
|
|
if (newFeatureClass != null) |
|
{ |
|
Marshal.ReleaseComObject(newFeatureClass); |
|
newFeatureClass = null; |
|
} |
|
} |
|
} |
|
public bool Fc2Fc(IFeatureClass pInFeatureClass, IWorkspace pOutWorkspace, string poutFatureName, string pOutDataSetName = null, IQueryFilter queryFilter = null) |
|
{ |
|
try |
|
{ |
|
if (pInFeatureClass == null || pOutWorkspace == null || string.IsNullOrEmpty(poutFatureName)) return false; |
|
IFeatureClassName pInFeatureclassName; |
|
IDataset pIndataset; |
|
pIndataset = (IDataset)pInFeatureClass; |
|
pInFeatureclassName = (IFeatureClassName)pIndataset.FullName; |
|
IFeatureClassName pOutFeatureClassName; |
|
IDatasetName pOutDatasetName; |
|
IDataset pOutDataset; |
|
pOutDataset = (IDataset)pOutWorkspace; |
|
IEnumDatasetName dataset = pOutWorkspace.get_DatasetNames(esriDatasetType.esriDTFeatureDataset); |
|
while ((pOutDatasetName = dataset.Next()) != null) |
|
{ |
|
if (pOutDatasetName.Name == pOutDataSetName) |
|
{ |
|
break; |
|
} |
|
} |
|
pOutFeatureClassName = new FeatureClassNameClass() { Name = poutFatureName }; |
|
if (pOutDatasetName == null) |
|
{ |
|
pOutDatasetName = (IDatasetName)pOutFeatureClassName; |
|
pOutDatasetName.WorkspaceName = (IWorkspaceName)pOutDataset.FullName; |
|
pOutDatasetName.Name = poutFatureName; |
|
} |
|
pOutFeatureClassName.FeatureDatasetName = pOutDatasetName; |
|
IFields pInFields, pOutFields; |
|
IFieldChecker pFieldChecker = new FieldCheckerClass(); |
|
IEnumFieldError pError; |
|
pInFields = pInFeatureClass.Fields; |
|
|
|
//pOutFields |
|
pFieldChecker.Validate(pInFields, out pError, out pOutFields); |
|
Console.WriteLine(pError); |
|
IFeatureDataConverter one2another = new FeatureDataConverterClass(); |
|
try |
|
{ |
|
if (pOutWorkspace.Type == esriWorkspaceType.esriRemoteDatabaseWorkspace) |
|
{ |
|
one2another.ConvertFeatureClass(pInFeatureclassName, null, null, pOutFeatureClassName, null, |
|
pOutFields, "", 1000, 0); |
|
} |
|
else |
|
{ |
|
one2another.ConvertFeatureClass(pInFeatureclassName, queryFilter, pOutDatasetName as IFeatureDatasetName, pOutFeatureClassName, null, pOutFields, "", 1000, 0); |
|
} |
|
} |
|
finally |
|
{ |
|
Marshal.ReleaseComObject(one2another); |
|
} |
|
return true; |
|
} |
|
catch (Exception ex) |
|
{ |
|
throw ex; |
|
} |
|
} |
|
|
|
|
|
/// <summary> |
|
/// 修改文件的可读写 |
|
/// </summary> |
|
/// <param name="T_Path"></param> |
|
private void UpDataFileAttribute(string T_Path) |
|
{ |
|
try |
|
{ |
|
DirectoryInfo dirInfo = new DirectoryInfo(T_Path); |
|
dirInfo.Attributes = FileAttributes.Normal | FileAttributes.Directory; |
|
FileInfo fileInfo = new FileInfo(T_Path); |
|
if (fileInfo.IsReadOnly) |
|
{ |
|
File.SetAttributes(T_Path, FileAttributes.Normal); |
|
} |
|
} |
|
catch (Exception ex) |
|
{ |
|
LogAPI.Debug(ex.Message); |
|
} |
|
} |
|
|
|
/// <summary> |
|
/// 根据区划代码获取县级名称 |
|
/// </summary> |
|
/// <param name="Codes"></param> |
|
/// <returns></returns> |
|
public string GetXZQDic(string Codes) |
|
{ |
|
IRDBHelper rdbHelper = null; |
|
string CodeName = string.Empty; |
|
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 '" + Codes + "%'"; |
|
DataTable dt = rdbHelper.ExecuteDatatable("Dic", strSQL, true); |
|
if (dt != null) |
|
{ |
|
CodeName = dt.Rows[0]["NAME"].ToString(); |
|
} |
|
} |
|
} |
|
catch (Exception ex) |
|
{ |
|
LogAPI.Debug(ex); |
|
} |
|
finally |
|
{ |
|
if (rdbHelper != null) |
|
{ |
|
rdbHelper.DisConnect(); |
|
} |
|
} |
|
return CodeName; |
|
} |
|
|
|
/// <summary> |
|
/// 是否功能展示 |
|
/// </summary> |
|
public override bool Enabled |
|
{ |
|
get |
|
{ |
|
ProjectInfo pTemp = (MapsManager.Instance.MapService.GetProjectInfo() as ProjectInfo); |
|
if (pTemp == null) |
|
{ |
|
return false; |
|
} |
|
else |
|
{ |
|
if (string.IsNullOrWhiteSpace(pTemp.GetProjFilePath())) |
|
{ |
|
return false; |
|
} |
|
else |
|
{ |
|
return true; |
|
} |
|
} |
|
} |
|
} |
|
} |
|
|
|
}
|
|
|