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 arcpy
mxd = 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的更多相关文章

  1. arcpy.mapping常用四大件-StyleItem

    arcpy.mapping常用四大件-StyleItem by 李远祥 StyleItem 笔者将其归类到arcpy.mapping的四大件当中,主要是因为它的独特之处,就是其能力是直接读取.styl ...

  2. arcpy.mapping常用四大件-MapDocument

    arcpy.mapping常用四大件-MapDocument by 李远祥 点开arcpy.mapping的帮助,可以看到其有限的几个类,看起来东西不是很多,但却是非常的使用.由于arcpy定位就是粗 ...

  3. arcpy.mapping常用四大件-Layer

    arcpy.mapping常用四大件-Layer by 李远祥 图层是地图里面非常重要的组成,几乎所有的制图显示都与图层有关.首先它是连接数据与符号渲染的重要桥梁,其次在出版地图中,图层又与图例关联在 ...

  4. 【281】◀▶ arcpy.mapping 常用类说明

    arcpy.mapping 教程入门 arcpy.mapping 指导原则 按字母顺序排序的 arcpy.mpping 类列表 按字母顺序排序的 arcpy.mpping 函数列表 按字母顺序排序的 ...

  5. 【282】◀▶ arcpy.mapping 常用函数说明

    arcpy.mapping 教程入门 arcpy.mapping 指导原则 按字母顺序排序的 arcpy.mpping 类列表 按字母顺序排序的 arcpy.mpping 函数列表 按字母顺序排序的 ...

  6. arcpy.mapping实战-专题图制图自动化

    arcpy.mapping实战-专题图制图自动化 by 李远祥 最初对arcpy.mapping感兴趣是因为一次大规模的专题地图调整的需要,由于某某单位利用ArcEngine编写的专题图出图系统,出现 ...

  7. 按字母顺序排序的 arcpy.mapping 类列表

    arcpy.mapping 类可使用地图文档 (.mxd) 或图层文件 (.lyr) 中的不同对象类型的各种方法和属性.此文档可专门用作快速参考.有关详细信息,请使用链接跳转至各帮助页面. arcpy ...

  8. 使用arcpy.mapping模块批量出图

      出图是项目里常见的任务,有的项目甚至会要上百张图片,所以批量出土工具很有必要.arcpy.mapping就是ArcGIS里的出图模块,能快速完成一个出图工具. arcpy.mapping模块里常用 ...

  9. xml常用四种解析方式优缺点的分析×××××

    xml常用四种解析方式优缺点的分析 博客分类: xml   最近用得到xml的解析方式,于是就翻了翻自己的笔记同时从网上查找了资料,自己在前人的基础上总结了下,贴出来大家分享下. 首先介绍一下xml语 ...

随机推荐

  1. Nginx 中 nginx.conf 详解

    #定义Nginx运行的用户和用户组 user www www; #nginx进程数,建议设置为等于CPU总核心数. worker_processes 8; #全局错误日志定义类型,[ debug | ...

  2. Codeforces#348DIV2/VK CUP 2016

    昨天第一次开大小号打cf,发现原来小号提交之后大号在此提交同样的代码会被skipped掉,然后之后提交的代码都不记分,昨天a,b,c都是水题 A 题意:问一个物品最多能被分成多少份,分成的连续两份不能 ...

  3. js的this作用域

    作者:zccst this作用域以前专门学习研究过,但发现依然不够全面和完整.现在继续学习 先列出之前看过的结论: 函数在被调用的时候会意外接受两个参数:this和argument,其中this的值跟 ...

  4. STM32单片机图片解码

    图片解码首先是最简单的bmp图片解码,关于bmp的结构可自行查阅,代码如下 #ifndef __BMPDECODE_H_ #define __BMPDECODE_H_ #include "f ...

  5. LPC1788的IIC使用

    #ifndef __IIC0_H_ #define __IIC0_H_ #include "common.h" #include "delay.h" //IIC ...

  6. JS脚本语言(全称java script:网页里使用的脚本语言:非常强大的语言):基础语法

    一.注释语法 1.单行注释// 2.多行注释/**/ 二.语法输出 1.alert(信息):弹出信息 2.confirm(信息):弹出一个和用户交互的对话框 3.prompt(信息):弹出一个可以让用 ...

  7. 安卓 ArrayList,LinkedList,HashSet,Vector,TreeSet的区别和使用

    java的集合就那么几种 总体为:List,Set,Map (都是接口由其子类去实现具体的方法) ArrayList,LinkedList,Vector都属于List List:元素是有顺序的,元素可 ...

  8. Python3基础 使用for循环 删除一个列表中的重复项

    镇场诗: 诚听如来语,顿舍世间名与利.愿做地藏徒,广演是经阎浮提. 愿尽吾所学,成就一良心博客.愿诸后来人,重现智慧清净体.-------------------------------------- ...

  9. linux内核设计与实现笔记 进程调度

    转载:http://blog.chinaunix.net/uid-24919665-id-3013590.html

  10. Bonferroni校正法

    Bonferroni校正:如果在同一数据集上同时检验n个独立的假设,那么用于每一假设的统计显著水平,应为仅检验一个假设时的显著水平的1/n http://baike.baidu.com/view/12 ...