arcpy.mapping常用四大件-StyleItem
arcpy.mapping常用四大件-StyleItem
by 李远祥
StyleItem 笔者将其归类到arcpy.mapping的四大件当中,主要是因为它的独特之处,就是其能力是直接读取.style文件的。前面介绍的三大件,分别是对地图文档、图层、地图整饰元素进行操作,现在再加上能够读取和使用.style符号,基本上就能构成了完整的自动化制图体系。
arcgis 的.style文件,就是我们常说的样式库文件,主要是用来保存符号样式、整饰元素样式等的文件。ArcMap有个普遍的特性,就是样式符号一旦读取之后,就可以脱离.style文件使用,所有的修改都与.style无关了,这也是导致很多人对于.style比较陌生。其实在严谨的GIS制图流程中,符号库是要先于数据整理、组织等工作之前开展的,所有的符号修改也是要先在符号库中修改,修改完成后再重新再图层中应用。但由于ArcMap允许没有符号脱离符号库生成(其实也不算脱离,只是保存在默认的符号库中),所以对于非专业制图人员来说,很多标准和规范没有得到很好的执行。
StyleItem对象的作用是用来读取粒度更加细的符号样式,它能够识别出样式库中所有的样式类型,譬如颜色、图例项、标记符号和比例尺等,它基本上是要结合Layer和MapsurroundElement 使用,通过前者获取到图层或者整饰元素,然后对其应用样式。StyleItem只有三个属性,分别是itemName、itemCategory和styleFolderName ,全部都是只读属性,可以看出Esri对其定位是获取符号,而非制作符号(谁也不会天真到使用代码的方式去创建符号吧,毕竟有可视化界面styleManager去完成符号设计)。要能够使用这三个属性,就必须知道其对应在样式管理器中的具体部分。如下图所示,基本上可以知道这三个属性所对应的部分

在制作的时候,文件夹和符号名称都很好理解,唯独这【类别】的设置,有点不明确。这里的【类别】是不能创建的,只能在符号新建的时候或者重命名的时候,进行修改,修改的方式也只能是纯文本输入,没有所谓的下拉框选择的操作,所以,一旦输入错误,符号就有可能分在不同的类别当中。下图就是在符号创建完成之后,通过点击【类别】一列进行重新定义类别的操作

为什么会有【类别】的东西,看看下面最简单的命名方式吧,ArcGIS的符号名称是可以相同的,那么怎样才能精确查找到符号?那就需要【类别】进行配合操作了。如下图,符号名称都未【钻孔】,这种方式是可以存在的。

当然,本章并不是讨论arcgis符号库是怎么命名的,但要了解清楚StyleItem 的运作方式,必须掌握其符号库组织的特性。上述的着一些细节,恐怕很多骨灰级的ArcGIS用户都不知道。接下来就看看StyleItem 是如何获取符号库中的符号了。通过帮助检索的方式,可以看到关于其调用的方式说明少之极少,如下图

点开每一个帮助,其代码可以看看,均没有说明如何引用外部符号库,官方的代码如下
import arcpymxd = arcpy.mapping.MapDocument(r"C:\Project\Project.mxd")df = arcpy.mapping.ListDataFrames(mxd)[0]lyrFile = arcpy.mapping.Layer(r"C:\Project\Data\Rivers.lyr")arcpy.mapping.AddLayer(df, lyrFile, "TOP")lyr = arcpy.mapping.ListLayers(mxd, 'Rivers', df)[0]styleItem = arcpy.mapping.ListStyleItems("USER_STYLE", "Legend Items", "NewDefaultLegendStyle")[0]legend = arcpy.mapping.ListLayoutElements(mxd, "LEGEND_ELEMENT")[0]legend.updateItem(lyr, styleItem)del mxd
很明显,这种方式只是调用了默认的符号库,如果要指定符号库的符号的话,还是需要使用arcpy.mapping.ListStyleItems 方法来获取,可以查看一下
ListStyleItems (style_file_path, style_folder_name, {wildcard})的用法,从这个方法来看,是可以指定符号库路径的,顺便再看看其结果,是一个数组,所以实例代码中使用了数据的第一个对象。很明显,这对应上面所说的符号命名方式是可以重叠的,如果想精确获取到符号,也就需要使用StyleItem 的itemCategory 属性了。
接下来可以感受一下如果通过arcpy.mapping的方式去指定渲染的符号了,下图是一个监测设施图层,使用了红色圆点来表示,如图

现在需要将其符号改为【水文测站】的水文站符号,其对应的符号库中已经有相同的“水文测站”的名称,如下图

其中已经在类别在分为【水位站】和【水文站】两个类别。现在可以看看代码怎么操作了。
#coding=gbkimport arcpystyleItems = arcpy.mapping.ListStyleItems(r"C:\Users\lazy\Desktop\1\water.style", "Marker Symbols", "水文测站")for style in styleItems:if style.itemCategory=="水文站".decode('gbk'):print style.itemNamedel mxd
非常惋惜的是目前arcpy.mapping 还没有能力可以直接修改图层的样式符号,就算能读取这些样式文件,也无法对图层进行设置。唯一一个可以设置的是图例,这在帮助文档里面已经说明得非常具体,如果不留意帮助,可能还一直在寻找这种修改符号的方法。而且最让人无奈的是这个说明是在ListStyleItems 方法中说明,有点让人啼笑皆非。

那可以看看以下代码,最终实现的是修改图例的样式,这些样式只是包括图例的布局、字体配置(当然不包括符号了,符号是图层关联过来的)
#coding=gbkimport arcpymxd = arcpy.mapping.MapDocument(r"C:\Users\lazy\Desktop\水利符号库\水利模型\水利数据模型.mxd")df = arcpy.mapping.ListDataFrames(mxd)[0]lyr = arcpy.mapping.ListLayers(mxd, '', df)[3]styleItems = arcpy.mapping.ListStyleItems(r"C:\Users\lazy\Desktop\1\water.style", "Legend Items", "水文测站")for style in styleItems:if style.itemCategory=="水文站".decode('gbk'):#更新图层符号legend = arcpy.mapping.ListLayoutElements(mxd, "LEGEND_ELEMENT")[0]legend.updateItem(lyr, style)mxd.save()del mxd
最终的效果就是明显替换了图例部分,让图例的字体变粗了,这个效果就是可以在样式管理器中设计的了。

总结:StyleItem还处理幼儿阶段,能够实现的功能还是非常有限,不过相信随着ArcMap的完善,会逐步将这些功能补上,毕竟现在已经可以看到其操作符号库的方法了,并且可以修改图例的布局,相信很快就会覆盖其他的符号设置功能。
arcpy.mapping常用四大件-StyleItem的更多相关文章
- arcpy.mapping常用四大件-MapDocument
arcpy.mapping常用四大件-MapDocument by 李远祥 点开arcpy.mapping的帮助,可以看到其有限的几个类,看起来东西不是很多,但却是非常的使用.由于arcpy定位就是粗 ...
- arcpy.mapping常用四大件-MapsurroundElement
arcpy.mapping常用四大件-MapsurroundElement by 李远祥 在arcpy.mapping 中,除了数据入口MapDocument.图层Layer之外,另一重要的角色就是M ...
- 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就是ArcGIS里的出图模块,能快速完成一个出图工具. arcpy.mapping模块里常用 ...
- 按字母顺序排序的 arcpy.mapping 类列表
arcpy.mapping 类可使用地图文档 (.mxd) 或图层文件 (.lyr) 中的不同对象类型的各种方法和属性.此文档可专门用作快速参考.有关详细信息,请使用链接跳转至各帮助页面. arcpy ...
- xml常用四种解析方式优缺点的分析×××××
xml常用四种解析方式优缺点的分析 博客分类: xml 最近用得到xml的解析方式,于是就翻了翻自己的笔记同时从网上查找了资料,自己在前人的基础上总结了下,贴出来大家分享下. 首先介绍一下xml语 ...
随机推荐
- linux中vi和vim编辑工具
linux中知名的还有emacs,功能比vim还要强大 vim 如果文件存在vim是打开这个文件,若果不存在,则先新建再打开 命令模式:任何模式都可以通过Esc回到命令模式,命令模式可以通过命令进行选 ...
- WINDOWS下搭建SVN服务器端的步骤分享(Subversion)
1.获取svn程序 2.安装 Subversion(以下简称SVN)的服务器端和客户端.下载下来的服务器端是个 zip压缩包,直接解压缩即可,比如我解压到 E:\subversion .客户端安装文件 ...
- mongodb学习(四)CRUD操作
CRUD操作: 1. 插入操作: 直接使用 insert可执行单个操作,也可以执行批量操作 书上的batchInsert会报错.似乎被废弃了. db.foo.insert({"bar&quo ...
- IOS开发-UI学习-UITextField的具体属性及用法
直接上代码,里面有各种属性的用法注释,至于每个属性有多个可以设置的值,每个值的效果如何,可以通过查看这个函数参数的枚举量,并逐一测试. //制作登陆界面 #import "ViewContr ...
- Mybatis中常见的SQL DML
1.sql select 查询 <select id="query" resultType="CfCurrbusilogEntity" > sele ...
- js架构设计模式——由项目浅谈JS中MVVM模式
1. 背景 最近项目原因使用了durandal.js和knockout.js,颇有受益.决定写一个比较浅显的总结. 之前一直在用SpringMVC框架写后台,前台是用JSP+JS+标签库,算是很 ...
- 用js来实现页面的换肤功能(带cookie记忆)
用js来实现页面的换肤功能 js实现换肤功能的实现主要是通过利用js控制CSS来实现的.大致的实现原理是这样的, 1.先定义一个页面基本样式style.css来确定div的宽高等属性,使得整个页面的D ...
- js如何准确获取当前页面url网址信息
1.window.location.href(设置或获取整个 URL 为字符串) var test = window.location.href;alert(test);返回:http://i.cnb ...
- ZOJ-2343-Robbers
题目链接 http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemId=1398 题意: 输入t 有t个测试用例每个测试用例第一行输入三个数n, ...
- 天兔(Lepus)监控系统慢查询分析平台安装配置
被监控端要安装pt工具 [root@HE1~]## yum -y install perl-IO-Socket-SSL [root@HE1~]## yum -y install perl-DBI [r ...