2.7 改变地图范围
很多时候我们需要改变地图的范围,常见的情况有以下两种:一是在自动生成地图的过程中,二是在需要创建不同区域或要素的地图时。arcpy提供了一些可以改变地图范围的方法,本节将使用定义表达式来改变地图范围。
2.7.1 准备工作
DataFrame 类的 extent 属性可以用来设置地图的范围,它经常同 Layer.definitionQuery属性一起使用来定义图层的定义查询属性(即定义表达式)。本节将介绍如何使用这些类(DataFrame、Layer)与属性(DataFrame.extent和Layer.definitionQuery)来改变地图范围。
2.7.2 操作方法
下面按步骤介绍如何使用定义表达式改变地图范围。
(1)在ArcMap中打开C:\ArcpyBook\Ch2\Crime_Ch2.mxd。
(2)单击ArcMap“标准”工具条上的“Python”按钮。
(3)导入arcpy.mapping模块。
import arcpy.mapping as mapping
.```
(4)引用当前活动的地图文档(Crime_Ch2mxd),把该引用赋值给变量。
```javascript
mxd = mapping.MapDocument("CURRENT")
(5)创建for循环来遍历地图文档中的所有数据框。
for df in mapping.ListDataFrames(mxd):
(6)查找Crime数据框和该数据框内的指定图层,这个图层将用于定义查询。
if df.name == 'Crime':
layers = mapping.ListLayers(mxd,'Crime Density by
School District',df)
(7)创建for循环来遍历图层。尽管layers列表中只有一项元素,但是这里也使用循环来遍历。在for循环中,创建一个定义表达式,并设置新的数据框范围。
for layer in layers:
query = '"NAME" = \'Lackland ISD\''
layer.definitionQuery = query
df.extent = layer.getExtent()
(8)完整的脚本如图2-4所!示,也可以查看C:\ArcpyBook\code\Ch2\ChangeMapExtent.py解决方案文件来检查代码。
(9)保存并运行脚本。此时数据视图的范围已经更新,因此只显示与定义表达式相匹配的要素,如图2-5所示。
**
2.7.3 工作原理**
本节使用图层的定义查询属性来更新地图范围。首先,在脚本结尾处创建query变量来存放定义表达式,设置定义表达式,查找名为Lackland ISD的学校区域。然后,将query变量存储的字符串赋值给 definitionQuery 属性。最后,设置 df.extent 属性为layer.getExtent()方法返回的值。