AE拓扑规则创建

  • 拓扑规则创建方法
IFeatureDataset FeatureDataset; 要创建拓扑规则的要素集
ITopologyContainer2 pTopoCont = FeatureDataset as ITopologyContainer2;
ITopology pTopology = pTopoCont.CreateTopology("拓扑名称", 容差(double, -1, string.Empty);
pTopology.AddClass(pFeaCls1, 10, 5, 5, false);
pTopology.AddClass(pFeaCls2, 10, 5, 5, false);

ITopologyRule pTopoRule = new TopologyRuleClass();
pTopoRule.TopologyRuleType=(规则赋值)
pTopoRule.OriginClassID = pFeaCls1.ObjectClassID;
pTopoRule.AllOriginSubtypes = true;
pTopoRule.DestinationClassID = pFeaCls2.ObjectClassID;
pTopoRule.AllDestinationSubtypes = true;

 添加规则
ITopologyRuleContainer pTopRuleCon = pTopology as ITopologyRuleContainer;
bool bCanAddRule = pTopRuleCon.get_CanAddRule(pTopoRule);
  • 执行拓扑
 IGeoDataset pGeoDS = pTopology as IGeoDataset;
 IEnvelope pEnv = pGeoDS.Extent;  
 IEnvelope pEnvOut = pTopology.ValidateTopology(pEnv);
  • 拓扑图层展示
 ITopologyLayer pTopologyLyr = new TopologyLayerClass();
 pTopologyLyr.Topology = pTopology;
(pTopologyLyr as ILayer).Name = "图层名称";
 pMap.AddLayer(pTopologyLyr as ILayer);
  • 获取拓扑错误信息
//获取要素类容器
IFeatureDataset pFeaDs = pTopology.FeatureDataset;
IFeatureClassContainer pFeaClsContainer = pFeaDs as IFeatureClassContainer;

//获取拓扑规则容器
ITopologyRuleContainer pRuleCont = pTopology as ITopologyRuleContainer;
IEnumRule pEnumRule = pRuleCont.Rules;
if (pEnumRule == null)
{
    return;
}

 //获取错误要素容器
IErrorFeatureContainer pErrFeaContainer = pTopology as IErrorFeatureContainer;
IRule pRule = pEnumRule.Next();
ITopologyRule pTopRule = pRule as ITopologyRule;
 while (pRule != null)
 {
    int OrgCID = pTopRule.OriginClassID;
    int DesCID = pTopRule.DestinationClassID;
    IFeatureClass pOrgFeaCls = pFeaClsContainer.get_ClassByID(OrgCID);
     获取拓扑错误要素集合
    IEnumTopologyErrorFeature pEnumTopoErrFea = pErrFeaContainer.get_ErrorFeatures(pSpr, pTopRule, pEnv, true, true);
     ITopologyErrorFeature pTopologyErrFea = pEnumTopoErrFea.Next();
     while (pTopologyErrFea != null)
     {
      获取拓扑错误图形的objectid
      int ErrID = pTopologyErrFea.ErrorID;
      int OrgOID = pTopologyErrFea.OriginOID;
      int DesOID = pTopologyErrFea.DestinationOID;
     }
 }
  • 拓扑相关规则
    esriTopologyRuleType pTopoRuleType=null;
    1.必须在其它图层线的端点:esriTopologyRuleType.esriTRTPointCoveredByLineEndpoint;
    2.点必须在其他线上:esriTopologyRuleType.esriTRTPointCoveredByLine;
    3.点必须在其它面的内部:esriTopologyRuleType.esriTRTPointProperlyInsideArea;
    4.图层内部线不可以重叠: esriTopologyRuleType.esriTRTLineNoOverlap;
    5.图层内部线和线之间必须不相交:esriTopologyRuleType.esriTRTLineNoIntersection;
    6.必须在其它图层面的边缘上: esriTopologyRuleType.esriTRTLineCoveredByAreaBoundary;
    7.不能自身重叠: esriTopologyRuleType.esriTRTLineNoSelfOverlap;
    8.不能自身相交: esriTopologyRuleType.esriTRTLineNoSelfIntersect;
    9.必须是单线: esriTopologyRuleType.esriTRTLineNoMultipart;
    10.线的端点必须在其它线上:esriTopologyRuleType.esriTRTLineNoIntersectOrInteriorTouch;
    11.线的节点必须被其他点覆盖: esriTopologyRuleType.esriTRTLineEndpointCoveredByPoint;
    12.图层内部面和面之间必须不重叠:esriTopologyRuleType.esriTRTAreaNoOverlap;
    13.图层内部面和面之间必须没有缝隙:esriTopologyRuleType.esriTRTAreaNoGaps;
    14.必须不和其它图层的面重叠:esriTopologyRuleType.esriTRTAreaNoOverlapArea;
    15.必须被其它图层的面覆盖:esriTopologyRuleType.esriTRTAreaCoveredByAreaClass;
    16.必须在其它图层面的内部:esriTopologyRuleType.esriTRTAreaCoveredByArea;
    17.边缘必须被其它图层的线覆盖:esriTopologyRuleType.esriTRTAreaBoundaryCoveredByLine;
    18.线必须不被其他图层覆盖:esriTopologyRuleType.esriTRTLineNoOverlapLine;
    19.点必须被其他面的边界覆盖: esriTopologyRuleType.esriTRTPointCoveredByAreaBoundary;
    20.面的边界必须被其它图层面边界覆盖: esriTopologyRuleType.esriTRTAreaBoundaryCoveredByAreaBoundary;
    21.面与面重叠: esriTopologyRuleType.esriTRTAreaAreaCoverEachOther;
    22.线必须无摇摆:esriTopologyRuleType.esriTRTLineNoDangles;
    23.线不存在伪节点: esriTopologyRuleType.esriTRTLineNoPseudos;
    24.线必须被其他图层覆盖:esriTopologyRuleType.esriTRTLineCoveredByLineClass;
    25.面必须包含点: esriTopologyRuleType.esriTRTAreaContainPoint;
  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值