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 点选法获取要素
- private double ConvertPixelsToMapUnits(IActiveView pActiveView, double pixelUnits)
- {
- // Uses the ratio of the size of the map in pixels to map units to do the conversion
- IPoint p1 = pActiveView.ScreenDisplay.DisplayTransformation.VisibleBounds.UpperLeft;
- IPoint p2 = pActiveView.ScreenDisplay.DisplayTransformation.VisibleBounds.UpperRight;
- int x1, x2, y1, y2;
- pActiveView.ScreenDisplay.DisplayTransformation.FromMapPoint(p1, out x1, out y1);
- pActiveView.ScreenDisplay.DisplayTransformation.FromMapPoint(p2, out x2, out y2);
- double pixelExtent = x2 - x1;
- double realWorldDisplayExtent = pActiveView.ScreenDisplay.DisplayTransformation.VisibleBounds.Width;
- double sizeOfOnePixel = realWorldDisplayExtent / pixelExtent;
- return pixelUnits * sizeOfOnePixel;
- }
- IMap pMap = axMapControl1.Map;
- IActiveView pActiveView = pMap as IActiveView;
- IFeatureLayer pFeatureLayer = pMap.get_Layer() as IFeatureLayer;
- IFeatureClass pFeatureClass = pFeatureLayer.FeatureClass;
- //设置点击点的位置
- IPoint point = pActiveView.ScreenDisplay.DisplayTransformation.ToMapPoint(e.x, e.y);
- ITopologicalOperator pTOpo = point as ITopologicalOperator;
- double length;
- length = ConvertPixelsToMapUnits(pActiveView, );
- IGeometry pBuffer = pTOpo.Buffer(length);
- IGeometry pGeomentry = pBuffer.Envelope;
- //空间滤过器
- ISpatialFilter pSpatialFilter = new SpatialFilterClass();
- pSpatialFilter.Geometry = pGeomentry;
- //根据被选择要素的不同,设置不同的空间滤过关系
- switch (pFeatureClass.ShapeType)
- {
- case esriGeometryType.esriGeometryPoint:
- pSpatialFilter.SpatialRel=esriSpatialRelEnum.esriSpatialRelContains;
- break;
- case esriGeometryType.esriGeometryPolyline:
- pSpatialFilter.SpatialRel=esriSpatialRelEnum.esriSpatialRelCrosses;
- break;
- case esriGeometryType.esriGeometryPolygon :
- pSpatialFilter.SpatialRel=esriSpatialRelEnum.esriSpatialRelIntersects;
- break;
- }
- IFeatureSelection pFSelection=pFeatureLayer as IFeatureSelection;
- pFSelection.SelectFeatures(pSpatialFilter,esriSelectionResultEnum.esriSelectionResultNew,false);
- ISelectionSet pSelectionset=pFSelection.SelectionSet;
- ICursor pCursor;
- pSelectionset.Search(null,true,out pCursor);
- IFeatureCursor pFeatCursor=pCursor as IFeatureCursor;
- IFeature pFeature=pFeatCursor.NextFeature();
- while(pFeature!=null)
- {
- pMap.SelectFeature(pFeatureLayer,pFeature);
- pFeature=pFeatCursor.NextFeature();
- }
- pActiveView.PartialRefresh(esriViewDrawPhase.esriViewGraphicSelection,null,null);
- //另外的改写:
- pSpatialFilter.GeometryField = pFeatureClass.ShapeFieldName;
- IQueryFilter pFilter = pSpatialFilter;
- IFeatureCursor pFeatCursor = pFeatureLayer.Search(pFilter,false);
- IFeature pFeature=pFeatCursor.NextFeature();
- while(pFeature!=null)
- {
- pMap.SelectFeature(pFeatureLayer,pFeature);
- pFeature=pFeatCursor.NextFeature();
- }
- pActiveView.PartialRefresh(esriViewDrawPhase.esriViewGraphicSelection,null,null);
另外还有一种较简单的点选方法:
- IGeometry g = null;
- IEnvelope pEnv;
- IActiveView pActiveView = axMapControl1.ActiveView;
- IMap pMap = axMapControl1.Map;
- pEnv = axMapControl1.TrackRectangle();
- if (pEnv.IsEmpty == true)
- {
- ESRI.ArcGIS.Display.tagRECT r;
- r.bottom = e.y + ;
- r.top = e.y - ;
- r.left = e.x - ;
- r.right = e.x + ;
- pActiveView.ScreenDisplay.DisplayTransformation.TransformRect(pEnv, ref r, );
- pEnv.SpatialReference = pActiveView.FocusMap.SpatialReference;
- }
- g = pEnv as IGeometry;
- axMapControl1.Map.SelectByShape(g, null, false);
- axMapControl1.Refresh(esriViewDrawPhase.esriViewGeoSelection, null, null);
2 拉框选择
- IMap pMap = axMapControl1.Map;
- IActiveView pActiveView = pMap as IActiveView;
- IEnvelope pEnv = axMapControl1.TrackRectangle();
- pMap.SelectByShape(pEnv, null, false);
- pActiveView.PartialRefresh(esriViewDrawPhase.esriViewGeoSelection,null, null);
AE要素选择(点选和拉框选择)的更多相关文章
- Easyui-Combobox多选下拉框
因为工作需要,引入combobox多选下拉框,并且获取选择的值并以","分开. 效果如下: 代码如下: <html> <head> <title> ...
- js:jquery multiSelect 多选下拉框实例
<!doctype html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- DropDownList单选与多选下拉框
一.单选DropDownList传值 1.添加界面的DropDownList显示值问题 (1)在方法内添加ViewData的方法: var ad = new UnitsRepository(); Vi ...
- echarts异步数据加载(在下拉框选择事件中异步更新数据)
接触echarts 大半年了,从不会到熟练也做过不少的图表,隔了一段时间没使用这玩意,好多东西真心容易忘了.在接触echarts这期间也没有总结什么东西,今天我就来总结一下如何在echart中异步加载 ...
- pentaho cde 自定义复选下拉框 checkbox select
pentaho 自带的component 虽多,但是当用户需要在一个表格中查看多个组别的数据时,pentaho自带的单选框就不能实现了,所以复选下拉框势在必行,实现效果如下: 实现原理是借用了jqu ...
- query多选下拉框插件 jquery-multiselect(修改)
其实网上关于该控件的使用教程已经很多了,其中 query多选下拉框插件 jquery-multiselect Jquery多选下拉列表插件jquery multiselect功能介绍及使用 这2个的介 ...
- MVC实现多选下拉框,保存并显示多选项
在"MVC实现多选下拉框"中,主要是多选下拉框的显示,而实际情况通常是:选择多个选项提交后,需要在编辑页把所有选中的项显示出来. 模拟这样的一个场景:一个车迷可能有多个自己喜欢的汽 ...
- MVC实现多选下拉框
借助Chosen Plugin可以实现多选下拉框. 选择多项: 设置选项数量,比如设置最多允许2个选项: 考虑到多选下拉<select multiple="multiple" ...
- 自定义SWT控件二之自定义多选下拉框
2.自定义下拉多选框 package com.view.control.select; import java.util.ArrayList; import java.util.HashMap; im ...
随机推荐
- Thinkphp5图片上传正常,音频和视频上传失败的原因及解决
Thinkphp5图片上传正常,音频和视频上传失败的原因及解决 一.总结 一句话总结:php中默认限制了上传文件的大小为2M,查找错误的时候百度,且根据错误提示来查找错误. 我的实际问题是: 我的表单 ...
- javascript变量类型及作用域
javascript变量类型及作用域 一.简介 变量类型 ECMAScript变量可能包含两种不同类型的数据值:基本类型和引用类型. 基本类型 基本类型指的是简单的数据段,5种基本数据类型:undef ...
- 33.IDEA + maven]在IDEA中打开一个maven项目,resolve完依赖后,缺少部分jar包问题
转自:https://www.cnblogs.com/zazalu/p/7649590.html [注意]作者只是对使用过程中遇到的问题提出了一个解决方案,但是本人在编写此解决方案文章的时候,对mav ...
- pip的认识
一.pip与python的关系:pip并不是一种语言,而是一个Python包管理工具,主要是用于安装 PyPI 上的软件包.安装好pip之后,使用pip install 命令即可方便的安装python ...
- Impala储存与分区
不多说,直接上干货! hive的元数据存储在/user/hadoop/warehouse Impala的内部表也在/user/hadoop/warehouse. 那两者怎么区分,看前面的第一列. 下面 ...
- BootStrap_Table 学习
https://blog.csdn.net/heting90/article/details/52248729 $("#realTime_Table").bootstrapTabl ...
- Standalone 集群部署
Spark中调度其实是分为两个层级的,即集群层级的资源分配和任务调度,以及任务层级的任务管理.其中集群层级调度是可配置的,Spark目前提供了Local,Standalone,YARN,Mesos.任 ...
- spring boot 热启动
spring boot热启动有两种方式 1. 以Maven插件的形式去加载,所以启动时使用通过Maven命令mvn spring-boot:run启动,而通过Application.run方式启动的会 ...
- Linux网络编程--字节序
1 .谈到字节序,那么会有朋友问什么是字节序 非常easy:[比如一个16位的整数.由2个字节组成,8位为一字节,有的系统会将高字节放在内存低的地址上,有的则将低字节放在内存高的地址上,所以存在字节序 ...
- CSS demo:flaot & clear float
1,首先,我们布局主要的div块: 例如以下代码所看到的,我们在body里面写3几个基本div块,然后设置一些基本属性: 效果图: 2,增加基本浮动 如今我们想让红色div放到绿色div右边,我们在两 ...