FormNetworkLoader.cs 8.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193
  1. //======================================================================
  2. //
  3. // 成都同飞科技地下管网GIS系统
  4. //
  5. // CLR 版本: 4.0.30319.42000
  6. // 命名空间: GNetworkProcessTool
  7. // 类 名: FormNetworkLoader
  8. // 创 建 人: 汤云伟
  9. // 创建时间: 2017-07-06 17:57:26
  10. // 修 改 人:
  11. // 修改时间:
  12. //
  13. //======================================================================
  14. using System;
  15. using System.Collections.Generic;
  16. using System.ComponentModel;
  17. using System.Data;
  18. using System.Drawing;
  19. using System.Linq;
  20. using System.Text;
  21. using System.Threading.Tasks;
  22. using System.Windows.Forms;
  23. using ESRI.ArcGIS.Geodatabase;
  24. using ESRI.ArcGIS.esriSystem;
  25. using ESRI.ArcGIS.EditorExt;
  26. using Tofly.GIS.ArcGIS.Util;
  27. using Tofly.GIS.Carto;
  28. using Tofly.GIS.Util;
  29. using Tofly.GIS.SpatialAnalysis.ArcGIS;
  30. namespace GNetworkProcessTool
  31. {
  32. public partial class FormNetworkLoader : Form
  33. {
  34. #region 私有方法
  35. /// <summary>
  36. /// 通过增量网络数据加载工具进行数据入库
  37. /// </summary>
  38. private void LoadDataByGNIncrementalLoader(IWorkspace wsSDE, string userID, Dictionary<string, IFeatureClass> dicFGDBClass)
  39. {
  40. GNUtility.Initialize(wsSDE, true, userID);
  41. IGeometricNetwork __gnProcessing = GNUtility.GetGNetworlByName(AppConfig.GeometryNetworkName);
  42. //IWorkspaceName __wsName = new WorkspaceNameClass()
  43. //{
  44. // WorkspaceFactoryProgID = "esriDataSourcesGDB.SdeWorkspaceFactory",
  45. // ConnectionProperties = this._SDEWorkspace.ConnectionProperties
  46. //};
  47. //IWorkspaceName __wsName = (IWorkspaceName)(this._SDEWorkspace as IDataset).FullName;
  48. IGeometricNetworkName __gnName = (IGeometricNetworkName)(__gnProcessing as IDataset).FullName;
  49. IEnumNameEdit __enumNameEdit = new NamesEnumeratorClass();
  50. #region 获取导入要素类名称集合
  51. IFeatureClassName __flnName;
  52. foreach (var __kvFClassGDB in dicFGDBClass)
  53. {
  54. if ((__kvFClassGDB.Value as ITable).RowCount(null) > 0)
  55. {
  56. __flnName = (__kvFClassGDB.Value as IDataset).FullName as IFeatureClassName;
  57. __enumNameEdit.Add(__flnName as IName);
  58. break;
  59. }
  60. }
  61. #endregion
  62. IGeometricNetworkIncrementalLoader __gnIncrementalLoader = new GNIncrementalLoaderClass();
  63. IEnumNameMapping __fcMapping = null;
  64. IPropertySet __unmappedFields;
  65. string __strSpatialRef = (dicFGDBClass.ElementAt(0).Value as IGeoDataset).SpatialReference.Name;
  66. string __strSpatialRef2 = (__gnProcessing as IGeoDataset).SpatialReference.Name;
  67. IEnumName __enumName = __enumNameEdit as IEnumName;
  68. __enumName.Reset();
  69. __gnIncrementalLoader.GenerateNameMapping(__enumName, __gnName, out __fcMapping, out __unmappedFields);
  70. __fcMapping.Reset();
  71. INameMapping __nameMapping = null;
  72. //while ((__nameMapping = __fcMapping.Next()) != null)
  73. //{
  74. // __nameMapping.TargetName = string.Format("{0}.{1}", this._wsOrigine.UserID.ToUpper(), __nameMapping.TargetName);
  75. //}
  76. //string __strClass = "";
  77. //IFeatureClass __fclass;
  78. //var __enumClass = __gnProcessing.get_ClassesByType(ESRI.ArcGIS.Geodatabase.esriFeatureType.esriFTSimpleJunction);
  79. //while ((__fclass = __enumClass.Next()) != null)
  80. //{
  81. // __strClass += __fclass.AliasName + " " + (__fclass as IDataset).BrowseName + ";";
  82. //}
  83. //__enumClass = __gnProcessing.get_ClassesByType(ESRI.ArcGIS.Geodatabase.esriFeatureType.esriFTSimpleEdge);
  84. //while ((__fclass = __enumClass.Next()) != null)
  85. //{
  86. // __strClass += __fclass.AliasName + " " + (__fclass as IDataset).BrowseName + ";";
  87. //}
  88. string __strMappingClass = "";
  89. __fcMapping.Reset();
  90. while ((__nameMapping = __fcMapping.Next()) != null)
  91. {
  92. __strMappingClass += __nameMapping.TargetName + " " + (__nameMapping.SourceObject as IDatasetName).Name + ";";
  93. }
  94. __fcMapping.Reset();
  95. __gnIncrementalLoader.GetUnmappedTargetFields(__gnProcessing, __fcMapping, __unmappedFields);
  96. __gnIncrementalLoader.LoadNetwork(__fcMapping, __gnProcessing);
  97. }
  98. #endregion
  99. public FormNetworkLoader()
  100. {
  101. InitializeComponent();
  102. }
  103. private void FormNetworkLoader_Shown(object sender, EventArgs e)
  104. {
  105. #region 加载地图
  106. //this.lblInfo.Text = "正在加载地图数据";
  107. ESRI.ArcGIS.Carto.IMapDocument __mapDoc = new ESRI.ArcGIS.Carto.MapDocumentClass();
  108. __mapDoc.Open(string.Format(@"{0}\Default.mxd", Application.StartupPath));
  109. ESRI.ArcGIS.Carto.IMap __mapData = __mapDoc.Map[0];
  110. this.MapControl.Map = __mapData;
  111. this.MapControl.ActiveView.PartialRefresh(ESRI.ArcGIS.Carto.esriViewDrawPhase.esriViewGeography, null, this.MapControl.ActiveView.Extent);
  112. __mapDoc.Close();
  113. #endregion
  114. }
  115. private void btnOpenGDB_Click(object sender, EventArgs e)
  116. {
  117. FolderBrowserDialog __folderDia = new FolderBrowserDialog() { ShowNewFolderButton = false };
  118. if(__folderDia.ShowDialog() == DialogResult.OK)
  119. {
  120. this.txtGDBFile.Text = __folderDia.SelectedPath;
  121. }
  122. //OpenFileDialog __fileDia = new OpenFileDialog()
  123. //{
  124. // Filter = "*.gdb|*.gdb;"
  125. //};
  126. //if (__fileDia.ShowDialog() == DialogResult.OK)
  127. //{
  128. // this.txtGDBFile.Text = __fileDia.FileName;
  129. //}
  130. }
  131. private void btnImport_Click(object sender, EventArgs e)
  132. {
  133. try
  134. {
  135. IMap __cmap = new Tofly.GIS.ArcGIS.Carto.MapClass(this.MapControl.Map); //获取数据地图
  136. List<IFeatureLayer> __lstGNLayer = new List<IFeatureLayer>(__cmap.GetShowFeatureLayersByMap());
  137. List<ESRI.ArcGIS.Carto.IFeatureLayer> __lstESRIGNLayer = __lstGNLayer.Select(layer => layer.InnerObject as ESRI.ArcGIS.Carto.IFeatureLayer).ToList();
  138. __lstESRIGNLayer.RemoveAll(layer => layer.FeatureClass == null || layer.FeatureClass.FeatureDataset == null);
  139. __lstESRIGNLayer.RemoveAll(layer => layer.FeatureClass.FeatureDataset == null || layer.FeatureClass.FeatureDataset.Name.IndexOf(AppConfig.GWDatasetName, StringComparison.OrdinalIgnoreCase) == -1);
  140. IWorkspace __wsFileGDB = GeoDataSourceHelper.FileGdbWorkspaceFromPath(this.txtGDBFile.Text);
  141. IFeatureDataset __fdsetGASDATASET_GDB = (__wsFileGDB as IFeatureWorkspace).OpenFeatureDataset("GASDATASET");
  142. Dictionary<string, IFeatureClass> __dicFileGDBFeatureClass = DataOperateHelper.GetFeatureClassFromDataset(__wsFileGDB as IFeatureWorkspace, __fdsetGASDATASET_GDB, new List<string>());
  143. IWorkspace __wsSDE = (__lstESRIGNLayer[0].FeatureClass as IDataset).Workspace;
  144. GeoDataSourceHelper __geoDSHelper = new GeoDataSourceHelper();
  145. Dictionary<string,object> __dicParameters = __geoDSHelper.GetSdeDataSourceParameters(__wsSDE);
  146. string __strUserID = (__dicParameters.ContainsKey("USER") ? Convert.ToString(__dicParameters["USER"]) : "");
  147. string __strDSetName = (string.IsNullOrEmpty(__strUserID) ? "" : __strUserID + ".") + "GASDATASET";
  148. IFeatureDataset __fdsetGASDATASET_SDE = (__wsSDE as IFeatureWorkspace).OpenFeatureDataset(__strDSetName);
  149. Dictionary<string, IFeatureClass> __dicSDEFeatureClass = DataOperateHelper.GetFeatureClassFromDataset(__wsSDE as IFeatureWorkspace, __fdsetGASDATASET_SDE, new List<string>());
  150. IWorkspaceEdit2 __wseSDEProcessing = __wsSDE as IWorkspaceEdit2;
  151. __wseSDEProcessing.StartEditing(true);
  152. __wseSDEProcessing.StartEditOperation();
  153. try
  154. {
  155. this.LoadDataByGNIncrementalLoader(__wsSDE, __strUserID, __dicFileGDBFeatureClass); //工具导入测试
  156. __wseSDEProcessing.StopEditOperation();
  157. }
  158. catch (System.Exception ex)
  159. {
  160. __wseSDEProcessing.AbortEditOperation();
  161. throw new System.Exception("数据入库错误|" + ex.Message);
  162. }
  163. }
  164. catch(System.Exception ex)
  165. {
  166. MessageBox.Show(ex.Message);
  167. }
  168. }
  169. }
  170. }