GNetworkHelper.cs 5.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115
  1. //======================================================================
  2. //
  3. // 成都同飞科技地下管网GIS系统
  4. //
  5. // CLR 版本: 4.0.30319.42000
  6. // 命名空间: GNetworkProcessTool
  7. // 类 名: GNetworkHelper
  8. // 创 建 人: 汤云伟
  9. // 创建时间: 2017/5/10 10:05:55
  10. // 修 改 人:
  11. // 修改时间:
  12. //
  13. //======================================================================
  14. using System;
  15. using System.Collections.Generic;
  16. using System.Linq;
  17. using System.Text;
  18. using System.Threading.Tasks;
  19. using ESRI.ArcGIS.Geodatabase;
  20. namespace GNetworkProcessTool
  21. {
  22. /// <summary>
  23. /// 几何网络协助器
  24. /// </summary>
  25. public class GNetworkHelper
  26. {
  27. /// <summary>
  28. ///
  29. /// </summary>
  30. private static Dictionary<int, Dictionary<string, int>> _dicLayerFieldIndex = new Dictionary<int, Dictionary<string, int>>();
  31. /// <summary>
  32. /// 检查‘0长度’连接关系
  33. /// </summary>
  34. /// <param name="featChecking">待检查要素</param>
  35. /// <returns>要素连接是否正确(true -正确; false - 错误;)</returns>
  36. public static bool CheckConnectionZeroLength(IFeature featChecking)
  37. {
  38. bool __bErrorConnection = false;
  39. if (featChecking.FeatureType == esriFeatureType.esriFTSimpleEdge)
  40. {
  41. IEdgeFeature __simEdge = featChecking as IEdgeFeature;
  42. __bErrorConnection = (__simEdge.FromJunctionEID == __simEdge.ToJunctionEID); //边要素连接关系异常检查(0长度、微短线)
  43. }
  44. return (__bErrorConnection == false);
  45. }
  46. /// <summary>
  47. /// 检查边要素连接关系
  48. /// </summary>
  49. /// <param name="featChecking">待检查要素</param>
  50. /// <returns>要素连接是否正确(true -正确; false - 错误;)</returns>
  51. public static bool CheckConnectionEdge(IFeature featChecking)
  52. {
  53. bool __bErrorConnection = false;
  54. if (featChecking.FeatureType == esriFeatureType.esriFTSimpleEdge)
  55. {
  56. if (GNetworkHelper._dicLayerFieldIndex.ContainsKey(featChecking.Class.ObjectClassID) == false)
  57. {
  58. GNetworkHelper._dicLayerFieldIndex.Add(featChecking.Class.ObjectClassID, new Dictionary<string, int>());
  59. GNetworkHelper._dicLayerFieldIndex[featChecking.Class.ObjectClassID].Add("NODE1_ID", featChecking.Fields.FindField("NODE1_ID"));
  60. GNetworkHelper._dicLayerFieldIndex[featChecking.Class.ObjectClassID].Add("NODE2_ID", featChecking.Fields.FindField("NODE2_ID"));
  61. }
  62. IEdgeFeature __simEdge = featChecking as IEdgeFeature;
  63. ISimpleJunctionFeature __simJunctionFrom = __simEdge.FromJunctionFeature as ISimpleJunctionFeature;
  64. ISimpleJunctionFeature __simJunctionTo = __simEdge.ToJunctionFeature as ISimpleJunctionFeature;
  65. string __strFJunctionClass = ((__simEdge.FromJunctionFeature as IFeature).Class as IDataset).BrowseName;
  66. string __strTJunctionClass = ((__simEdge.ToJunctionFeature as IFeature).Class as IDataset).BrowseName;
  67. if ((__strFJunctionClass.EndsWith("GASDATASET_Net_Junctions") && __simJunctionFrom.EdgeFeatureCount == 1)
  68. || (__strTJunctionClass.EndsWith("GASDATASET_Net_Junctions") && __simJunctionTo.EdgeFeatureCount == 1))
  69. {
  70. string __strNode1 = Convert.ToString(featChecking.get_Value(GNetworkHelper._dicLayerFieldIndex[featChecking.Class.ObjectClassID]["NODE1_ID"]));
  71. string __strNode2 = Convert.ToString(featChecking.get_Value(GNetworkHelper._dicLayerFieldIndex[featChecking.Class.ObjectClassID]["NODE2_ID"]));
  72. __bErrorConnection = (__strNode1 != "0" || __strNode2 != "0");
  73. }
  74. }
  75. return (__bErrorConnection == false);
  76. }
  77. /// <summary>
  78. /// 检查三通要素连接关系
  79. /// </summary>
  80. /// <param name="featChecking">待检查要素</param>
  81. /// <returns>要素连接是否正确(true -正确; false - 错误;)</returns>
  82. public static bool CheckConnectionTEE(IFeature featChecking)
  83. {
  84. bool __bErrorConnection = false;
  85. if (featChecking.FeatureType == esriFeatureType.esriFTSimpleJunction && (featChecking.Class as IDataset).BrowseName.EndsWith("TEE_N"))
  86. {
  87. if (GNetworkHelper._dicLayerFieldIndex.ContainsKey(featChecking.Class.ObjectClassID) == false)
  88. {
  89. GNetworkHelper._dicLayerFieldIndex.Add(featChecking.Class.ObjectClassID, new Dictionary<string, int>());
  90. GNetworkHelper._dicLayerFieldIndex[featChecking.Class.ObjectClassID].Add("NODE1_ID", featChecking.Fields.FindField("NODE1_ID"));
  91. GNetworkHelper._dicLayerFieldIndex[featChecking.Class.ObjectClassID].Add("NODE2_ID", featChecking.Fields.FindField("NODE2_ID"));
  92. }
  93. string __strNode1 = Convert.ToString(featChecking.get_Value(GNetworkHelper._dicLayerFieldIndex[featChecking.Class.ObjectClassID]["NODE1_ID"]));
  94. string __strNode2 = Convert.ToString(featChecking.get_Value(GNetworkHelper._dicLayerFieldIndex[featChecking.Class.ObjectClassID]["NODE2_ID"]));
  95. ISimpleJunctionFeature __simJunction = featChecking as ISimpleJunctionFeature;
  96. __bErrorConnection = (__strNode1 != "0" && __strNode2 != "0" && __simJunction.EdgeFeatureCount < 2);
  97. }
  98. return (__bErrorConnection == false);
  99. }
  100. }
  101. }