zoukankan      html  css  js  c++  java
  • ArcEngine中拓扑的使用

     拓扑(ITopology)的使用包括
    1.建立拓扑
    2.验证拓扑
    3.编辑过程中保证拓扑的正确
    4.查询系统中存在的拓扑
    1.首先 来看看建立拓扑
        Topology实现了ITopology这个接口 但是给类是不能用来创建对象的。
      必须要通过调用 ITopologyContainer::CreateTopology这个方法来建立一个Topology
      FeatureDataset 实现了ITopologyContainer这个接口。那么 这就是说拓扑只能在一个
      FeatureDataset的范围内建立。而不能独立存在于Workspace中。这样做的原因是需要保证
      参与同一个拓扑的FeatureClass具有同一个投影坐标系统。 建立拓扑后需要将ObjectClass
      加入到拓扑中去。这样这个拓扑就可以用来验证这几个ObjectClass 的对象之间的关系了。
         验证关系就要有规则,规则是由ITopologyRule来表达的。ITopologyRule必须要被
       加入到一个ITopologyRuleContainer中去。而Topology实现了这个接口。
       一个ITopologyRule用来表达两个ObjectClass的对象之间的某个关系。
         具体代码参看接口就可以了。
    2.验证拓扑
         ITopology有一个方法 ValidateTopology 用来验证指定区域内的拓扑。需要注意 没有版本
       的拓扑可以在 任何时候验证。而有版本的拓扑必须在编辑回话中验证。
    3.拓扑编辑
       1.移动共用点
        1.首先需要打开拓扑 建立拓扑图(ITopologyGraph)
        代码如下:
        //topoLayer 是一个打开的拓扑图层
        ITopologyGraph pTG=topoLayer.Topology.Cache;
      pTG.Build(pA.Extent,false);
      2.然后 需要获得当前节点或者边 这个操作要使用拓扑图的点击测试
      ITopologyElement topeEle
      pTG.HitTest(... ref topeEle);
      这个方法在点击测试成功的时候返回true.而且会通过topeEle这个ref 参数将选中的元素(点或者边)
      返回.
      3.还有一种获取节点的方法
        首先调用拓扑图的Select方法 选中点击测试的元素(pTG.Select)
        然后可以查询拓扑图的选中节点集合 就可以找到该节点(pTG.NodeSelection)
      4.为该元素使用一个Feedback.
       //其中 pNode 就是当前节点 sr 是参考坐标系 可以使用null
       //还有给Feedback设置Display
        m_pNodeFeedback =pTG.GetSplitMoveNodeFeedback(pNode,false,sr);
        m_pNodeFeedback.Display= activeView.ScreenDisplay;
      5.在鼠标移动的时候 调用Feedback的MoveTo 方法。
       if(m_pNodeFeedback!=null)
       {
        //activeView 是活动的试图
        //首先要把将点坐标转换为地图中的坐标。
        //然后调用MoveTo 方法    
        IPoint pt=activeView.ScreenDisplay.DisplayTransformation.ToMapPoint(X,Y);
        m_pNodeFeedback.MoveTo(pt);
       }
        6.在鼠标释放的时候
          //获取拓扑图
            ITopologyGraph pTG=topoLayer.Topology.Cache;
            //转换坐标  
          IPoint pt=pA.ScreenDisplay.DisplayTransformation.ToMapPoint(X,Y);
          //获得正在做拓扑编辑的元素        
         ITopologyNode pTN=(ITopologyNode)m_pTopoElement;
         //实施拓扑编辑
        pTG.SplitMoveNode(pTN,pt,false);
        //提交拓扑编辑结果
        IEnvelope pE;
        pTG.Post(out pE);
    4.查询系统中的拓扑
       还是ITopologyContainer 这个接口 这个接口有FeatureDataset这个唯一的实现。
       CreateTopology 建立一个新的拓扑
       DefaultClusterTolerance The default cluster tolerance as per the topology engine.
       MaximumClusterTolerance The maximal cluster tolerance as per the topology engine.
       MinimumClusterTolerance The minimal cluster tolerance as per the topology engine.
       Topology 通过索引打开拓扑.
       TopologyByID 通过ID打开拓扑.
       TopologyByName 通过名字打开拓扑
       TopologyCount  拓扑的数目

  • 相关阅读:
    POJ 2411 状态压缩递,覆盖方案数
    POJ 2774 最长公共子串
    POJ 1743 不可重叠的最长重复子串
    POJ 3294 出现在至少K个字符串中的子串
    POJ 3261 出现至少K次的可重叠最长子串
    POJ 1741/1987 树的点分治
    HDU1556 Color the ball
    解决linux系统时间不对的问题
    CentOS 6.9使用Setup配置网络(解决dhcp模式插入网线不自动获取IP的问题)
    Linux网络配置(setup)
  • 原文地址:https://www.cnblogs.com/googlegis/p/2979201.html
Copyright © 2011-2022 走看看