加载中…
个人资料
  • 博客等级:
  • 博客积分:
  • 博客访问:
  • 关注人气:
  • 获赠金笔:0支
  • 赠出金笔:0支
  • 荣誉徽章:
正文 字体大小:

使用ArcEngine的Select Features工具,如何获取选中的要素

(2012-02-22 11:43:59)
标签:

杂谈

分类: GIS

(转载)

使用ArcEngine的Select Features工具,如何获取选中的要素

 好久没写博客了,最近转型ArcEngine开发了。刚开始做项目就遇到一个难缠的问题。ArcEngine的ToolbarBean提供了很多好用的工具,其中最常用的莫过于查询工具类中的ControlsSelectFeaturesTool了,但是如何获取到他所选中的要素呢?到网上查了两天,发现论坛上问这个问题的人很多,但是有用的回答确很少。于是开始认真的看官网的帮助发现了这样一段代码:

      

  1. public void getSelectedFeature()  
  2.  
  3.     try  
  4.      
  5.         IMap map mapBean.getMap();  
  6.         ISelection selection map.getFeatureSelection();  
  7.         IEnumFeature enumFeature (IEnumFeature)selection;  
  8.         enumFeature.reset();  
  9.         IFeature feature enumFeature.next();  
  10.         while (feature != null 
  11.          
  12.             System.out.println("FEATURE ID: " feature.getOID());  
  13.             feature enumFeature.next();  
  14.          
  15.      
  16.     catch (Exception e)  
  17.      
  18.         e.printStackTrace();  
  19.      
  20.  

很兴奋呀!但是用了之后发现我得到的IFeature对象中确只能拿到ID,其他的字段读取出来全部为空。而且IEnumFeature enumFeature = (IEnumFeature)selection会报类型转换错误,只能用IEnumFeature enumFeature = new IEnumFeatureProxy(selection);于是沉下心认真的读了API中的REMARK,他是这样写的:When this interface is used to access features from a map's feature selection (IMap.FeatureSelection), the IEnumFeatureSetup.AllFields property should be used to return fully hydrated features.也就是说:ArcGIS中FeatureSelection默认的时候只存入Feature 的Shape,而不是整个Feature的字段数据。如果要查看其他数据,必须要进行以下转换才可以:

 

  1. IEnumFeatureSetup iEnumFeatureSetup new IEnumFeatureSetupProxy(selection);                    iEnumFeatureSetup.setAllFields(true);  

 

 

于是才有了现在这几行珍贵的代码,最终解决了问题。

 

  1. IMap map mapBean.getMap();  
  2.                         ISelection selection map.getFeatureSelection();  
  3.                         IEnumFeatureSetup iEnumFeatureSetup new IEnumFeatureSetupProxy(selection);  
  4.                         iEnumFeatureSetup.setAllFields(true);  
  5.                         IEnumFeature enumFeature new IEnumFeatureProxy(iEnumFeatureSetup);  
  6.                         enumFeature.reset();  
  7.                         IFeature feature enumFeature.next();  
  8.                         while (feature != null 
  9.                          
  10.                             System.out.println("FEATURE ID: " feature.getOID());  
  11.                             System.out.println(feature.getValue(2));  
  12.                             feature enumFeature.next();  
  13.                          

 

希望以上的信息会对大家有所帮助,也希望各位ArcGIS的大鸟们能够抽出一些时间多回答一下网上的提问,让我们这些菜鸟能够少走一些弯路,通过技术交流,共同进步。

看了您的文章总算把难题解决了,不过不知道是不是版本问题,感觉有些代码语法的冲突,我用的是arcengine 10和vs2010,现在我把我根据您的代码改编语法格式的代码发上,希望后面看到的人有用!
再次的感谢您!

 

  1. public void getSelectedFeature()    
  2.          
  3.            try    
  4.               
  5.             IMap map axMapControl1.Map;  
  6.             ISelection selection map.FeatureSelection;  
  7.             IEnumFeatureSetup iEnumFeatureSetup (IEnumFeatureSetup)selection;  
  8.             iEnumFeatureSetup.AllFields true 
  9.             IEnumFeature enumFeature (IEnumFeature)iEnumFeatureSetup;  
  10.             enumFeature.Reset();    
  11.             IFeature feature enumFeature.Next();    
  12.             while (feature != null   
  13.               
  14.                  string hehe feature.get_Value(5).ToString();  
  15.                  MessageBox.Show(hehe);  
  16.                feature enumFeature.Next();    
  17.                 
  18.               
  19.            catch (Exception e)    
  20.             
  21.             
  22.          

 

public void getSelectedFeature() { try { IMap map = axMapControl1.Map; ISelection selection = map.FeatureSelection; IEnumFeatureSetup iEnumFeatureSetup = (IEnumFeatureSetup)selection; iEnumFeatureSetup.AllFields = true; IEnumFeature enumFeature = (IEnumFeature)iEnumFeatureSetup; enumFeature.Reset(); IFeature feature = enumFeature.Next(); while (feature != null) { string hehe = feature.get_Value(5).ToString(); MessageBox.Show(hehe); feature = enumFeature.Next(); } } catch (Exception e) { } }

0

阅读 收藏 喜欢 打印举报/Report
  

新浪BLOG意见反馈留言板 欢迎批评指正

新浪简介 | About Sina | 广告服务 | 联系我们 | 招聘信息 | 网站律师 | SINA English | 产品答疑

新浪公司 版权所有