• [转] AE中如何由IFeature 如何获取所对应的FeatureClass


    转载的原文 AE中如何由IFeature 如何获取所对应的FeatureClass

     
    先获取FeatureClass,然后遍历Map中所有的FeatureLayer,然后比较
    FeatureClass与FeatureLayer所对应的FeatureClass。
     
    下面的例子中是在编辑功能里,删除一个Feature后,所触发的事件。目的是找到该Feature所在的FullPathName,并且输出该对象的坐标和ID号。
     
    private void OnDeleteFeatureMethod(object o)
    {           
      IFeature pFeature = o as IFeature;         
      IFeatureClass pFeatureClass = pFeature.Class as IFeatureClass;
      for (int i = 0; i < axMapControl1.Map.LayerCount;i++ )
      {
                IFeatureLayer iFeatureLayer = axMapControl1.get_Layer(i) as IFeatureLayer;
                IFeatureClass iFeatureCla = iFeatureLayer.FeatureClass;
                 
                    if (iFeatureCla == pFeatureClass)
                    {
                        IWorkspace pWorkSpace = m_EngineEditor.EditWorkspace;
                        textBox3.Text += "操作的文件全路径:" + pWorkSpace.PathName + "\" +       axMapControl1.get_Layer(i).Name + ".shp " + "
    ";
                        break;
                    }
            }
    
             if (pFeature.Shape.GeometryType == esriGeometryType.esriGeometryPoint)
             {
                 IGeometry iGe = pFeature.Shape;
                 IPoint ipo = new PointClass();
                 ipo = iGe as IPoint;
                 int a = 0;
                 int b = 0;
                 axMapControl1.FromMapPoint(ipo, ref a, ref   b);
                 textBox3.Text += "删除的点的ID号:" + pFeature.OID + ",坐标:(" + a + "," + b + ")" + "
    ";
             }
             else if (pFeature.Shape.GeometryType == esriGeometryType.esriGeometryPolygon)
             {
                 textBox3.Text += "删除的多边形对象的ID号:" + pFeature.OID + ",坐标:";
                 IPolygon pPolygon = (IPolygon)pFeature.Shape;
                 int a = 0;
                 int b = 0;
                 //把该feature强制转换为一个点的集合,再取点的坐标
                 IPointCollection pPointCollection = pPolygon as IPointCollection;
                 for (int i = 0; i < pPointCollection.PointCount - 1; i++)
                 {
                     IPoint ipo = pPointCollection.get_Point(i);
                     axMapControl1.FromMapPoint(ipo, ref a, ref   b);
                     textBox3.Text += "(" + a + "," + b + ")" + "	";
                 }
                 textBox3.Text += "
    ";
             }
     
             else if (pFeature.Shape.GeometryType == esriGeometryType.esriGeometryPolyline)
             {
                 textBox3.Text += "删除的线对象的ID号:" + pFeature.OID + ",其坐标:";
                 IPolyline pPolygon = (IPolyline)pFeature.Shape;
                 int a = 0;
                 int b = 0;
                 //把该feature强制转换为一个点的集合,再取点的坐标
                 IPointCollection pPointCollection = pPolygon as IPointCollection;
                 for (int i = 0; i < pPointCollection.PointCount; i++)
                 {
                     IPoint ipo = pPointCollection.get_Point(i);
                     axMapControl1.FromMapPoint(ipo, ref a, ref   b);
                     textBox3.Text += "(" + a + "," + b + ")" + "	";
                 }
                 textBox3.Text += "
    ";
      }
      axMapControl1.ActiveView.PartialRefresh(esriViewDrawPhase.esriViewGeography, null, null);
    }
    
  • 相关阅读:
    基于STM32F103C8T6的超声波测距示例
    ST-LINK 到 SWD接线图
    MDK破解版下载
    CompletableFuture Quasar 等并发编程
    c++中参数传递和函数返回简析
    c++中冒号(:)和双冒号(::)的用法
    c++中,size_typt, size_t, ptrdiff_t 简介
    c++中,保证头文件只被编译一次,避免多重包含的方法
    时间序列分析之一次指数平滑法
    Openv2.1基本数据类型
  • 原文地址:https://www.cnblogs.com/arxive/p/5903577.html
Copyright © 2020-2023  润新知