• 【ArcGIS Pro二次开发】(69):使用MapTool实现隐藏和隔离图层


    一、MapTool简介

    ArcGIS Pro SDK中,MapTool是一个重要的组件,用于自定义地图操作工具,使用户能够在ArcGIS Pro中执行特定的地图交互操作。

    在VS中添加新项,可以找到ArcGIS Pro 地图工具,即为MapTool。

    新建后打开cs文件,可以看到系统已经放出2个重写的方法。

    我也刚开始摸索,目前最常用的是【OnSketchCompleteAsync】方法,即当选择结束进行处理的事件。

    要执行的内容基本也都写在这里。


    二、要实现的功能

     

    如上图所示,在【地图工具】组—【地图工具】面板下,点击【隐藏图层、隔离图层】工具。

    以隐藏图层为例,点击工具后,在地图界面点击要素,目录要素所在的图层即可隐藏。

    点击前:

    点击后:

    隔离图层则相反,未选中的隐藏,选中的保持可见。

    效果和CAD的隐藏隔离图层是一样的。


    三、实现流程

    工具的实现流程并不长,主要是要注意在地图中获取要素的方式,这是基本固定的写法,直接抄即可。

    隐藏图层的代码如下:

    1. protected override Task<bool> OnSketchCompleteAsync(Geometry geometry)
    2. {
    3. return QueuedTask.Run(() =>
    4. {
    5. var mapView = MapView.Active;
    6. if (mapView == null)
    7. return true;
    8. // 获取选择的要素
    9. var results = mapView.GetFeatures(geometry);
    10. if (results is not null)
    11. {
    12. mapView.FlashFeature(results);
    13. // 将选定的要素集合转换为字典形式
    14. var selectedList = results.ToDictionary();
    15. // 获取选定要素中位于最上层图层的要素
    16. int first = 1000;
    17. foreach (var layer in selectedList)
    18. {
    19. // 获取图层
    20. FeatureLayer featureLayer = layer.Key as FeatureLayer;
    21. int ss = mapView.Map.Layers.IndexOf(featureLayer);
    22. if (ss < first)
    23. {
    24. first = ss; // 如果比较小,就更新first的值。
    25. }
    26. }
    27. // 隐藏最上层的图层
    28. foreach (var layer in selectedList)
    29. {
    30. // 获取图层
    31. FeatureLayer featureLayer = layer.Key as FeatureLayer;
    32. int updata_ss = mapView.Map.Layers.IndexOf(featureLayer);
    33. if (updata_ss == first)
    34. {
    35. featureLayer.SetVisibility(false);
    36. }
    37. }
    38. }
    39. return true;
    40. });
    41. }

    隔离图层的代码如下:

    1. protected override Task<bool> OnSketchCompleteAsync(Geometry geometry)
    2. {
    3. return QueuedTask.Run(() =>
    4. {
    5. var mapView = MapView.Active;
    6. if (mapView == null)
    7. return true;
    8. // 获取所有图层
    9. var allLayers = MapView.Active.Map.GetLayersAsFlattenedList();
    10. // 获取选择的要素
    11. var results = mapView.GetFeatures(geometry);
    12. if (results is not null)
    13. {
    14. mapView.FlashFeature(results);
    15. // 将选定的要素集合转换为字典形式
    16. var selectedList = results.ToDictionary();
    17. // 获取选定要素中位于最上层图层的要素
    18. int first = 1000;
    19. foreach (var layer in selectedList)
    20. {
    21. // 获取图层
    22. FeatureLayer featureLayer = layer.Key as FeatureLayer;
    23. int ss = mapView.Map.Layers.IndexOf(featureLayer);
    24. if (ss < first)
    25. {
    26. first = ss; // 如果比较小,就更新first的值。
    27. }
    28. }
    29. // 非指定图层全部隐藏
    30. foreach (var layer in allLayers)
    31. {
    32. int updata_ss = mapView.Map.Layers.IndexOf(layer);
    33. if (updata_ss != first)
    34. {
    35. layer.SetVisibility(false);
    36. }
    37. }
    38. }
    39. return true;
    40. });
    41. }

    三、工具文件分享

    我把工具都集合成工具箱,不再单独放单个工具,可以到这里下载完整工具箱,会不断更新:

    【ArcGIS Pro二次开发】:CC工具箱icon-default.png?t=N7T8https://blog.csdn.net/xcc34452366/article/details/131506345PS:可以直接点击...bin\Debug\net6.0-windows\下的.esriAddinX文件直接安装。

  • 相关阅读:
    市场拓展招聘:完整指南
    MySQL入门指南6(视图,用户管理,存储引擎,数据类型)
    各种免费好用的api整理分享
    【软件工程】看板
    HelloServlet
    2022年国赛建模B题思路与程序
    MLX90640 红外热成像仪测温模块开发笔记(完整版)
    Linux综合技巧
    rt-thread + lvgl :线程调用lv_task_handler() 之后,无法休眠
    养了个羊(简易版)
  • 原文地址:https://blog.csdn.net/xcc34452366/article/details/133359832