您的位置:首页 > Web前端

AE中如何由IFeature 如何获取所对应的FeatureClass

2012-12-27 23:38 399 查看
先获取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 " + "\r\n";

                 
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 + ")" + "\r\n";
        }
        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 + ")" + "\t";
            }
            textBox3.Text += "\r\n";
        }

        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 + ")" + "\t";
            }
            textBox3.Text += "\r\n";
        }

        axMapControl1.ActiveView.PartialRefresh(esriViewDrawPhase.esriViewGeography, null, null);
      }
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: