arcpy.mapping常用四大件-MapsurroundElement
arcpy.mapping常用四大件-MapsurroundElement
by 李远祥
在arcpy.mapping 中,除了数据入口MapDocument、图层Layer之外,另一重要的角色就是MapsurroundElement。MapsurroundElement直接关系的就是地图的整饰元素。只要凑齐上述的这三大件,ArcGIS的制图自动化基本上就可以实现了。
地图的整饰元素有很多,例如文本(标题及其他说明)、图例、比例尺、指北针、图片、外加图形等。利用arcpy.mapping 的MapsurroundElement类,可以做到对这些元素的布局进行精确的排布。
接下来可以看看MapsurroundElement的一些属性和方法了。严格来说,MapsurroundElement没有方法,所有的设置都是在属性当中,下面是MapsurroundElement的官方帮助截图,从截图中可以看到其主要的作用。

基本的属性设置,如整饰元素的位置、长宽级重命名都可以设置,以及一个parentDataFrameName用于识别其所在的dataframe(这个一般没什么作用,除非需要做接图表用到多个dataframe),从中可以看出,其主要功能在于整饰元素的识别及大小、位置调整。细节调整部分主要落在type上。这有点类似于上一章提到的Layer,type也是只读,但具体的可设置部分则在不同的包含对象中。其涉及到DATAFRAME_ELEMENT、GRAPHIC_ELEMENT、LEGEND_ELEMENT、MAPSURROUND_ELEMENT、PICTURE_ELEMENT、TEXT_ELEMENT这几类,全部都是继承了MapsurroundElement,所以,如果只是一般的是大小和位置操作,倒是通过name属性去识别,然后通过代码去调整元素的位置和大小。不同的类型也适当的增加一些可设置的属性,不过总体来说,可设置的属性也不多。
这几个类中,有一个非常神秘的就是DATAFRAME_ELEMENT,笔者经历了好几个版本的ArcGIS帮助,都没能查到其说明,应该是一个预留的接口,从字面上来看,估计是能够设置经纬网的,但目前还没开放,看看帮助就知道了,其他几个类别都能找到其说明,就唯独缺少它的说明。

GRAPHIC_ELEMENT 对应的就是通过【绘图】工具条绘制出来的图形,相对于MapsurroundElement基类,主要是增加了 isGroup(只读)属性,其用途,但目前作用不大,只是判读是否组合而已,连解除组合的方法都没有。方法上就是增加复制clone 和删除delete方法。
LEGEND_ELEMENT 则对应的是图例的操作,图例对象是属性和方法最多的一个子类,autoAdd、items、title。其中items是只读的,返回表示图例项目名称的字符串的列表,并不能进行修改。而title则是可读写的属性,可以直接进行设置,还有一个就是autoAdd,这个是一个布尔值,用于决定新的图层加入进来后是否添加到图例中,其实际作用就是【图例】--【属性】--【常规】中的【新图层添加到地图时向图例添加新项】

图例的方法倒是开放了不少比较有用的功能,下面几个就是不错的方法
- adjustColumnCount (column_count) : 设置图例的列数
- listLegendItemLayers () :获取图例对应的图层列表
- removeItem (legend_item_layer, {index}) :删除图例的某一项
- updateItem (legend_item_layer, {legend_item_style_item}, {preserve_item_sizes}, {use_visible_extent}, {show_feature_count}, {use_ddp_extent}, {index}) :更新图例设置
对于图例的这些操作方法,尚算让人满意吧,当然不可能将图例转换为图形这些操作加进去,毕竟arcpy定位的是粗粒度的操作,图例转图形这些就是放在AO上去代码编辑,都是比较麻烦的。
PICTURE_ELEMENT是插入的图片对象,其中多出一项sourceImage属性,可以用来读取路径(很少人会天真的用来读取路径)和设置新的插入图片。除此之外,这个子类也没有具体的方法可以使用。
TEXT_ELEMENT则是最常用的子类,所有的文本对象,包括静态的还是动态的文本对象都可以用它进行设置。其增加了angle、fontSize和text属性,基本上可以望文生义了。常用的就是进行文本内容和文本字体的修改。在方法上同样是增加了clone 和delete的操作。
在所有的MapsurroundElement 中,眼尖点的人就会发现,没有任何的一个add或者create的字眼。":
elm.text = ""
mxd.save()
del mxd
但一般来说,极少使用这种方式来进行替换文本值的。最常见的方式是通过对象的name来标识找到,指定到具体的对象。而获取整饰元素的方法可以使用ListLayoutElements ,返回的是一个数组,再通过元素在ArcMap中设定的对象名称也就是name来确定。例如如下的代码
import arcpymxd = arcpy.mapping.MapDocument(r"C:\Project\Project.mxd")for elm in arcpy.mapping.ListLayoutElements(mxd, "TEXT_ELEMENT"):if elm.name == "tile_elm":elm.text = "修改后的标题"mxd.save()del mxd
可见,在arcpy.mapping.ListLayoutElements方法中,是不带通过name参数直接指定对象的,都需要通过数组去查找。此外,还必须预先对元素对象命名,如下图,则是对标题文本设置了一个名称为【tile_name】

其他整饰元素设置也是一样,其中最重要的原则就是在加入整饰元素的时候必须给一个元素名称,这是一种规范做法,不管后期是否使用arcpy进行调整。这样可以规避后期的一些修改。笔者曾经帮助过某一个用户解决过千张专题图的生产,其中一个非常重要的部分就是在后期修改整饰元素的位置,都是一些细微的操作,例如微调位置和修改文本值,如果一开始没有设置整饰元素的名称,那么后期面对上千个mxd,则是灾难性的工作。
总结:
MapsurroundElement是非常好用的整饰元素对象,在制图自动化中给与了非常高的便利性。当然,它有固定的使用模式和场景,就是需要在一开始创建好元素对象,并且设置好其元素名称。由于这些对象不能通过代码去创建,因此,利用arcpy去做地图模版,那是不合理的。MapsurroundElement只是一种便利的辅助方法。
arcpy.mapping常用四大件-MapsurroundElement的更多相关文章
- arcpy.mapping常用四大件-StyleItem
arcpy.mapping常用四大件-StyleItem by 李远祥 StyleItem 笔者将其归类到arcpy.mapping的四大件当中,主要是因为它的独特之处,就是其能力是直接读取.styl ...
- arcpy.mapping常用四大件-MapDocument
arcpy.mapping常用四大件-MapDocument by 李远祥 点开arcpy.mapping的帮助,可以看到其有限的几个类,看起来东西不是很多,但却是非常的使用.由于arcpy定位就是粗 ...
- arcpy.mapping常用四大件-Layer
arcpy.mapping常用四大件-Layer by 李远祥 图层是地图里面非常重要的组成,几乎所有的制图显示都与图层有关.首先它是连接数据与符号渲染的重要桥梁,其次在出版地图中,图层又与图例关联在 ...
- 【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 类可使用地图文档 (.mxd) 或图层文件 (.lyr) 中的不同对象类型的各种方法和属性.此文档可专门用作快速参考.有关详细信息,请使用链接跳转至各帮助页面. arcpy ...
- 使用arcpy.mapping模块批量出图
出图是项目里常见的任务,有的项目甚至会要上百张图片,所以批量出土工具很有必要.arcpy.mapping就是ArcGIS里的出图模块,能快速完成一个出图工具. arcpy.mapping模块里常用 ...
- xml常用四种解析方式优缺点的分析×××××
xml常用四种解析方式优缺点的分析 博客分类: xml 最近用得到xml的解析方式,于是就翻了翻自己的笔记同时从网上查找了资料,自己在前人的基础上总结了下,贴出来大家分享下. 首先介绍一下xml语 ...
随机推荐
- logback配置
好吧,项目中一直使用的是logback做日志记录. 开始跑Demo的时候,一直会报Failed to load class org.slf4j.impl.StaticLogger的错误.后来googl ...
- 51驱动LCD1602
1602 采用标准的 16 脚接口,其中: 第 1 脚:VSS 为地电源 第 2 脚:VDD 接 5V 正电源 第 3 脚:V0 为液晶显示器对比度调整端,接正电源时对比度最弱,接地 电源时对比度最高 ...
- linux获得目录下文件个数
获得当前目录下文件个数赋值给变量panonum: panonum=$(ls -l |grep "^-" | wc -l) 获取指定目录下文件个数赋值给指定变量: panonum=$ ...
- ASIHTTPRequest异步请求 分类: ios技术 2015-03-01 09:33 48人阅读 评论(0) 收藏
我们运行程序,如果网速很慢,查询的时候会一直黑屏,直到请求结束画面才出现,这样用户体验很不好.因此同步请求一般只是在某个子线 程中使用,而不在主线程中使用.异步请求的用户体验要比同步请求好,因此一般情 ...
- Dom编程(二)
document是window对象的一个属性,因为使用window对象成员的时候可以省略window.,所以一般直接写document document的方法: (1)write:向文档中写入内容. ...
- IOS开发中Xcode常用插件安装与管理(转)
XCode中插件管理工具:Alcatraz 转自http://www.cocoachina.com/industry/20140506/8325.html 苹果现在的成绩得益于其始终如一的坚持. ...
- UVa 10551 - Basic Remains
题目大意:关于大数的mod和进制转换,直接使用Java的BigInteger类,正在copy式学习中... import java.io.*; import java.util.*; import j ...
- java系列--HTTP协议
一.HTTP请求信息 请求行 请求头 空行 消息体 1.防盗链: 枚举类型: 二.中文乱码问题 1.Get提交 String username = request.getParameter(" ...
- HNU 13081 Even Up Solitaire解题报告
题目大意:给定一个数组,若相邻的两个数之和为偶数,则将此两个数移除,通过这种方法将满足条件得数移除后数组还剩多少个数. 此题太水,不做解释.直接代码之: #include <stdio.h> ...
- js 如何判断鼠标点击事件还是js代码调用
<html> <head> <meta http-equiv="Content-Type" content="text/html; char ...