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

本文介绍在ArcGIS中如何通过编程方式确定已删除要素所属的FeatureClass,并获取该要素的ID及坐标信息。适用于点、线、面不同类型的地理要素。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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

 
先获取FeatureClass,然后遍历Map中所有的FeatureLayer,然后比较
FeatureClass与FeatureLayer所对应的FeatureClass。
 
下面的例子中是在编辑功能里,删除一个Feature后,所触发的事件。目的是找到该Feature所在的FullPathName,并且输出该对象的坐标和ID号。
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
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 );
}

 

没有整理与归纳的知识,一文不值!高度概括与梳理的知识,才是自己真正的知识与技能。 永远不要让自己的自由、好奇、充满创造力的想法被现实的框架所束缚,让创造力自由成长吧! 多花时间,关心他(她)人,正如别人所关心你的。理想的腾飞与实现,没有别人的支持与帮助,是万万不能的。



    本文转自wenglabs博客园博客,原文链接:http://www.cnblogs.com/arxive/p/5903577.html,如需转载请自行联系原作者



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值