《基于ArcGIS的Python编程秘笈(第2版)》——2.6 缩放至所选要素

简介:

本节书摘来自异步社区《基于ArcGIS的Python编程秘笈(第2版)》一书中的第2章,第2.6节,作者: 【美】Eric Pimpler(派普勒) 更多章节内容可以访问云栖社区“异步社区”公众号查看。

2.6 缩放至所选要素

创建选择集是ArcMap中常见的操作,选择集通常由属性查询或空间查询来创建,也可以由用户手动选择要素或其他方式来实现。为了更好地显示选择集,用户经常需要将视图缩放至所选要素的范围。Python有几种方法可以程序化地实现这一功能。本节将介绍如何在数据框和单独的图层中缩放至所选要素。

2.6.1 准备工作
DataFrame.zoomToSelectedFeatures()方法可以缩放至所有选择要素的范围,这些要素来自数据框的所有图层。在本质上,这个方法执行的操作与在ArcMap的菜单栏上单击“Selection | Zoom to Selected Features”所执行的操作是一样的。其中一个区别是,如果没有选中的要素,DataFrame.zoomToSelectedFeatures()方法会缩放至所有图层的全部范围(相当于全图显示)。

在一个单独图层中缩放至所选要素的范围,需要使用Layer对象。Layer对象包含的getSelectedExtent()方法,可以缩放至所选记录的范围。它同时返回一个Extent对象,该对象可以作为参数传递给DataFrame.panToExtent()方法。

2.6.2 操作方法
下面按步骤介绍如何获取和设置ArcMap中活动的数据框和活动的视图。

(1)在ArcMap中打开C:ArcpyBookCh2Crime_Ch2.mxd。

(2)查看ArcMap的“Table Of Contents”窗口,确保Crime是活动的数据框。

(3)单击“Table Of Contents”窗口中的“List By Selection”按钮。

(4)单击“Bexar County Boundaries”图层名称右边的“toggle”按钮,如图2-2所示,设置图层为“unselectable”(不可选)状态。


21df11477e2d782dd0564c45e8b18c31fc7ed293

(5)单击“Table Of Contents”窗口中的“List By Source”按钮。使用“Select Features”工具,用鼠标光标在Northside ISD区域的边界内拖曳出一个矩形框,矩形框包围一部分盗窃点集,即可选中一个特定学校区域的边界和一些盗窃点,如图2-3所示。


ac852818fdb9ba3f5cdde02071a2ae12626fd0d6

(6)单击ArcMap“标准”工具条上的“Python”按钮。

(7)导入arcpy.mapping模块。

import arcpy.mapping as mapping

(8)引用当前活动的地图文档(Crime_Ch2.mxd),把该引用赋值给变量。

mxd = mapping.MapDocument("CURRENT")

(9)获取活动的数据框(Crime),缩放至所选要素。

mxd.activeDataFrame.zoomToSelectedFeatures()

(10)如果没有选择要素,调用 zoomToSelectedFeatures()方法会缩放至数据框中所有要素的范围。单击“Selection | Clear Selected Features”,清除所选要素。此时,再执行相同的代码,比较清除操作前后zoomToSelectedFeatures()方法的执行结果。

mxd.activeDataFrame.zoomToSelectedFeatures()

(11)现在即将执行的步骤是缩放至特定图层上所选要素的范围。使用“Select Features”工具,在Northside ISD区域的边界内拖曳出一个矩形框,矩形框包围一部分盗窃点集。

(12)首先,获取对Crime数据框的引用。调用ListDataFrames()函数,传入Crime通配符参数,用来返回一个包含单独项的Python列表。使用[0]取出列表中的第一项元素,也就是这个返回的列表中唯一的一项元素。

df = mapping.ListDataFrames(mxd, "Crime")[0]

(13)其次,获取对Burglaries图层的引用,该图层包含所选要素。下面的代码使用通配符(*)搜索Crime数据框中的“Burglaries in 2009”图层。ListLayers()函数返回一个Python列表,使用[0]取出列表中的第一项元素,即一个名称中包含Burglaries字符的图层。

layer = mapping.ListLayers(mxd,"Burglaries*",df)[0]

(14)最后,通过获取图层中所选要素的范围来设置数据框的范围。

df.extent = layer.getSelectedExtent()

(15)缩放至所选要素的完整代码如下所示,也可以查看C:ArcpyBookcodeCh2ZoomSelectedExtent.py解决方案文件来检查代码。

import arcpy.mapping as mapping
mxd = mapping.MapDocument("CURRENT")
df = mapping.ListDataFrames(mxd, "Crime")[0]
layer = mapping.ListLayers(mxd,"Burglaries*",df)[0]
df.extent = layer.getSelectedExtent

2.6.3 工作原理
本节介绍了如何缩放至一个数据框的所有图层或特定图层中所选要素的范围。

缩放至一个数据框的所有图层中所选要素的范围,只需要引用当前活动的数据框,并调用zoomToSelectedFeatures()方法即可。

缩放至一个数据框的特定图层中所选要素的范围,需要编写的代码更复杂一些。首先,在导入arcpy.mapping模块后,获取对地图文档和Crime数据框的引用。然后,使用ListLayers()函数,传入对数据框的引用参数和通配符参数,搜索名称以Burglaries开头的图层。ListLayers()函数返回一个Python列表。因为本节使用的数据中只有一个图层符合通配符的搜索条件,所以取出列表中的第一个图层,并将其赋值给layer变量。最后,使用layer.getSelectedExtent()方法设置数据框的范围。

相关文章
|
17天前
|
存储 人工智能 数据处理
Python:编程的艺术与科学的完美交融
Python:编程的艺术与科学的完美交融
19 1
|
3天前
|
JSON 数据格式 开发者
pip和requests在Python编程中各自扮演着不同的角色
`pip`是Python的包管理器,用于安装、升级和管理PyPI上的包;`requests`是一个HTTP库,简化了HTTP通信,支持各种HTTP请求类型及数据交互。两者在Python环境中分别负责包管理和网络请求。
15 5
|
5天前
|
存储 Python 容器
Python高级编程
Python集合包括可变的set和不可变的frozenset,用于存储无序、不重复的哈希元素。创建集合可使用{}或set(),如`my_set = {1, 2, 3, 4, 5}`。通过add()添加元素,remove()或discard()删除元素,如`my_set.remove(3)`。
|
6天前
|
测试技术 Python
Python模块化方式编程实践
Python模块化编程提升代码质量,包括:定义专注单一任务的模块;使用`import`导入模块;封装函数和类,明确命名便于重用;避免全局变量降低耦合;使用文档字符串增强可读性;为每个模块写单元测试确保正确性;重用模块作为库;定期维护更新以适应Python新版本。遵循这些实践,可提高代码可读性、重用性和可维护性。
27 2
|
12天前
|
测试技术 调度 索引
python编程中常见的问题
【4月更文挑战第23天】
32 2
|
13天前
|
网络协议 算法 网络架构
Python网络编程之udp编程、黏包以及解决方案、tcpserver
Python网络编程之udp编程、黏包以及解决方案、tcpserver
|
13天前
|
机器学习/深度学习 数据挖掘 算法框架/工具
Python:编程的艺术与魅力
Python:编程的艺术与魅力
25 3
|
13天前
|
机器学习/深度学习 数据可视化 数据挖掘
实用技巧:提高 Python 编程效率的五个方法
本文介绍了五个提高 Python 编程效率的实用技巧,包括使用虚拟环境管理依赖、掌握列表推导式、使用生成器提升性能、利用装饰器简化代码结构以及使用 Jupyter Notebook 进行交互式开发。通过掌握这些技巧,可以让你的 Python 编程更加高效。
|
13天前
|
算法 Python
Python面向对象oop编程(二)
Python面向对象oop编程(二)
|
16天前
|
机器学习/深度学习 数据挖掘 API
pymc,一个灵活的的 Python 概率编程库!
pymc,一个灵活的的 Python 概率编程库!
21 1