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语 ...
随机推荐
- POJ 1696 Space Ant
极角排序 每次选择一个最外围的没选过的点,选择的时候需要利用极角排序进行选择 #include<cstdio> #include<cstring> #include<ve ...
- java工程师联通XX面试题目
什么是“长连接”和“短连接”? 所谓短连接指建立SOCKET连接后发送后接收完数据后马上断开连接,一般银行都使用短连接解释2长连接就是指在基于tcp的通讯中,一直保持连接,不管当前是否发送或者接收数据 ...
- Classification of text documents: using a MLComp dataset
注:原文代码链接http://scikit-learn.org/stable/auto_examples/text/mlcomp_sparse_document_classification.html ...
- (简单) POJ 3169 Layout,差分约束+SPFA。
Description Like everyone else, cows like to stand close to their friends when queuing for feed. FJ ...
- 五、Hive
一.Hive 1.1 Hive简介 1.2 Hive说明 1.3Hive的体系架构 来自为知笔记(Wiz)
- 无法访问 ASP 兼容性模式
<%@ Page Title="" Language="C#" MasterPageFile="../theme/classic/content ...
- laravel安装excel功能
原文安装链接:https://github.com/Maatwebsite/Laravel-Excel 代码如下: if ($rows = DB::connection('glist')->ta ...
- iOS开发——生成条形码,二维码
- (void)viewDidLoad { [super viewDidLoad]; self.imageView.image = [self generateBarCode:@"15248 ...
- 【转】20条Linux命令面试问答
问:1 如何查看当前的Linux服务器的运行级别? 答: ‘who -r’ 和 ‘runlevel’ 命令可以用来查看当前的Linux服务器的运行级别. 问:2 如何查看Linux的默认网关? 答: ...
- pageX,clientX,screenX,offsetX区别
pageX/pageY:鼠标相对于整个页面的X/Y坐标.注意,整个页面的意思就是你整个网页的全部,比如说网页很宽很长,宽2000px,高3000px,那pageX,pageY的最大值就是它们了.特别说 ...