arcpy.mapping常用四大件-Layer
arcpy.mapping常用四大件-Layer
by 李远祥
图层是地图里面非常重要的组成,几乎所有的制图显示都与图层有关。首先它是连接数据与符号渲染的重要桥梁,其次在出版地图中,图层又与图例关联在一起,当然,图层最重要的就是组织数据,数据的分类、上下叠加、标注的显示等等,全部都跟图层扯上关系。在arcpy.mapping 中,Layer是一个非常重要的类型,如果说MapDocument 是arcpy.mapping 的首要入口,那么Layer就是坐在mapping里面的VIP了。
在arcpy.mapping 中,Layer有两个地方可以进入,一是通过MapDocument –>dataFrame,二是直接通过.lyr文件进入。一般来说,第一种情况比较常用,基本上是针对某个地图文档某个或者多个图层进行自动化修改,其表现为细节修改。而通过lyr进入图层,更多的是希望通过在桌面软件完成某类图层的配置,然后整体更新或者插入到地图文档中,其表现为为粗放式修改。
想要知道Layer能做什么,最简单的就是看看它的属性和方法。属性是最常用的方式,通过查看起属性,基本上可以知道跟Layer关联的对象和功能有一些。关于Layer的属性和方法,只需要查看Esri官方帮助就行了,具体关于Layer的帮助,这里不列出来,连接地址点击这里。Layer的属性基本上可以是跟【图层属性】的标签页对应,包括数据源信息(datasetName、dataSource、workspacePath 均为只读)、标注(labelClasses、showLabels 均为只读)、常规属性如名称、可见比例等(name、maxScale、minScale 均为读写)、图层过滤(definitionQuery 读写)、图层类型判断(isFeatureLayer、isGroupLayer、isNetworkAnalystLayer、isRasterizingLayer、isRasterLayer、isServiceLayer 均为只读)、符号系统(symbology、symbologyType 均为只读)、时态(time 只读)。当然,这只是粗劣的分类,还有一些比较常用的就是visible、transparency 。
方法其实也不多,就是简单几个诸如获取图层范围(getExtent )、选择集合范围(getSelectedExtent 、setSelectionSet )、设置数据源(findAndReplaceWorkspacePath 、replaceDataSource )、保存图层(save 、saveACopy )、更新图层操作(updateLayerFromJSON )等,方法比属性要少得多,这也跟arcpy粗粒度的定位是有关的,但尽管如此,这些方法和属性也就基本覆盖了图层的所有操作了。
接下来可以看看官方的例子,通过.lyr文件去查找名为Highways图层,并修改让标注显示
import arcpylyrFile = arcpy.mapping.Layer(r"C:\Project\Data\Streets.lyr")for lyr in arcpy.mapping.ListLayers(lyrFile):if lyr.name.lower() == "highways":lyr.showLabels = Truelyr.saveACopy(r"C:\Project\Data\StreetsWithLabels.lyr")del lyrFile
但实际上,我们更多的希望直接修改的是mxd文档,所以,获取图层的方式就是不能采用lyr的方式了,而是采用dataframe进入,当然,那还需要配合ListDataFrames获取dataframe,通过ListLayers获取图层列表,代码如下
#coding=gbkimport arcpymxd = arcpy.mapping.MapDocument(r"C:\PythonTest\change.mxd")df = arcpy.mapping.ListDataFrames(mxd, "图层")[0]#对第一个图层进行修改lyrs=arcpy.mapping.ListLayers(mxd, "", df)for layer in lyrs:if layer.name.lower() == "highways":layer.showLabels = Truemxd.save()del mxd
可见,对于修改图层的设置,都是相对简单的。其他的诸如name、maxScale、minScale 、visible、transparency、definitionQuery 这些可以读写的属性,都可以直接进行设置了。
例如对图层标注进行更深层次的设置,前面提及到的labelClasses属性,虽然不能对其进行整体的替换赋新的labelClasses对象,但labelClasses本身的属性还是可以进行修改的,例如要将第一个图层的标注设置为由CITY_NAME_CNTRY_NAME 这样由两个字段组合显示,则可以通过labelClasses的expression进行修改,这个expression在labelClasses中却是可读写的属性哦。如下代码
#coding=gbk##修改label的显示字段import arcpymxd = arcpy.mapping.MapDocument(r"C:\PythonTest\change.mxd")df = arcpy.mapping.ListDataFrames(mxd, "图层")[0]#对第一个图层进行修改lyr = arcpy.mapping.ListLayers(mxd, "", df)[0]lyr.showLabels = Truelyr.labelClasses[0].expression = '[CITY_NAME] +"_"+[CNTRY_NAME]'#保存结果mxd.save()
由此可见,上面提及到的Layer的属性,并不是传统的只能获取信息的只读模式,只是说禁止对该项属性进行重新赋值对象,但属性对象内部的可读写设置还是可以生效的。这就给Layer带来了非常多的可设置方式了。例如原来是使用了Name作为唯一值进行渲染的,现在采用dis字段作为唯一值,通过arcpy代码也是很好的制作,如下代码
处理代码如下
#coding=gbkimport arcpymxd = arcpy.mapping.MapDocument(r"C:\PythonTest\change.mxd")df = arcpy.mapping.ListDataFrames(mxd, "图层")[0]lyr = arcpy.mapping.ListLayers(mxd,"",df)[1]if lyr.symbologyType == "UNIQUE_VALUES":lyr.symbology.valueField = "Dis"lyr.symbology.addAllValues()arcpy.RefreshActiveView()arcpy.RefreshTOC()mxd.save()del mxd
再来看最终的执行结果,已经按照dis进行了唯一值的重新渲染。
symbologyType不过类似这类型的设置可要注意了,为什么要先判断一下symbologyType ,那是因为前面也交代过,symbologyType和symbology对于Layer来说,都是只读的属性,所以,图层的渲染类型是不能再Layer这里修改的,但能够修改这些固定类型下的属性。所以,如果要做唯一值渲染,那就必须图层本身就是采用了唯一值渲染。其他的渲染模式设置也是一样,只能在设定的渲染模式下修改,而不能直接更改渲染模式。例如图层本身就是单一符号渲染的,是不能修改为唯一值渲染的。估计很多人对这种设置不能理解,包括笔者在内,开放渲染类型的修改其实并不困难,也不知道Esri在这方面到底是怎么个想法。
还有就是isFeatureLayer、isGroupLayer、isNetworkAnalystLayer、isRasterizingLayer、isRasterLayer、isServiceLayer 这几个判读图层类型的属性,看起来没起多大的作用,实际上在跟一些操作方法进行对接的时候,能够很好的控制一些这些操作能否执行。例如使用了ListLayers 方法去获取图层列表,就会将所有的图层都获取过来,如果需要设置数据源的话,组合图层是没有改方法的,不加判断的情况下,会导致程序直接报错而崩溃。所以,不要小看了这些非常细微的判读属性,它们对于逻辑操作是有极大的作用的。
总结:
在Layer对象里面,基本上能够对图层的设置做一些细微的调整,以达到ArcMap界面的一些常规修改。修改的部分更多的集中在其属性部分,而非其方法。所以,要用好Layer对象,还需要了解其关联的属性对象的一些设置很实用。
arcpy.mapping常用四大件-Layer的更多相关文章
- arcpy.mapping常用四大件-StyleItem
arcpy.mapping常用四大件-StyleItem by 李远祥 StyleItem 笔者将其归类到arcpy.mapping的四大件当中,主要是因为它的独特之处,就是其能力是直接读取.styl ...
- arcpy.mapping常用四大件-MapsurroundElement
arcpy.mapping常用四大件-MapsurroundElement by 李远祥 在arcpy.mapping 中,除了数据入口MapDocument.图层Layer之外,另一重要的角色就是M ...
- arcpy.mapping常用四大件-MapDocument
arcpy.mapping常用四大件-MapDocument by 李远祥 点开arcpy.mapping的帮助,可以看到其有限的几个类,看起来东西不是很多,但却是非常的使用.由于arcpy定位就是粗 ...
- 【281】◀▶ arcpy.mapping 常用类说明
arcpy.mapping 教程入门 arcpy.mapping 指导原则 按字母顺序排序的 arcpy.mpping 类列表 按字母顺序排序的 arcpy.mpping 函数列表 按字母顺序排序的 ...
- 【282】◀▶ arcpy.mapping 常用函数说明
arcpy.mapping 教程入门 arcpy.mapping 指导原则 按字母顺序排序的 arcpy.mpping 类列表 按字母顺序排序的 arcpy.mpping 函数列表 按字母顺序排序的 ...
- arcpy.mapping实战-专题图制图自动化
arcpy.mapping实战-专题图制图自动化 by 李远祥 最初对arcpy.mapping感兴趣是因为一次大规模的专题地图调整的需要,由于某某单位利用ArcEngine编写的专题图出图系统,出现 ...
- 使用arcpy.mapping模块批量出图
出图是项目里常见的任务,有的项目甚至会要上百张图片,所以批量出土工具很有必要.arcpy.mapping就是ArcGIS里的出图模块,能快速完成一个出图工具. arcpy.mapping模块里常用 ...
- 按字母顺序排序的 arcpy.mapping 类列表
arcpy.mapping 类可使用地图文档 (.mxd) 或图层文件 (.lyr) 中的不同对象类型的各种方法和属性.此文档可专门用作快速参考.有关详细信息,请使用链接跳转至各帮助页面. arcpy ...
- 使用arcpy.mapping 更新和修复数据源
来自:https://blog.csdn.net/gisinfo/article/details/6675390 在许多情况下,您都可能需要修复数据源或重定向数据源至其他位置.然而,如果是在每个相关的 ...
随机推荐
- SQL Server--导入和导出向导
作用:创建一个只需要最少的转换就可以快速导入或导出数据的包 操作步骤: 1 打开打入和导出向导方式 有四种方式 1)在SSMS(SQL Server Management Studio)中,右击目标数 ...
- FragmentTabHost+FrameLayout实现底部菜单栏
现在一般的app都使用底部菜单栏,那具体怎么实现的呢!我们就来看看 首先给大家展示一下布局文件 1 <LinearLayout xmlns:android="http://schema ...
- tableView滑动到底部
- (void)scrollToBottom { NSInteger sectionCount = [self.dataSource numberOfSectionsInTableView:self] ...
- Extjs4中的布局
布局用于定义容器如何组织内部子元素和控制子元素的大小.在一个应用程序中,作为定义容器的组织形式,布局是一个十分重要的组件.是显示单个子元素?还是垂直或水平显示多个子元素?这些均由布局来定义.并且布局将 ...
- HTML中meta的应用
meta是用来在HTML文档中模拟HTTP协议的响应头报文.meta 标签用 于网页的<head>与</head>中,meta 标签的用处很多.meta 的属性有两种:name ...
- STM32实现HID和u盘复合设备
USB设备可以定义一个复合设备,复合设备分两种,一种是一个设备多个配置,还有一种是一个配置多个接口,在本例中采用一个配置多个接口的方式 首先修改设备描述符,标准设备描述符和报告描述符都不需要修改, ...
- ucos队列的实现--源码分析
之前说到事件,讲了事件,信号量和互斥信号量,还有一个队列没说,今天说说队列. 队列是用在任务之间传送多个消息的时候,a任务发送消息,b任务发送消息,然后c任务可以依次去提取出b和a传递的消息,不会造成 ...
- 微信小程序实操-image height:auto问题,url地址报错,“不在以下合法域名列表中”问题等
1.修改app顶部title 使用API: wx.setNavigationBarTitle({ title: 'titleName'}); 2.ajax请求 wx.request({ url: 'h ...
- mysql 省市联动sql 语句
/*MySQL Data TransferSource Host: localhostSource Database: virgoTarget Host: localhostTarget Databa ...
- 字符串处理,NSNumber转换
more:http://www.superqq.com/blog/categories/ioskai-fa/ 1.判断字符串是否为空 if ([text lenght] == 0) { // ...