//====================================================================== // // 成都同飞科技地下管网GIS系统 // // CLR 版本: 4.0.30319.42000 // 命名空间: GNetworkProcessTool // 类 名: GNetworkHelper // 创 建 人: 汤云伟 // 创建时间: 2017/5/10 10:05:55 // 修 改 人: // 修改时间: // //====================================================================== using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using ESRI.ArcGIS.Geodatabase; namespace GNetworkProcessTool { /// <summary> /// 几何网络协助器 /// </summary> public class GNetworkHelper { /// <summary> /// /// </summary> private static Dictionary<int, Dictionary<string, int>> _dicLayerFieldIndex = new Dictionary<int, Dictionary<string, int>>(); /// <summary> /// 检查‘0长度’连接关系 /// </summary> /// <param name="featChecking">待检查要素</param> /// <returns>要素连接是否正确(true -正确; false - 错误;)</returns> public static bool CheckConnectionZeroLength(IFeature featChecking) { bool __bErrorConnection = false; if (featChecking.FeatureType == esriFeatureType.esriFTSimpleEdge) { IEdgeFeature __simEdge = featChecking as IEdgeFeature; __bErrorConnection = (__simEdge.FromJunctionEID == __simEdge.ToJunctionEID); //边要素连接关系异常检查(0长度、微短线) } return (__bErrorConnection == false); } /// <summary> /// 检查边要素连接关系 /// </summary> /// <param name="featChecking">待检查要素</param> /// <returns>要素连接是否正确(true -正确; false - 错误;)</returns> public static bool CheckConnectionEdge(IFeature featChecking) { bool __bErrorConnection = false; if (featChecking.FeatureType == esriFeatureType.esriFTSimpleEdge) { if (GNetworkHelper._dicLayerFieldIndex.ContainsKey(featChecking.Class.ObjectClassID) == false) { GNetworkHelper._dicLayerFieldIndex.Add(featChecking.Class.ObjectClassID, new Dictionary<string, int>()); GNetworkHelper._dicLayerFieldIndex[featChecking.Class.ObjectClassID].Add("NODE1_ID", featChecking.Fields.FindField("NODE1_ID")); GNetworkHelper._dicLayerFieldIndex[featChecking.Class.ObjectClassID].Add("NODE2_ID", featChecking.Fields.FindField("NODE2_ID")); } IEdgeFeature __simEdge = featChecking as IEdgeFeature; ISimpleJunctionFeature __simJunctionFrom = __simEdge.FromJunctionFeature as ISimpleJunctionFeature; ISimpleJunctionFeature __simJunctionTo = __simEdge.ToJunctionFeature as ISimpleJunctionFeature; string __strFJunctionClass = ((__simEdge.FromJunctionFeature as IFeature).Class as IDataset).BrowseName; string __strTJunctionClass = ((__simEdge.ToJunctionFeature as IFeature).Class as IDataset).BrowseName; if ((__strFJunctionClass.EndsWith("GASDATASET_Net_Junctions") && __simJunctionFrom.EdgeFeatureCount == 1) || (__strTJunctionClass.EndsWith("GASDATASET_Net_Junctions") && __simJunctionTo.EdgeFeatureCount == 1)) { string __strNode1 = Convert.ToString(featChecking.get_Value(GNetworkHelper._dicLayerFieldIndex[featChecking.Class.ObjectClassID]["NODE1_ID"])); string __strNode2 = Convert.ToString(featChecking.get_Value(GNetworkHelper._dicLayerFieldIndex[featChecking.Class.ObjectClassID]["NODE2_ID"])); __bErrorConnection = (__strNode1 != "0" || __strNode2 != "0"); } } return (__bErrorConnection == false); } /// <summary> /// 检查三通要素连接关系 /// </summary> /// <param name="featChecking">待检查要素</param> /// <returns>要素连接是否正确(true -正确; false - 错误;)</returns> public static bool CheckConnectionTEE(IFeature featChecking) { bool __bErrorConnection = false; if (featChecking.FeatureType == esriFeatureType.esriFTSimpleJunction && (featChecking.Class as IDataset).BrowseName.EndsWith("TEE_N")) { if (GNetworkHelper._dicLayerFieldIndex.ContainsKey(featChecking.Class.ObjectClassID) == false) { GNetworkHelper._dicLayerFieldIndex.Add(featChecking.Class.ObjectClassID, new Dictionary<string, int>()); GNetworkHelper._dicLayerFieldIndex[featChecking.Class.ObjectClassID].Add("NODE1_ID", featChecking.Fields.FindField("NODE1_ID")); GNetworkHelper._dicLayerFieldIndex[featChecking.Class.ObjectClassID].Add("NODE2_ID", featChecking.Fields.FindField("NODE2_ID")); } string __strNode1 = Convert.ToString(featChecking.get_Value(GNetworkHelper._dicLayerFieldIndex[featChecking.Class.ObjectClassID]["NODE1_ID"])); string __strNode2 = Convert.ToString(featChecking.get_Value(GNetworkHelper._dicLayerFieldIndex[featChecking.Class.ObjectClassID]["NODE2_ID"])); ISimpleJunctionFeature __simJunction = featChecking as ISimpleJunctionFeature; __bErrorConnection = (__strNode1 != "0" && __strNode2 != "0" && __simJunction.EdgeFeatureCount < 2); } return (__bErrorConnection == false); } } }