/// <summary> /// 单要素规则 /// </summary> /// <param name="IN_RuleType">要添加的规则</param> /// <param name="IN_FeatureClass">添加规则的要素类</param> public void PUB_AddRuleToTopology(string idname, TopoErroType IN_RuleType, IFeatureClass IN_FeatureClass) { if (Topology != null) { ITopologyRule Temp_TopologyRule = new TopologyRuleClass(); //设定参数 Temp_TopologyRule.TopologyRuleType = PRV_ConvertTopologyRuleType(IN_RuleType); Temp_TopologyRule.Name = IN_RuleType.ToString(); Temp_TopologyRule.OriginClassID = IN_FeatureClass.FeatureClassID; Temp_TopologyRule.AllOriginSubtypes = true; LI_ITopologyRule.Add(Temp_TopologyRule); PRV_AddRuleTool(Temp_TopologyRule, idname); } else { MessageBox.Show("请先构建拓扑"); } }
/// <summary> /// 单要素规则 /// </summary> /// <param name="IN_RuleType">要添加的规则</param> /// <param name="IN_FeatureClass">添加规则的要素类</param> public void PUB_AddRuleToTopology(TopoErroType IN_RuleType, IFeatureClass IN_FeatureClass, out List <string> AllErrorInfo) { if (Topology != null) { ITopologyRule Temp_TopologyRule = new TopologyRuleClass(); //设定参数 Temp_TopologyRule.TopologyRuleType = PRV_ConvertTopologyRuleType(IN_RuleType); Temp_TopologyRule.Name = IN_RuleType.ToString(); Temp_TopologyRule.OriginClassID = IN_FeatureClass.FeatureClassID; Temp_TopologyRule.AllOriginSubtypes = true; PRV_AddRuleTool(Temp_TopologyRule); AllErrorInfo = LI_AllErrorInfo; } else { AllErrorInfo = null; MessageBox.Show("请先构建拓扑"); } }
//根据错误的中文描述转换成esri拓扑枚举 private esriTopologyRuleType PRV_ConvertTopologyRuleType(TopoErroType IN_TopoRuleType) { esriTopologyRuleType Temp_TopoRuleType; switch (IN_TopoRuleType) { case TopoErroType.面要素之间无空隙: Temp_TopoRuleType = esriTopologyRuleType.esriTRTAreaNoGaps; break; case TopoErroType.任何规则: Temp_TopoRuleType = esriTopologyRuleType.esriTRTAny; break; case TopoErroType.要素大于最小容差: Temp_TopoRuleType = esriTopologyRuleType.esriTRTFeatureLargerThanClusterTolerance; break; case TopoErroType.面要素间无重叠: Temp_TopoRuleType = esriTopologyRuleType.esriTRTAreaNoOverlap; break; case TopoErroType.第二个图层面要素必须被第一个图层任一面要素覆盖: Temp_TopoRuleType = esriTopologyRuleType.esriTRTAreaCoveredByAreaClass; break; case TopoErroType.面要素必须只包含一个点要素: Temp_TopoRuleType = esriTopologyRuleType.esriTRTAreaContainOnePoint; break; case TopoErroType.两图层面要素必须互相覆盖: Temp_TopoRuleType = esriTopologyRuleType.esriTRTAreaAreaCoverEachOther; break; case TopoErroType.第一个图层面要素必须被第一个图层任一面要素包含: Temp_TopoRuleType = esriTopologyRuleType.esriTRTAreaCoveredByArea; break; case TopoErroType.图层间面要素不能相互覆盖: Temp_TopoRuleType = esriTopologyRuleType.esriTRTAreaNoOverlapArea; break; case TopoErroType.线要素必须跟面图层边界的一部分或全部重叠: Temp_TopoRuleType = esriTopologyRuleType.esriTRTLineCoveredByAreaBoundary; break; case TopoErroType.点要素必须落在面要素边界上: Temp_TopoRuleType = esriTopologyRuleType.esriTRTPointCoveredByAreaBoundary; break; case TopoErroType.点要素必须落在面要素内: Temp_TopoRuleType = esriTopologyRuleType.esriTRTPointProperlyInsideArea; break; case TopoErroType.线要素间不能有相互重叠部分: Temp_TopoRuleType = esriTopologyRuleType.esriTRTLineNoOverlap; break; case TopoErroType.线要素之间不能相交: Temp_TopoRuleType = esriTopologyRuleType.esriTRTLineNoIntersection; break; case TopoErroType.线要素不允许有悬挂点: Temp_TopoRuleType = esriTopologyRuleType.esriTRTLineNoDangles; break; case TopoErroType.线要素不允许有假节点: Temp_TopoRuleType = esriTopologyRuleType.esriTRTLineNoPseudos; break; case TopoErroType.第一个图层线要素应被第二个线图层线要素覆盖: Temp_TopoRuleType = esriTopologyRuleType.esriTRTLineCoveredByLineClass; break; case TopoErroType.第一个图层线要素不被第二个线图层线要素覆盖: Temp_TopoRuleType = esriTopologyRuleType.esriTRTLineNoOverlapLine; break; case TopoErroType.点要素应被线要素覆盖: Temp_TopoRuleType = esriTopologyRuleType.esriTRTPointCoveredByLine; break; case TopoErroType.点要素应在线要素的端点上: Temp_TopoRuleType = esriTopologyRuleType.esriTRTPointCoveredByLineEndpoint; break; case TopoErroType.面要素边界必须被线要素覆盖: Temp_TopoRuleType = esriTopologyRuleType.esriTRTAreaBoundaryCoveredByLine; break; case TopoErroType.面要素的边界必须被另一面要素边界覆盖: Temp_TopoRuleType = esriTopologyRuleType.esriTRTAreaBoundaryCoveredByAreaBoundary; break; case TopoErroType.线要素不能自重叠: Temp_TopoRuleType = esriTopologyRuleType.esriTRTLineNoSelfOverlap; break; case TopoErroType.线要素不能自相交: Temp_TopoRuleType = esriTopologyRuleType.esriTRTLineNoSelfIntersect; break; case TopoErroType.线要素间不能重叠和相交: Temp_TopoRuleType = esriTopologyRuleType.esriTRTLineNoIntersectOrInteriorTouch; break; case TopoErroType.线要素端点必须被点要素覆盖: Temp_TopoRuleType = esriTopologyRuleType.esriTRTLineEndpointCoveredByPoint; break; case TopoErroType.面要素内必须包含至少一个点要素: Temp_TopoRuleType = esriTopologyRuleType.esriTRTAreaContainPoint; break; case TopoErroType.线不能是多段: Temp_TopoRuleType = esriTopologyRuleType.esriTRTLineNoMultipart; break; case TopoErroType.点要素之间不相交: Temp_TopoRuleType = esriTopologyRuleType.esriTRTPointDisjoint; break; /* * case TopoErroType.线要素必须不相交: * Temp_TopoRuleType = esriTopologyRuleType.esriTRTLineNoIntersection; * break; * */ case TopoErroType.线必须不相交或内部接触: Temp_TopoRuleType = esriTopologyRuleType.esriTRTLineNoIntersectOrInteriorTouchLine; break; default: Temp_TopoRuleType = esriTopologyRuleType.esriTRTAny; //将此规则赋予拓扑会直接报错 break; } return(Temp_TopoRuleType); }