zoukankan      html  css  js  c++  java
  • C# Arcgis Engine 获得鼠标按下位置的要素

    public IFeature GetFeatureOnMouseDown(IPoint point)
            {
                try
                {
                    ILayer layer = Common.GetLayerByName(mMap, "地块");
                    if (layer == null)
                    {
                        MessageBox.Show("请加载地块图层!", "提示");
                        return null;
                    }
                    //IFeatureLayer fLayer = layer as IFeatureLayer;
                    //IFeatureSelection featureSelection = fLayer as IFeatureSelection;
                    //featureSelection.Clear();
                    //if (featureSelection == null)
                    //{
                    //    return null;
                    //}
    
                    IFeatureLayer featureLayer = layer as IFeatureLayer;
                    if (featureLayer == null)
                        return null;
                    IFeatureClass featureClass = featureLayer.FeatureClass;
                    if (featureClass == null)
                        return null;
    
                    //IPoint point = axMapControl1.ActiveView.ScreenDisplay.DisplayTransformation.ToMapPoint(x, y);
                    IGeometry geometry = point as IGeometry;
    
                    double length = ConvertPixelsToMapUnits(axMapControl1.ActiveView, 4);
                    ITopologicalOperator pTopo = geometry as ITopologicalOperator;
                    IGeometry buffer = pTopo.Buffer(length);
                    geometry = buffer.Envelope as IGeometry;
    
                    ISpatialFilter spatialFilter = new SpatialFilterClass();
                    spatialFilter.Geometry = geometry;
                    switch (featureClass.ShapeType)
                    {
                        case esriGeometryType.esriGeometryPoint:
                            spatialFilter.SpatialRel = esriSpatialRelEnum.esriSpatialRelContains;
                            break;
                        case esriGeometryType.esriGeometryPolygon:
                            spatialFilter.SpatialRel = esriSpatialRelEnum.esriSpatialRelIntersects;
                            break;
                        case esriGeometryType.esriGeometryPolyline:
                            spatialFilter.SpatialRel = esriSpatialRelEnum.esriSpatialRelCrosses;
                            break;
                    }
                    spatialFilter.GeometryField = featureClass.ShapeFieldName;
                    IQueryFilter filter = spatialFilter as IQueryFilter;
    
                    IFeatureCursor cursor = featureClass.Search(filter, false);
                    IFeature pfeature = cursor.NextFeature();
                    if (pfeature != null)
                    {
                        return pfeature;
                        //featureSelection.Add(pfeature);
                        //pfeature = cursor.NextFeature();
                    }
                    else
                    {
                        return null;
                    }
                }
                catch
                {
                    return null;
                }
            }

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

    if (pfeature != null)
                    {
                        return pfeature;
                        //featureSelection.Add(pfeature);
                        //pfeature = cursor.NextFeature();
                    }

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

  • 相关阅读:
    什么是MongoDb
    Python之人工智能:PyAudio 实现录音 自动化交互实现问答
    Python人工智能之初识接口
    cordova(安卓)(腾讯信鸽注册绑定与反绑定) 插件开发
    sencha touch 在安卓中横屏、竖屏切换 应用崩溃问题
    Sencha Touch 实战开发培训 电子书 基础篇
    wps 批量调整图片大小 宏
    使用 crosswalk-cordova 打包sencha touch 项目,再也不用担心安卓兼容问题!
    Sencha Cmd 5.0.1.231 是坑爹货
    sencha touch api 使用指南
  • 原文地址:https://www.cnblogs.com/joysky/p/4036573.html
Copyright © 2011-2022 走看看