Beispiel #1
0
 /// <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("请先构建拓扑");
     }
 }
Beispiel #2
0
 /// <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("请先构建拓扑");
     }
 }
Beispiel #3
0
        //根据错误的中文描述转换成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);
        }