python3 arcgis_ArcGIS Python编程案例(3)-管理地图文档和图层

我们将在本章介绍以下案例:

引用当前地图文档

引用磁盘上的地图文档

访问数据框

获取地图文档中的图层列表

限制图层列表内容

更改地图显示范围

获取表数据列表

向地图文档中添加图层

向地图文档中插入图层

更新图层符号系统

更新图层属性

引言

ArcPy制图模块是ArcGIS 10新增加的功能模块,该模块提供了相当赞的自动化制图功能,包括管理地图文档和图层文件以及数据。制图模块提供了自动化地图输出和打印功能,可用于创建PDF地图册和发布ArcGIS Server地图服务。制图模块对于那些需要完成的许多日常地处理任务的GIS人员是很有用的。

在本章中,你将了解如何使用ArcPy制图模块来管理地图文档和图层文件。你会了解如何从地图文档文件中增加和删除图层和表,如何向数据框中插入图层,如何在地图文档内移动图层。最后你还会学习如何更新图层属性和符号化系统。

引用当前地图文档

当通过ArcGIS Python窗口或者自定义工具中执行地理处理脚本的时候,你通常需要获取当前加载到ArcMap中的地图文档的引用地址。在脚本中这通常是对地图文档中的图层和表执行地理操作前的第一步。在本案例中,你将会学习如何在Python地理处理脚本中引用当前地图文档。

Getting ready

对一个地图文档文件执行任何操作前,你首先需要在Python脚本中获得该地图文档的引用地址。这一操作可通过调用arcpy.mapping模块中的MapDocument()函数来实现。你可以引用当前活动的地图文档文件,也可以引用磁盘中的地图文档文件。你只要将关键字CURRENT作为MapDocument()函数的参数即可引用当前活动的地图文档,即当前ArcMap中打开的地图文档。下面的示例代码中展示了如何获取当前活动地图文档的引用:

mxd = arcpy.mapping.MapDocument("CURRENT")

当通过ArcGIS Python窗口或者自定义工具中执行地处理脚本的时候,你可以只使用CURRENT关键字。如果想在IDLE或者其他开发环境下运行脚本,使用CURRENT关键字则不能访问当前加载到ArcMap中的地图文档文件。CURRENT关键字大小写不敏感,你也可以写作current。

如果要引用本地磁盘或远程磁盘上的地图文档的话,你只要将地图文档路径和文件名作为MapDocument()函数的参数即可。比如,你想要引用c:\data文件夹下的crime.mxd地图文档文件就可以使用下面的代码:

arcpy.mapping.MapDocument("c:/data/crime.mxd")

How to do it...

按照以下步骤来学习如何获取ArcMap中当前活动的地图文档:

1.使用ArcMap打开c:\ArcpyBook\Ch3\Crime_Ch3.mxd文件。

2.点击ArcMap主工具栏上的Python窗口按钮。

3.在Python窗口中导入arcpy.mapping模块:

import arcpy.mapping as mapping

4.上一步中的代码下敲入以下代码来引用当前活动的地图文档(Crime_Ch3.mxd)并将该引用赋值给变量:

mxd = mapping.MapDocument("CURRENT")

5.获取地图文档的标题并将结果输出到shell窗口中。代码执行时print语句会将地图文档的标题打印到屏幕:

print mxd.title

6.为地图文档设置一个新的标题:

mxd.title = "Copy of Crime Project"

7.使用saveACopy()方法保存一个地图文档文件的备份:

mxd.saveACopy("c:/ArcpyBook/Ch3/crime_copy.mxd")

8.运行脚本。

9.在ArcMap中打开刚才创建的crime_copy.mxd文件,选择文件(File)|地图文档属性(Map Document Properties)来查看地图文档的新标题。

How it works...

MapDocument类中的构造函数会创建该类的一个实例。在面向对象编程中,一个实例(instance)也就是通常说的一个对象(object)。MapDocument的构造函数中的参数可以是CURRENT关键字也可以是本地或者远程磁盘上的地图文档文件的路径。构造函数创建了一个对象并赋值给变量mxd。你可以使用点标注符来获取对象的属性和方法。在本案例中,我们使用MapDocument.title属性设置并输出地图文档的标题,同时我们也使用MapDocument.saveACopy()方法保存了一个新的地图文档文件。

引用磁盘上的地图文档

除了能够引用ArcMap中当前活动的地图文档文件,你还可以使用MapDocument()函数来获取保存在本地磁盘或远程磁盘中的地图文档文件。在本案例中,你将会学习如何获取这些地图文档。

Getting Ready

正如之前所述,你可以引用计算机中或在共享服务器上的地图文档文件。只要在MapDocument()中提供文件的路径就可以实现。由于该操作可以不通过ArcGIS Python窗口或自定义脚本工具来运行,因此这是获取地图文档引用的更为灵活的方式。

How to do it...

按照以下步骤来学习如何访问本地或远程磁盘上保存的地图文档:

1.通过开始菜单|所有程序|ArcGIS|Python2.7|IDLE打开IDLE开发环境。

2.在IDLE窗口中选择New|New Window创建一个新的IDLE脚本窗口。

3.导入arcpy.mapping模块:

import arcpy.mapping as mapping

4.引用在上一个案例中创建的crime_copy.mxd地图文档:

mxd=mapping.MapDocument("c:/ArcpyBook/Ch3/crime_copy.mxd")

5.打印地图文档的标题:

print mxd.title

6.运行脚本可以看到如下结果显示:

Copy of Crime Project

How it works...

本案例同前一案例唯一的区别在于我们提供了本地或远程磁盘上的地图文档文件的引用地址而不是使用CURRENT关键字。这也是我们推荐的引用地图文档文件的方式,除非你确定地理处理脚本将在ArcGIS中的Python窗口或是自定义脚本工具中执行。

访问数据框

ArcMap的内容列表(table of content)由一个或多个数据框(data frame)组成。每一个数据框均可包含图层和表。数据框还可以用来筛选像ListLayers()这样的列表函数返回的列表内容。比如说DataFrame对象可以作为输入参数用来限制ListLayers()函数仅返回位于某一特定的数据框中的图层数据。你还可以使DataFrame对象来设置或获取当前地图的地理范围,这在创建地图册的时候非常有用。在本案例中你将学习如何在Python脚本中访问数据框。

Getting Ready

ListDataFrames()会返回一个包含DataFrame对象的列表。每一个数据框均可包含图层和表,同时也可以作为参数用来限制ListLayers()函数和ListTableViews()函数返回的列表内容。

How to do it...

按照以下步骤来学习如何获取一个地图文档中的数据框列表:

1.在ArcMap中打开c:\ArcpyBook\Ch3\Crime_Ch3.mxd文件。

2.点击ArcMap主工具栏上的Python窗口按钮。

3.导入arcpy.mapping模块:

import arcpy.mapping as mapping

4.引用当前活动的地图文档(Crime_Ch3.mxd)并将该引用赋值给变量:

mxd = mapping.MapDocumen

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值