飞道的博客

【ArcGIS Pro二次开发】(7):地图(Map)的基本操作

610人阅读  评论(0)

地图是ArcGIS Pro中的基础起点,也是大多数工程的基础。主要用于显示表示空间数据的图层。


一、地图(Map)的基本操作示例

1、获取当前地图

var map = MapView.Active.Map;

2、获取一级图层

var lys = map.Layers;

用于获取地图中的单一图层,以及图层组。但不包括图层组下面的图层。

3、获取所有图层

var lys = map.GetLayersAsFlattenedList();

【GetLayersAsFlattenedList()】方法用于获取地图中的所有图层。

4、获取单一类型的图层

var lys = map.GetLayersAsFlattenedList().OfType<FeatureLayer>();

在【GetLayersAsFlattenedList()】方法加上【OfType】则会对获取的图层按类型进行筛选。如【FeatureLayer】代表要素图层,【GroupLayer】代表图层组等。

5、获取当前选定的图层

var lys = MapView.Active.GetSelectedLayers();

【GetSelectedLayers()】方法用于获取当前选定的图层。

6、获取独立表

var lys = map.GetStandaloneTablesAsFlattenedList();

【GetLayersAsFlattenedList()】方法用于获取地图中的所有独立表。

7、查找图层

var lys = map.FindLayers(LayerName);

【FindLayers(LayerName)】方法用于按图层名查找相应图层,注意这里的LayerName不支持模糊查找。

8、获取坐标系

var sr = map.SpatialReference;

Map的【SpatialReference】属性返回地图的坐标系。

9、移动图层


  
  1. // 获取当前地图
  2. var map = MapView.Active.Map;
  3. // 获取第一个图层
  4. var ly = map.GetLayersAsFlattenedList();
  5. // 移动到最后的位置
  6. QueuedTask.Run( async () =>
  7. {
  8. map.MoveLayer(ly[ 0], -1);
  9. });

【MoveLayer(Layer, index)】方法用于按标签位置移动图层的位置。

这里演示的是将地图中的第1个图层移动到最后的位置。

10、移除所有图层


  
  1. // 获取当前地图
  2. var map = MapView.Active.Map;
  3. // 获取所有图层
  4. var lys = map.GetLayersAsFlattenedList();
  5. // 移除所有图层
  6. QueuedTask.Run( async () =>
  7. {
  8. map.RemoveLayers(lys);
  9. });

【RemoveLayers(lys)】方法用于移除图层列表。

【RemoveLayer(ly)】方法用于移除单一图层。

这里演示的是用【RemoveLayers(lys)】方法移除地图中的所有图层。

11、将要素添加到当前地图


  
  1. // 获取当前地图
  2. var map = MapView.Active.Map;
  3. //打开对话框
  4. OpenItemDialog openDlg = new OpenItemDialog()
  5. {
  6. Title = "选择要素", //打开对话框标题
  7. Filter = ItemFilters.FeatureClasses_All, //类型筛选
  8. };
  9. //打开对话框
  10. bool? ok = openDlg.ShowDialog();
  11. //如果没有选择内容,则返回
  12. if (!ok.HasValue)
  13. return;
  14. // 获取返回的要素路径
  15. var fc = openDlg.Items.First().Path;
  16. // 按返回的要素路径将要素添加到当前地图中
  17. Uri uri = new Uri(fc);
  18. QueuedTask.Run( async () =>
  19. {
  20. LayerFactory.Instance.CreateLayer(uri,map);
  21. });

【LayerFactory.Instance.CreateLayer()】方法用于将要素添加到当前地图。

需要先将路径转换成Uri。

12、保存地图


  
  1. // 获取当前地图
  2. var map = MapView.Active.Map;
  3. //打开对话框
  4. SaveItemDialog saveDlg = new SaveItemDialog()
  5. {
  6. Title = "保存地图为", //打开对话框标题
  7. Filter = ItemFilters.Maps_All, //类型筛选
  8. };
  9. //打开对话框
  10. bool? ok = saveDlg.ShowDialog();
  11. //如果没有选择内容,则返回
  12. if (!ok.HasValue)
  13. return;
  14. // 按返回的工程路径保存地图
  15. QueuedTask.Run( async () =>
  16. {
  17. map.SaveAsFile(saveDlg.FilePath, true);
  18. });

【SaveAsFile()】方法用于将地图保存为地图文件。

13、替换地图内图层的数据库路径

map.FindAndReplaceWorkspacePath(path1, path2);

其中path1为当前要素图层所在的数据库,path2为要替换的数据库。

一个应用场景:如村庄规划,地图内的要素全部来自一个村庄成果数据库。复制一个新的地图,并将地图的数据库路径替换成新的村庄数据库,代码运行结果会将地图内的图层全部替换,不用遍历所有图层。


二、工程文件分享

最后,放上工程文件的链接:

MapManagerhttps://pan.baidu.com/s/1JqITwFtqSFjww5JTOM0RZQ?pwd=4myr


转载:https://blog.csdn.net/xcc34452366/article/details/129200249
查看评论
* 以上用户言论只代表其个人观点,不代表本网站的观点或立场