原文 AE要素选择(点选和拉框选择)

选择一个要素或者一个要素集(FeatureSelection)的方法很多,如IMap::SelectByShape、ILayer::search、IFeatureSection::SelectFeature等方法。

主要用到的方法:

IMap接口的SelectFeature(Layer, Feature) (方法,从一个Layer中选择一个Feature);

IMap接口SelectByShape(Shape, env, justOne) (方法,从Layer中依靠一个图形的范围shape和一个选择的环境env来选择要素,而在所有图层中只从IFeatureLayer的图层中进行选择)

IFeatureSelection接口SelectFeatures (Filter, Method, justOne ) (方法,根据指定的标准过滤器filter和方法,选择要素,第一个参数为QueryFilter类型的变量,第二个参数为esriSelectionResultEnum类型的变量,第三个参数为布尔型变量,通常为false)

IFeatureLayer接口Search (IqueryFilter, book ) (方法,创建一个游标去查询相应设置的过滤器的查询)

1 点选法获取要素

  1. private double ConvertPixelsToMapUnits(IActiveView pActiveView, double pixelUnits)
  2. {
  3. // Uses the ratio of the size of the map in pixels to map units to do the conversion
  4. IPoint p1 = pActiveView.ScreenDisplay.DisplayTransformation.VisibleBounds.UpperLeft;
  5. IPoint p2 = pActiveView.ScreenDisplay.DisplayTransformation.VisibleBounds.UpperRight;
  6. int x1, x2, y1, y2;
  7. pActiveView.ScreenDisplay.DisplayTransformation.FromMapPoint(p1, out x1, out y1);
  8. pActiveView.ScreenDisplay.DisplayTransformation.FromMapPoint(p2, out x2, out y2);
  9. double pixelExtent = x2 - x1;
  10. double realWorldDisplayExtent = pActiveView.ScreenDisplay.DisplayTransformation.VisibleBounds.Width;
  11. double sizeOfOnePixel = realWorldDisplayExtent / pixelExtent;
  12. return pixelUnits * sizeOfOnePixel;
  13. }
  14. IMap pMap = axMapControl1.Map;
  15. IActiveView pActiveView = pMap as IActiveView;
  16. IFeatureLayer pFeatureLayer = pMap.get_Layer() as IFeatureLayer;
  17. IFeatureClass pFeatureClass = pFeatureLayer.FeatureClass;
  18.  
  19. //设置点击点的位置
  20. IPoint point = pActiveView.ScreenDisplay.DisplayTransformation.ToMapPoint(e.x, e.y);
  21. ITopologicalOperator pTOpo = point as ITopologicalOperator;
  22. double length;
  23. length = ConvertPixelsToMapUnits(pActiveView, );
  24. IGeometry pBuffer = pTOpo.Buffer(length);
  25. IGeometry pGeomentry = pBuffer.Envelope;
  26. //空间滤过器
  27. ISpatialFilter pSpatialFilter = new SpatialFilterClass();
  28. pSpatialFilter.Geometry = pGeomentry;
  29. //根据被选择要素的不同,设置不同的空间滤过关系
  30. switch (pFeatureClass.ShapeType)
  31. {
  32. case esriGeometryType.esriGeometryPoint:
  33. pSpatialFilter.SpatialRel=esriSpatialRelEnum.esriSpatialRelContains;
  34. break;
  35. case esriGeometryType.esriGeometryPolyline:
  36. pSpatialFilter.SpatialRel=esriSpatialRelEnum.esriSpatialRelCrosses;
  37. break;
  38. case esriGeometryType.esriGeometryPolygon :
  39. pSpatialFilter.SpatialRel=esriSpatialRelEnum.esriSpatialRelIntersects;
  40. break;
  41.  
  42. }
  43. IFeatureSelection pFSelection=pFeatureLayer as IFeatureSelection;
  44. pFSelection.SelectFeatures(pSpatialFilter,esriSelectionResultEnum.esriSelectionResultNew,false);
  45. ISelectionSet pSelectionset=pFSelection.SelectionSet;
  46. ICursor pCursor;
  47. pSelectionset.Search(null,true,out pCursor);
  48. IFeatureCursor pFeatCursor=pCursor as IFeatureCursor;
  49. IFeature pFeature=pFeatCursor.NextFeature();
  50. while(pFeature!=null)
  51. {
  52. pMap.SelectFeature(pFeatureLayer,pFeature);
  53. pFeature=pFeatCursor.NextFeature();
  54. }
  55. pActiveView.PartialRefresh(esriViewDrawPhase.esriViewGraphicSelection,null,null);
  56. //另外的改写:
  57. pSpatialFilter.GeometryField = pFeatureClass.ShapeFieldName;
  58. IQueryFilter pFilter = pSpatialFilter;
  59. IFeatureCursor pFeatCursor = pFeatureLayer.Search(pFilter,false);
  60. IFeature pFeature=pFeatCursor.NextFeature();
  61. while(pFeature!=null)
  62. {
  63. pMap.SelectFeature(pFeatureLayer,pFeature);
  64. pFeature=pFeatCursor.NextFeature();
  65. }
  66. pActiveView.PartialRefresh(esriViewDrawPhase.esriViewGraphicSelection,null,null);

另外还有一种较简单的点选方法:

  1. IGeometry g = null;
  2. IEnvelope pEnv;
  3. IActiveView pActiveView = axMapControl1.ActiveView;
  4. IMap pMap = axMapControl1.Map;
  5. pEnv = axMapControl1.TrackRectangle();
  6. if (pEnv.IsEmpty == true)
  7. {
  8. ESRI.ArcGIS.Display.tagRECT r;
  9. r.bottom = e.y + ;
  10. r.top = e.y - ;
  11. r.left = e.x - ;
  12. r.right = e.x + ;
  13. pActiveView.ScreenDisplay.DisplayTransformation.TransformRect(pEnv, ref r, );
  14. pEnv.SpatialReference = pActiveView.FocusMap.SpatialReference;
  15. }
  16. g = pEnv as IGeometry;
  17. axMapControl1.Map.SelectByShape(g, null, false);
  18. axMapControl1.Refresh(esriViewDrawPhase.esriViewGeoSelection, null, null);

2 拉框选择

  1.  
  1. IMap pMap = axMapControl1.Map;
  2. IActiveView pActiveView = pMap as IActiveView;
  3. IEnvelope pEnv = axMapControl1.TrackRectangle();
  4. pMap.SelectByShape(pEnv, null, false);
  5. pActiveView.PartialRefresh(esriViewDrawPhase.esriViewGeoSelection,null, null);
  1.  

AE要素选择(点选和拉框选择)的更多相关文章

  1. Easyui-Combobox多选下拉框

    因为工作需要,引入combobox多选下拉框,并且获取选择的值并以","分开. 效果如下: 代码如下: <html> <head> <title> ...

  2. js:jquery multiSelect 多选下拉框实例

    <!doctype html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  3. DropDownList单选与多选下拉框

    一.单选DropDownList传值 1.添加界面的DropDownList显示值问题 (1)在方法内添加ViewData的方法: var ad = new UnitsRepository(); Vi ...

  4. echarts异步数据加载(在下拉框选择事件中异步更新数据)

    接触echarts 大半年了,从不会到熟练也做过不少的图表,隔了一段时间没使用这玩意,好多东西真心容易忘了.在接触echarts这期间也没有总结什么东西,今天我就来总结一下如何在echart中异步加载 ...

  5. pentaho cde 自定义复选下拉框 checkbox select

    pentaho  自带的component 虽多,但是当用户需要在一个表格中查看多个组别的数据时,pentaho自带的单选框就不能实现了,所以复选下拉框势在必行,实现效果如下: 实现原理是借用了jqu ...

  6. query多选下拉框插件 jquery-multiselect(修改)

    其实网上关于该控件的使用教程已经很多了,其中 query多选下拉框插件 jquery-multiselect Jquery多选下拉列表插件jquery multiselect功能介绍及使用 这2个的介 ...

  7. MVC实现多选下拉框,保存并显示多选项

    在"MVC实现多选下拉框"中,主要是多选下拉框的显示,而实际情况通常是:选择多个选项提交后,需要在编辑页把所有选中的项显示出来. 模拟这样的一个场景:一个车迷可能有多个自己喜欢的汽 ...

  8. MVC实现多选下拉框

    借助Chosen Plugin可以实现多选下拉框. 选择多项: 设置选项数量,比如设置最多允许2个选项: 考虑到多选下拉<select multiple="multiple" ...

  9. 自定义SWT控件二之自定义多选下拉框

    2.自定义下拉多选框 package com.view.control.select; import java.util.ArrayList; import java.util.HashMap; im ...

随机推荐

  1. Thinkphp5图片上传正常,音频和视频上传失败的原因及解决

    Thinkphp5图片上传正常,音频和视频上传失败的原因及解决 一.总结 一句话总结:php中默认限制了上传文件的大小为2M,查找错误的时候百度,且根据错误提示来查找错误. 我的实际问题是: 我的表单 ...

  2. javascript变量类型及作用域

    javascript变量类型及作用域 一.简介 变量类型 ECMAScript变量可能包含两种不同类型的数据值:基本类型和引用类型. 基本类型 基本类型指的是简单的数据段,5种基本数据类型:undef ...

  3. 33.IDEA + maven]在IDEA中打开一个maven项目,resolve完依赖后,缺少部分jar包问题

    转自:https://www.cnblogs.com/zazalu/p/7649590.html [注意]作者只是对使用过程中遇到的问题提出了一个解决方案,但是本人在编写此解决方案文章的时候,对mav ...

  4. pip的认识

    一.pip与python的关系:pip并不是一种语言,而是一个Python包管理工具,主要是用于安装 PyPI 上的软件包.安装好pip之后,使用pip install 命令即可方便的安装python ...

  5. Impala储存与分区

    不多说,直接上干货! hive的元数据存储在/user/hadoop/warehouse Impala的内部表也在/user/hadoop/warehouse. 那两者怎么区分,看前面的第一列. 下面 ...

  6. BootStrap_Table 学习

    https://blog.csdn.net/heting90/article/details/52248729 $("#realTime_Table").bootstrapTabl ...

  7. Standalone 集群部署

    Spark中调度其实是分为两个层级的,即集群层级的资源分配和任务调度,以及任务层级的任务管理.其中集群层级调度是可配置的,Spark目前提供了Local,Standalone,YARN,Mesos.任 ...

  8. spring boot 热启动

    spring boot热启动有两种方式 1. 以Maven插件的形式去加载,所以启动时使用通过Maven命令mvn spring-boot:run启动,而通过Application.run方式启动的会 ...

  9. Linux网络编程--字节序

    1 .谈到字节序,那么会有朋友问什么是字节序 非常easy:[比如一个16位的整数.由2个字节组成,8位为一字节,有的系统会将高字节放在内存低的地址上,有的则将低字节放在内存高的地址上,所以存在字节序 ...

  10. CSS demo:flaot &amp; clear float

    1,首先,我们布局主要的div块: 例如以下代码所看到的,我们在body里面写3几个基本div块,然后设置一些基本属性: 效果图: 2,增加基本浮动 如今我们想让红色div放到绿色div右边,我们在两 ...