《基于ArcGIS的Python编程秘笈(第2版)》——2.8 添加图层到地图文档

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

2.8 添加图层到地图文档

在很多情况下都需要把图层添加到地图文档中。制图模块提供了AddLayer()函数来实现这一功能。本节将介绍如何使用AddLayer()函数把图层添加到地图文档中。

2.8.1 准备工作
arcpy.mapping模块提供了在已有的地图文档中添加图层或图层组的功能。使用ArcMap 的自动排序功能,可以自动将一个图层添加到数据框中并显示出来。这个功能本质上与ArcMap中的“Add Data”按钮实现的功能是一样的,即根据几何类型和图层权重的规则,将图层添加到数据框中的适当位置。

小技巧: 

图层不能添加到图层文件(.lyr)中。
当把图层添加到地图文档中时,该图层必须引用一个已有的图层,即能够在磁盘上的图层文件、同一个地图文档和数据框、同一个地图文档但不相同的数据框或完全不同的地图文档中找到的图层。引用的图层可以是地图文档中的图层,也可以是图层文件(.lyr)中的图层。要将图层添加到地图文档中,首先创建Layer类的实例,然后调用AddLayer()函数,传入新的图层、图层要放置的数据框和图层放置的规则等参数。

2.8.2 操作方法
下面按步骤介绍如何将图层添加到地图文档中。

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

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

(3)导入arcpy.mapping模块。

import arcpy.mapping as mapping

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

mxd = mapping.MapDocument("CURRENT")

(5)获取对Crime数据框的引用,它是ListDataFrames()函数返回的数据框列表中的第1个数据框。在代码的末尾指定[0]值,用来获取ListDataFrames()函数返回的数据框列表中的第1个数据框。因为列表的索引是从0开始的,所以需要使用索引值0来检索列表的第1个数据框。

df = mapping.ListDataFrames(mxd)[0]

(6)创建Layer对象,该对象引用一个图层文件(.lyr)。

layer =
mapping.Layer(r"C:\ArcpyBook\data\School_Districts.lyr")

(7)将图层添加到数据框中。

mapping.AddLayer(df,layer,"AUTO_ARRANGE")

(8)可以通过查看C:ArcpyBookcodeCh2AddLayersMapDocument.py解决方案文件来检查代码。运行脚本,School_Districts.lyr文件即可加载在数据框中,如图2-6所示。


<a href=https://yqfile.alicdn.com/526ccffe6b5495ffed7e11bdc8a0fe83c091268c.png" >

2.8.3 工作原理
首先,导入arcpy.mapping模块,并获取对当前活动地图文档的引用。接着,创建一个新变量df来存储对Crime数据框的引用,该引用是通过ListDataFrames()函数返回数据框列表并使用[0]访问列表中的第1项元素(Crime数据框)来获取的。然后,创建一个 Layer 类的实例 layer,layer 变量引用存储在磁盘上的名为School_Districts. lyr的图层文件。最后,调用AddLayer()函数,传入3个参数:图层要添加到的数据框(df)、引用的图层(layer)和自动排序方式(auto-arrange)。对于第3个可选参数,可以使用AUTO_ARRANGE(默认值)自动地放置图层在数据框中的位置,也可以使用BOTTOM或TOP,指定图层放置在数据框或图层组的底层或顶层。

2.8.4 拓展
arcpy.mapping模块提供的AddLayerToGroup()函数可以把图层添加到图层组中。使用该函数可以将图层添加到图层组的顶层或底层,也可以使用自动排序方式来放置图层的位置,还可以将图层添加到一个空的图层组中。请读者注意,跟图层对象一样,图层组也不能添加到图层文件中。

图层也可以从数据框或图层组中移出。RemoveLayer()函数用来移除指定数据框中的图层或图层组。如果有两个图层的名字相同,只移除检索到的第1个图层。只有在脚本中设置迭代,才可以将两个图层都移除。

相关文章
|
13天前
|
安全 Java 数据处理
Python网络编程基础(Socket编程)多线程/多进程服务器编程
【4月更文挑战第11天】在网络编程中,随着客户端数量的增加,服务器的处理能力成为了一个重要的考量因素。为了处理多个客户端的并发请求,我们通常需要采用多线程或多进程的方式。在本章中,我们将探讨多线程/多进程服务器编程的概念,并通过一个多线程服务器的示例来演示其实现。
|
13天前
|
程序员 开发者 Python
Python网络编程基础(Socket编程) 错误处理和异常处理的最佳实践
【4月更文挑战第11天】在网络编程中,错误处理和异常管理不仅是为了程序的健壮性,也是为了提供清晰的用户反馈以及优雅的故障恢复。在前面的章节中,我们讨论了如何使用`try-except`语句来处理网络错误。现在,我们将深入探讨错误处理和异常处理的最佳实践。
|
5天前
|
安全 数据处理 开发者
《Python 简易速速上手小册》第7章:高级 Python 编程(2024 最新版)
《Python 简易速速上手小册》第7章:高级 Python 编程(2024 最新版)
19 1
|
5天前
|
人工智能 数据挖掘 程序员
《Python 简易速速上手小册》第1章:Python 编程入门(2024 最新版)
《Python 简易速速上手小册》第1章:Python 编程入门(2024 最新版)
35 0
|
6天前
|
API Python
Python模块化编程:面试题深度解析
【4月更文挑战第14天】了解Python模块化编程对于构建大型项目至关重要,它涉及代码组织、复用和维护。本文深入探讨了模块、包、导入机制、命名空间和作用域等基础概念,并列举了面试中常见的模块导入混乱、不适当星号导入等问题,强调了避免循环依赖、合理使用`__init__.py`以及理解模块作用域的重要性。掌握这些知识将有助于在面试中自信应对模块化编程的相关挑战。
19 0
|
7天前
|
Python
Python金融应用编程:衍生品定价和套期保值的随机过程
Python金融应用编程:衍生品定价和套期保值的随机过程
16 0
|
7天前
|
Python
python面型对象编程进阶(继承、多态、私有化、异常捕获、类属性和类方法)(上)
python面型对象编程进阶(继承、多态、私有化、异常捕获、类属性和类方法)(上)
46 0
|
8天前
05-python之函数-函数的定义/函数的参数/函数返回值/函数说明文档/函数的嵌套使用/函数变量的作用域
05-python之函数-函数的定义/函数的参数/函数返回值/函数说明文档/函数的嵌套使用/函数变量的作用域
|
8天前
|
机器学习/深度学习 算法 定位技术
python中使用马尔可夫决策过程(MDP)动态编程来解决最短路径强化学习问题
python中使用马尔可夫决策过程(MDP)动态编程来解决最短路径强化学习问题
23 1
|
12天前
|
网络协议 Java API
Python网络编程基础(Socket编程)Twisted框架简介
【4月更文挑战第12天】在网络编程的实践中,除了使用基本的Socket API之外,还有许多高级的网络编程库可以帮助我们更高效地构建复杂和健壮的网络应用。这些库通常提供了异步IO、事件驱动、协议实现等高级功能,使得开发者能够专注于业务逻辑的实现,而不用过多关注底层的网络细节。