1. public IFeature GetFeatureOnMouseDown(IPoint point)
  2. {
  3. try
  4. {
  5. ILayer layer = Common.GetLayerByName(mMap, "地块");
  6. if (layer == null)
  7. {
  8. MessageBox.Show("请加载地块图层!", "提示");
  9. return null;
  10. }
  11. //IFeatureLayer fLayer = layer as IFeatureLayer;
  12. //IFeatureSelection featureSelection = fLayer as IFeatureSelection;
  13. //featureSelection.Clear();
  14. //if (featureSelection == null)
  15. //{
  16. // return null;
  17. //}
  18.  
  19. IFeatureLayer featureLayer = layer as IFeatureLayer;
  20. if (featureLayer == null)
  21. return null;
  22. IFeatureClass featureClass = featureLayer.FeatureClass;
  23. if (featureClass == null)
  24. return null;
  25.  
  26. //IPoint point = axMapControl1.ActiveView.ScreenDisplay.DisplayTransformation.ToMapPoint(x, y);
  27. IGeometry geometry = point as IGeometry;
  28.  
  29. double length = ConvertPixelsToMapUnits(axMapControl1.ActiveView, );
  30. ITopologicalOperator pTopo = geometry as ITopologicalOperator;
  31. IGeometry buffer = pTopo.Buffer(length);
  32. geometry = buffer.Envelope as IGeometry;
  33.  
  34. ISpatialFilter spatialFilter = new SpatialFilterClass();
  35. spatialFilter.Geometry = geometry;
  36. switch (featureClass.ShapeType)
  37. {
  38. case esriGeometryType.esriGeometryPoint:
  39. spatialFilter.SpatialRel = esriSpatialRelEnum.esriSpatialRelContains;
  40. break;
  41. case esriGeometryType.esriGeometryPolygon:
  42. spatialFilter.SpatialRel = esriSpatialRelEnum.esriSpatialRelIntersects;
  43. break;
  44. case esriGeometryType.esriGeometryPolyline:
  45. spatialFilter.SpatialRel = esriSpatialRelEnum.esriSpatialRelCrosses;
  46. break;
  47. }
  48. spatialFilter.GeometryField = featureClass.ShapeFieldName;
  49. IQueryFilter filter = spatialFilter as IQueryFilter;
  50.  
  51. IFeatureCursor cursor = featureClass.Search(filter, false);
  52. IFeature pfeature = cursor.NextFeature();
  53. if (pfeature != null)
  54. {
  55. return pfeature;
  56. //featureSelection.Add(pfeature);
  57. //pfeature = cursor.NextFeature();
  58. }
  59. else
  60. {
  61. return null;
  62. }
  63. }
  64. catch
  65. {
  66. return null;
  67. }
  68. }

大家可以修改一下我的代码,图层改成你需要的图层即可。也可以写成类。只是写成类的话,变量可能会多一点。

  1. if (pfeature != null)
  2. {
  3. return pfeature;
  4. //featureSelection.Add(pfeature);
  5. //pfeature = cursor.NextFeature();
  6. }

此处也可以将if改成while,如果选择的是多个要素的话。将我注释掉的代码打开即可选择多个要素。

C# Arcgis Engine 获得鼠标按下位置的要素的更多相关文章

  1. 最简单的ArcGIS Engine应用程序(下)

    在中篇我们讲到使用OpenFileDialog控件可以添加shp文件.(最简单的ArcGIS Engine应用程序(中)) 添加lyr文件的操作也是大同小异的. using System; using ...

  2. ArcGIS Engine环境下创建自定义的ArcToolbox Geoprocessing工具

    在上一篇日志中介绍了自己通过几何的方法合并断开的线要素的ArcGIS插件式的应用程序.但是后来考虑到插件式的程序的配置和使用比较繁琐,也没有比较好的错误处理机制,于是我就把之前的程序封装成一个类似于A ...

  3. ArcGIS Engine 下投影坐标和经纬度坐标的相互转换

    ArcGIS Engine 下投影坐标和经纬度坐标的相互转换 投影转经纬度 ); pPoint.Project(pSRF.CreateGeographicCoordinateSystem((int)e ...

  4. VS2010下WPF开发ARCGIS ENGINE 10的带Ribbon控件项目

    原文 http://blog.sina.com.cn/s/blog_47522f7f0100nq5t.html 题目好长,但是集目前最新的工具于一身..VS是最新的2010版,不过用的是.net3.5 ...

  5. JQuery使用mousedown和mouseup简单判断鼠标按下与释放位置是否相同

    在JQuery中,我们可以利用mousedown.mouseup来跟踪页面的鼠标按下与释放事件. 如何获取鼠标的位置信息呢?事件event的pageX和pageY属性可以让我们获得鼠标在页面中的具体位 ...

  6. ArcGIS Engine开发之旅03--ArcGIS Engine中的控件

    原文:ArcGIS Engine开发之旅03--ArcGIS Engine中的控件 制图控件,如MapControl.PageLayoutControl,其中MapControl控件主要用于地理数据的 ...

  7. 利用ArcGIS Engine、VS .NET和Windows控件开发GIS应用

    Dixon 原文  用ArcGIS Engine.VS .NET和Windows控件开发GIS应用     此过程说明适合那些使用.NET建立和部署应用的开发者,它描述了使用ArcGIS控件建立和部署 ...

  8. 《ArcGIS Engine+C#实例开发教程》第五讲 鹰眼的实现

    原文:<ArcGIS Engine+C#实例开发教程>第五讲 鹰眼的实现 摘要:所谓的鹰眼,就是一个缩略地图,上面有一个矩形框,矩形框区域就是当前显示的地图区域,拖动矩形框可以改变当前地图 ...

  9. ArcGIS Engine Style文件操作

    对于一个GISer来说,地图,符号这些都应该有着比别人更深刻的理解和认识,作为平台软件都会提供一套自己的符号库,符号库里面根据类别和种类进行区分,因为点,线,面的自然存在和固有属性是不肯能让你用面状符 ...

随机推荐

  1. django 笔记7 多对多

    多对多 方法一 :双外键关联 自定义关系表 自定义 class Host(models.Model): nid = models.AutoField(primary_key=True) hostnam ...

  2. [CQOI2009] 叶子的颜色 解题报告(树形DP)

    题目链接:https://www.lydsy.com/JudgeOnline/problem.php?id=1304 Description 给一棵m个结点的无根树,你可以选择一个度数大于1的结点作为 ...

  3. 17.I/O系统访问方式和类型

    I/O方式 轮询  中断  DMA  通道

  4. <Sicily> 生成字符串

    一.题目描述 假设一个字符串只由字符'0','1','?'组成,其中字符'?'表示该字符可由字符'0'或'1'替代. 现有一些字符串,根据这些字符串生成所有可生成的字符串. 如:{10,?1,0? } ...

  5. js相关禁止

    遇到网页上有精美图片或者精彩文字想保存时,通常大家都是选中目标后按鼠标右键,在弹出菜单中选择“图片另存为”或“复制”来达到我们的目的.但是,目前有许多网页都屏蔽了鼠标右键,那么用js如何实现禁止鼠标右 ...

  6. Java SpringMvc Jar包下载及部署方式_转载

    本次来记录一下关于 springmvc jar包的下载以及部署 首先登陆   http://repo.spring.io/release/org/springframework/spring/到里面我 ...

  7. SQL--通过身份证号得到年龄的

    /* =======================================创 建 人:CuiYaChao创建日期:2017-08-16功能描述:通过身份证号来计算年龄单元名称: Fun_Ge ...

  8. python实例

    先来一段代码: #这段代码可牛逼了,1.可以根据indent的选项调整模式.2.根据level调整级别. #代码很low,主要看思想..哈哈哈..看看从最初的样子到最好经历了什么.. 开始: #!/u ...

  9. CentOS6.9下ssh密钥登录配置步骤(免密码登录)和ssh-keygen 命令常用参数

    密钥登录步骤(免密码登录)ssh登录提供两种认证方式:口令(密码)认证方式和密钥认证方式.其中口令(密码)认证方式是我们最常用的一种,出于安全方面的考虑,介绍密钥认证方式登录到linux/unix的方 ...

  10. NodeJS学习笔记 (16)子进程-child_process(ok)

    原文: https://github.com/chyingp/nodejs-learning-guide/blob/master/README.md 自己的跟进学习: 父进程,子进程,线程之间的关系 ...