ArcGIS—基于Python的脚本编程(6)

这篇文章主要是讲述ArcGIS中基于Python的制图模块——arcpy.mapping相关使用方法。

目录

    • 目录
    • 1. 地图文档对象
    • 2. 数据框
    • 3. 图层
    • 4. 修复数据链接
    • 5. 页面布局元素
    • 6. 输出地图
    • 7. 处理PDF文档
    • 8. 制图脚本样例


1. 地图文档对象

  • 通常通过地图文档对象对地图文档进行一些基础的管理,它可以访问地图文档的许多属性和方法,因此,在使用脚本制图时,第一步往往也是先创建地图文档对象,具体语法是:
## 通过指定的路径创建地图文档对象
mxd = arcpy.mapping.MapDocument(地图文档路径) 

## 表示使用当前ArcMap中的地图文档,CURRENT必须大写;
## 需要注意的是,当我们CURRENT关键字不可用时,
## 可以检查我们的脚本工具创建时“Always run in foreground”是否勾选,
## 因为后台运行时CURRENT不可用。
mxd = arcpy.mapping.MapDocument("CURRENT") 
  • 在对地图文档进行修改后,并不会实时进行更新,因此需要调用RefreshActiveViewRefreshTOC函数用来刷新:
arcpy.RefreshActiveView()
arcpy.RefreshTOC()
  • 在脚本中,MapDocument对象只有save和saveACopy方法:
mxd.save()
mxd.saveACopy(另存为的路径)
  • 在使用完地图文档后,需要删除地图文档对象引用:
del mxd

2. 数据框

  • 一个地图文档中可以有多个数据框,一个数据框中又可以有多个图层。访问数据框常用的函数有:
数据框对象列表=arcpy.mapping.ListDataFrames(地图文档对象)
  • 数据框对象有以下属性:
数据框.name
数据框.scale
数据框.spatialReference
...
  • 数据框对象方法:
## 保持在数据框比例尺下,根据输入的Extent对象的范围属性,将数据框范围剧中显示;
## 其中Extent对象是一个矩形。
数据框.panToExtent(一个Extent范围对象) 

## 缩放至所选要素
数据框.zoomToSelectedFeatures({某一要素})

3. 图层

  • arcpy中两种访问Layer对象的方法:
图层对象lyr = arcpy.mapping.Layer(图层具体路径)
图层对象列表lyrList = arcpy.mapping.ListLayers(地图文档对象, {通配符参数}, {指定数据框})
  • 图层的一些常用属性:
图层对象.showLabels = True/False  //显示或者关闭图层的标注
图层对象.name                     //注意,图层名称区分大小写
图层对象.datasetName              //返回工作空间中图层数据集名称
图层对象.dataSource               //返回图层数据集的完整路径
  • 图层的一些常用方法:
图层对象.getExtent()
图层对象.save()
图层对象.saveACopy(另存为的完整路径)

## 判断此图层对象是否支持指定的属性,返回boolean值。
图层对象.supports(属性名)         
    # 举个栗子,判断lyr图层是否支持显示标注属性
    lyr.supports("SHOWLABELS")
  • arcpy.mapping模块中对图层的操作函数:
arcpy.mapping.AddLayer(待添加的数据框,待添加的图层对象,{添加位置如BOTTOM、TOP})
arcpy.mapping.InsertLayer(参数们)
arcpy.mapping.RemoveLayer(参数们)
arcpy.MoveLayer(参数们)
...
## 上述函数的具体参数可以去help中查看,描述得很清楚,
## 我们知道有这个就可以了,具体用的时候自己去看看哈。
  • arcpy中常用的图层类型有三种:
    • 要素图层
    • 栅格图层
    • 图层组

4. 修复数据链接

有时候当我们打开一个已有的地图文档时,由于地图文档源数据的移动或者本身.mxd文档的移动,导致数据连接错误。我们可以用脚本实现数据连接的修复。

  • 首先在使用地图文档之前,使用函数来检测数据连接是否断开:
## 检测数据连接是否断开,返回指定地图文档中断开连接的图层列表
brokenlist = arcpy.mapping.ListBrokenDataSources(地图文档对象)
  • 查找和替换工作空间路径1:
地图对象/图层对象/表视图对象.findAndReplaceWorkspacePaths(查找的工作空间路径,替换的工作空间路径,{是否验证有效性})
// 在是否验证有效性参数为boolean型,当为True时,则将验证替换的工作空间路径或者输入的数据集是否有效,
// 如果有效则被更新,如果无效则使用原来的数据源。
// 需要注意的是,我们在修改工作空间路径时,可以修改全部路径,也可以只修改部分路径。
  • 查找和替换工作空间路径2:
地图对象/图层对象/表视图对象.replaceWorkspaces(旧工作空间,旧工作空间类型,新工作空间,新工作空间类型,{是否验证有效性}) 

// 可以实现工作空间路径的修改,类似findAndReplaceWorkspacePaths函数,
// 但是需要注意的是,这里改变的是工作空间而不是数据集;
// 也可以修改工作空间类型,比如说一个shapefile要素移动到一个地理数据库下:
mxd.replaceWorkspaces("C:/shapes", "SHAPEFILE_WORKSPACE", "C:/database.gdb", "FILEGDB_WORKSPACE")
  • arcpy中支持的工作空间类型:
    这里写图片描述

5. 页面布局元素

布局元素(如指北针、比例尺等)不能用脚本创建,但是可以用脚本进行相关修改。因此首先我们必须要创建页面布局元素对象。可以通过ListLayoutElements函数确定地图文档中已经存在了哪些元素:

地图元素对象列表 = arcpy.mapping.ListLayoutElements(地图文档对象,{元素类型}, {名称通配符})

其中,元素类型有以下:

  • DATAFRAME_ELEMENT
    • 研究区域
  • GRAPHIC_ELEMENT
  • LEGEND_ELEMENT
    • 图例。此对象有atuoAdd属性,设置此属性为True时,我们将一个图层加入到一个地图文档中时将自动地把这个图层的图例也加入到图例中。
## 读取地图文档中的图例元素对象
legend = arcpy.mapping.ListLayoutElements(地图文档, "LEGEND_ELEMENT")[0]    
legend.autoAdd = True
arcpy,mapping.AddLayer(数据框,待添加的图层,添加位置)
  • MAPSURROUND_ELEMENT:
    • 比例尺、指北针、标注
  • PICTURE_ELEMENT
    • 该对象有一个sourceImage属性,用来表示图像数据源的路径。
  • TEXT_ELEMENT
    • 标题等。此元素对象具有text属性
elem.text

元素对象属性:

## 需要注意的是,并不是所有元素都有默认的名称,因此脚本中使用元素时需要先在地图文档中设置元素名称。
元素对象.name   

元素对象.type

6. 输出地图

arcpy.mapping中提供了很多输出地图的函数,具体使用可以见help:
这里写图片描述


7. 处理PDF文档

  • arcpy.mapping中还提供了PDFDocument类,用来处理PDF文件。
## 在内存中创建一个空的PDFDocument对象
pdf对象 = arcpy.mapping.PDFDocumentCreate(pdf路径) 

## 从现有的pdf文件中返回一个PDFDocument对象
pdf对象 = arcpy.mapping.PDFDocumentOpen(现有pdf路径)
  • pdf对象方法:
pdf对象.appendPages(待添加的pdf路径)
pdf对象.insertPages(参数们)
pdf对象.updateDocProperties(参数们)
pdf对象.updateDocSecurity(参数们)
pdf对象.saveAndClose()  //对pdf对象进行编辑后一定要关闭
## tips:参数不清楚的去看help文档
  • 使用pdf对象结束后需要删除pdf对象的引用
del pdf对象

8. 制图脚本样例

如果需要实例脚本工具,访问 ArcGIS资源网站,在输入框中输入 arcpy.mapping sample script tools即可。


–原创文章,转载必须注明出处–

你可能感兴趣的:(ArcGIS,ArcGIS,Python,制图模块)