zoukankan      html  css  js  c++  java
  • AE获得鼠标选择的图层信息

    使用SelectionChanged事件

       private void axMapControl_OnSelectionChanged(object sender, EventArgs e)
        {
            if (iMapAction == 1)
            {
                //---------------------------------------Identify--------------------------------------------------//
                ITableSelection pTable;
                ILayer pLayer;
                string pointId = string.Empty;
                //获得选择的点
                for (int i = 0; i < axMapControl.LayerCount; i++)
                {
                    pTable = (ITableSelection)axMapControl.get_Layer(i);
                    pLayer = axMapControl.get_Layer(i);
                    if (pLayer.Name == "newpoint")
                    {
                        pointId = GetFieldValue(AddSelection(pTable.SelectionSet, pLayer.Name));
                        break;
                    }
                    pTable.Clear();
                }
                //判断点是不是为空
                if (!string.IsNullOrEmpty(pointId))
                {
                    //查询是否存在于站点集合中
                    if (hAreaIdList.IndexOf(pointId) != -1)
                    {
                        if (_pfrmRealTimeData == null)
                        {
                            _pfrmRealTimeData = new frmRealTimeData(pointId);
                            _pfrmRealTimeData.ShowDialog();
                        }
                        else
                        {
                            //如果不是第一点击
                            if (pointIdList.Count > 1)
                            {
                                _pfrmRealTimeData = null;
                                _pfrmRealTimeData = new frmRealTimeData(pointId);
                                _pfrmRealTimeData.ShowDialog();
                            }
                        }
                        if (pointIdList.Count < 5)
                            pointIdList.Add(pointId);
                    }
                }
            }
        }

     /// <summary>
        /// 获得选择的图层
        /// </summary>
        /// <param name="pSelection"></param>
        /// <param name="strLayer"></param>
        /// <returns></returns>
        private ArrayList AddSelection(ISelectionSet pSelection, string strLayer)
        {
            IQueryFilter pFilter = new QueryFilterClass();
            ICursor pCursor;
            pSelection.Search(pFilter, false, out pCursor);
            ESRI.ArcGIS.Geodatabase.IRow pRow;
            pRow = pCursor.NextRow();
            ArrayList Keys = new ArrayList();
            Keys.Add(strLayer);
            if (pRow != null)
            {
                IRowBuffer pBuffer;
                do
                {
                    pBuffer = (IRowBuffer)pRow;
                    Keys.Add(pBuffer.get_Value(0));
                    pRow = pCursor.NextRow();
                } while (pRow != null);
            }
            return Keys;
        }

        /// <summary>
        /// 获得节点的值
        /// </summary>
        /// <param name="list"></param>
        /// <returns></returns>
        private string GetFieldValue(ArrayList list)
        {
            string pointId = string.Empty;
            if (list.Count > 1)
            {
                string strLayer = string.Empty;
                strLayer = list[0].ToString();
                for (int j = 1; j < list.Count; j++)
                {
                    IFeatureLayer pLayer;
                    int i;
                    for (i = 0; i < axMapControl.Map.LayerCount; i++)
                    {
                        if (axMapControl.Map.get_Layer(i).Name == strLayer)
                            break;
                    }
                    pLayer = (IFeatureLayer)axMapControl.Map.get_Layer(i);
                    IFeatureCursor pCursor;
                    IQueryFilter pFilter = new QueryFilterClass();

                    pFilter.WhereClause = " FID = " + list[i];
                    pCursor = pLayer.Search(pFilter, false);
                    IFeature pFeature;
                    IRowBuffer pRow;
                    pFeature = pCursor.NextFeature();
                    if (pFeature != null)
                    {
                        pRow = (IRowBuffer)pFeature;
                        for (int k = 0; k < pRow.Fields.FieldCount; k++)
                        {
                            if (pRow.Fields.get_Field(k).Name == "pointid")
                            {
                                pointId = pRow.get_Value(k).ToString();
                                break;
                            }
                        }
                    }
                }
            }
            return pointId;
        }

    版权说明

      如果标题未标有<转载、转>等字则属于作者原创,欢迎转载,其版权归作者和博客园共有。
      作      者:温景良
      文章出处:http://wenjl520.cnblogs.com/  或  http://www.cnblogs.com/

  • 相关阅读:
    docker 方式安装gitlab时,项目的clone地址及项目文件列表地址为机器名的问题解决办法
    CPU流水线
    Element中el-form嵌套el-table双击编辑提交检验
    java基础知识
    C#多线程下载
    mysql优化
    C++ 算法(一)
    前端vue 的面试总结 以及答案以及前端技术点面试
    C# 组合任务
    C# List去重DistinctBy扩展
  • 原文地址:https://www.cnblogs.com/wenjl520/p/1362455.html
Copyright © 2011-2022 走看看