一、MapTool简介
在ArcGIS Pro SDK中,MapTool是一个重要的组件,用于自定义地图操作工具,使用户能够在ArcGIS Pro中执行特定的地图交互操作。
在VS中添加新项,可以找到ArcGIS Pro 地图工具,即为MapTool。
新建后打开cs文件,可以看到系统已经放出2个重写的方法。
我也刚开始摸索,目前最常用的是【OnSketchCompleteAsync】方法,即当选择结束进行处理的事件。
要执行的内容基本也都写在这里。
二、要实现的功能
如上图所示,在【地图工具】组—【地图工具】面板下,点击【隐藏图层、隔离图层】工具。
以隐藏图层为例,点击工具后,在地图界面点击要素,目录要素所在的图层即可隐藏。
点击前:
点击后:
隔离图层则相反,未选中的隐藏,选中的保持可见。
效果和CAD的隐藏隔离图层是一样的。
三、实现流程
工具的实现流程并不长,主要是要注意在地图中获取要素的方式,这是基本固定的写法,直接抄即可。
隐藏图层的代码如下:
protected override Task<bool> OnSketchCompleteAsync(Geometry geometry)
{return QueuedTask.Run(() =>{var mapView = MapView.Active;if (mapView == null)return true;// 获取选择的要素var results = mapView.GetFeatures(geometry);if (results is not null){mapView.FlashFeature(results);// 将选定的要素集合转换为字典形式var selectedList = results.ToDictionary();// 获取选定要素中位于最上层图层的要素int first = 1000;foreach (var layer in selectedList){// 获取图层FeatureLayer featureLayer = layer.Key as FeatureLayer;int ss = mapView.Map.Layers.IndexOf(featureLayer);if (ss < first){first = ss; // 如果比较小,就更新first的值。}}// 隐藏最上层的图层foreach (var layer in selectedList){// 获取图层FeatureLayer featureLayer = layer.Key as FeatureLayer;int updata_ss = mapView.Map.Layers.IndexOf(featureLayer);if (updata_ss == first){featureLayer.SetVisibility(false);}}}return true;});
}
隔离图层的代码如下:
protected override Task<bool> OnSketchCompleteAsync(Geometry geometry)
{return QueuedTask.Run(() =>{var mapView = MapView.Active;if (mapView == null)return true;// 获取所有图层var allLayers = MapView.Active.Map.GetLayersAsFlattenedList();// 获取选择的要素var results = mapView.GetFeatures(geometry);if (results is not null){mapView.FlashFeature(results);// 将选定的要素集合转换为字典形式var selectedList = results.ToDictionary();// 获取选定要素中位于最上层图层的要素int first = 1000;foreach (var layer in selectedList){// 获取图层FeatureLayer featureLayer = layer.Key as FeatureLayer;int ss = mapView.Map.Layers.IndexOf(featureLayer);if (ss < first){first = ss; // 如果比较小,就更新first的值。}}// 非指定图层全部隐藏foreach (var layer in allLayers){int updata_ss = mapView.Map.Layers.IndexOf(layer);if (updata_ss != first){layer.SetVisibility(false);}}}return true;});
}
三、工具文件分享
我把工具都集合成工具箱,不再单独放单个工具,可以到这里下载完整工具箱,会不断更新:
【ArcGIS Pro二次开发】:CC工具箱https://blog.csdn.net/xcc34452366/article/details/131506345PS:可以直接点击...bin\Debug\net6.0-windows\下的.esriAddinX文件直接安装。