宋香平,段动宾,张桥梁
(河南理工大学 测绘与国土信息工程学院,河南 焦作 454000)
基于Arcpy专题地图批量制作方法
宋香平,段动宾,张桥梁
(河南理工大学 测绘与国土信息工程学院,河南 焦作 454000)
为解决传统的专题地图制作过程存在作业效率低、重复性高等问题,提出运用Python脚本语言中Arcpy站点包对专题图制作方法进行改进。在制作地图模板的基础上,引用专题变量库,并运用Arcpy对专题要素的引用、图层符号化与渲染、地图整饰要素的调整与修改、批量出图等环节进行整合与方法改进,形成批量处理的流程化制作新工艺。以新郑市土地生态评估专题图制作为例进行试验应用,实现流水化制图作业,该方法比ARCMAP更加自动化,更少人工干预。
Arcpy;地图模板;专题变量库;专题地图
专题图是将地图专题要素和基础地理信息要素[1],按照一定的比例尺、数学法则,以符号、色彩、注记等形式表示在图面上的一种地图形式。与普通地图相比,专题图仅将某一种或几种相关联的要素在地图上突出表达,其他要素则次要显示,甚至某些要素根本不予表示[2]。专题图可以突显事物某种特性的分布以及随时间变化特征,被广泛应用到土地资源管理与土地规划、城市建设和规划、环境保护、土壤生态及农业等领域。传统的制作方法在数据选取、边框制作、地图符号选取和制作、图面注记、图例设置等过程中存在作业量大、重复性高、效率低、自动化程度低等问题[3]。因此,研究专题图自动化制作的方法具有重要意义。
近些年,国内已有学者对批量制图技术做了研究。余咏胜等利用Arcpy将影像分幅自动添加到地图模板上,并自动修改标题信息,实现了影像地图自动制作[4];陈志军等提出制作系列地图的解决方案,运用Arcpy实现系列地图批量出图[5];仇逸清等利用Arcpy提取钻孔数据生成矢量点和线,实现地质剖面的绘制[6]。但这些研究均未解决多种专题要素自动化制图问题[7]。因此,本文在研究基于Arcpy的地图渲染技术和地图整饰自动调整方法[8]的基础上,整合ARCMAP中制图的各个零散环节,利用已有的批处理程序语言编制出适合的流水化作业程序和工艺流程。在分析专题数据特点的基础上,建立专题变量库[5,8],并详细阐述专题地图注记过程、数据自动更新、专题数据的符号化以及地图整饰和批量输出的具体实现过程。
Arcpy是Python语言的一个站点包[9-11],主要由地理处理工具、基本函数、基本类、内部模块组成。制图模块(Arcpy.mapping)[12]作为Arcpy站点包的一部分,是其制图的核心模块。本研究是在“地图模板+专题变量库”制作方案的前提下进行的,并根据相关要求和标准制作地图模板。图1为具体技术流程。
图1 专题地图自动化制作技术流程
1.1 地图模板
地图模板应根据实际应用选取适当的基础地理信息要素,如水系、交通线、行政区界线等。模板制作前首先按照设计要求定义地图投影,在ARCMAP布局视图里设置纸张大小,确定图名、图例、比例尺、指北针等页面布局元素的位置。
1.2 专题变量库建立
专题变量库主要由专题数据、符号化基准图层以及地图整饰要素信息三部分组成。专题数据是通过搜集、评估、分析等获得的矢量和栅格数据;符号化基准图层是一系列专题地图符号化的样板图层,包含预设置的属性信息和符号系统;地图整饰要素信息主要是不同专题地图的页面布局元素的变量信息,如标题内容、图例大小与位置等。专题变量库是专题图自动化制作的基础。
专题变量库的建立步骤:
1)专题数据准备、符号化基准图层制作、地图整饰要素属性信息获取。专题数据准备工作主要包括数据搜集、分析、数据格式转换等;符号化基准图层制作是实现批量渲染的前提,应根据专题数据的特点和制图要求,设计图层的符号系统、选择合适的渲染方式等;地图整饰要素属性信息的获取,应根据制图要求和图面范围,合理布设各个元素,避免各元素之间相互压盖问题,例如图例元素位置以及长宽最大值。
2)数据分类入库。根据专题数据的特点和制图表达要求进行分类,每一类对应一种渲染方法,同时对应一个符号化基准图层。数据分类入库是专题数据准确引用的重要前提。
3)数据库检查。主要检查各类专题数据和符号化基准图层的数量、属性等。
2.1 专题数据图层的自动更新方法
2.1.1 几种基本对象
地图文档对象(MapDocument):地图文档对象包含地图文档的页面大小属性、标题属性以及保存和另存为方法等。通过引用地图文档对象,可访问MXD文件的数据框、图层以及页面布局元素等属性。
数据框对象(DataFrame):一幅地图根据需求可包括若干个数据框[10],数据框所有操作是在布局视图里进行的。通过引用数据框对象的属性和方法,可实现数据框的复制、尺寸设置、位置调整等功能。
图层对象(layer):图层对象提供了对图层属性的访问以及图层操作的方法。因数据格式的不同,地图文档包含的图层类型也不相同,如要素图层、栅格图层、图层组、注记要素层、尺寸要素层以及少数数据集。不同类型的图层对象包含的属性也不相同,如栅格图层不支持定义查询而要素图层支持,因此,在对图层的属性进行获取或设置前,需运用supports方法判断图层与属性的支持关系。
2.1.2 专题数据的自动更新
制图模块包含很多类和函数,但仅允许向数据框中添加图层文件(.lyr)。Arcpy提供了MakeRasterLayer_management和MakeFeatureLayer_management两个工具函数,可创建临时图层文件,方便将栅格和矢量数据自动加载到地图文档数据框中。核心代码如下:
rasterlist = arcpy.ListRasters() #创建专题数据列表
for fc in rasterlist: #专题数据列表遍历
layer=arcpy.MakeRasterLayer_management(fc, fc.split(‘.’)[0])[0]
arcpy.mapping.AddLayer(df, layer, ”AUTO_ARRANGE“)
layer.saveACopy(workspace + ‘/’ + fc.split(‘.’)[0]+ “.lyr”)
2.2 专题数据图层渲染与符号化
专题数据分为矢量数据和栅格数据两种。为了实现专题数据渲染和符号化的自动化,笔者在引用图层对象的基础上,利用符号化基准图层更新专题数据图层的符号系统。利用GraduatedColorsSymbology 和GraduatedSymbolsSymbology 类完成矢量数据图层分级色彩系统和分级符号系统的各种属性的设置;通过RasterClassifiedSymbology 类实现图层的栅格分类符号系统属性的设置。
2.2.1 栅格数据渲染
ArcMap提供了很多栅格数据的渲染方法,如拉伸、分类、唯一值、离散颜色等。标准差方法拉伸渲染适用于正态分布的数据;自然间断点分级法分类渲染是通过查找数据值差异,使用统计方法确定分类间隔[12]。通过遍历专题变量库,将专题数据自动添加到地图文档的数据框中,然后利用UpdateLayer函数对专题数据层进行符号系统更新,以实现专题数据的拉伸或分类渲染。以下为实现功能的核心代码:
for raster in rasterlist:
layer=arcpy.MakeRasterLayer_management(raster,raster.split(‘.’)[0])[0]
arcpy.mapping.AddLayer(df, layer, “BOTTOM”)
updateLayer = arcpy.mapping.ListLayers(mxd, “, df)[-1]
sourceLayer = arcpy.mapping.ListLayers(mxd, ”, df)[-2]
arcpy.mapping.UpdateLayer(df, updateLayer, sourceLayer)
2.2.2 矢量数据符号化
与栅格数据渲染的不同之处在于矢量数据可以对单一属性表的多个字段进行符号化,在符号化过程中需要选取欲表达的字段。实现矢量数据批量符号化的解决思路是通过引用GraduatedColorsSymbology 或GraduatedSymbolsSymbology类确定欲表达字段,利用符号化基准图层对矢量数据图层的符号系统进行更新。但是不同要素类的属性表所包含的字段不尽相同,为了满足不同要素符号化,笔者通过Python语言编写脚本程序,将脚本添加到ArcGis工具箱中创建交互式对话框,方便选择要素属性表的欲表达字段。
实现核心代码如下:
if lyr.symbologyType == “GRADUATED_COLORS” or “GRADUATED_SYMBOLS”:
for field in fieldlist:
lyr.symbology.valueField = field.name
arcpy.mapping.UpdateLayer(df, lyr, sourceLayer)
lyr.symbology.numClasses = numClasses
arcpy.RefreshActiveView()
arcpy.RefreshTOC()
mxd.saveAs(env.workspace + field.name +‘.mxd’)
2.3 地图整饰与批量输出
2.3.1 地图整饰
地图整饰要素主要包括标题、边框、图例、插图、指北针、比例尺、其他文本以及数据源信息。Arcpy的制图模块提供了DataFrame、GraphicElement、LegendElement、TextElement、MapsurroundElement等类,可以完成页面布局元素对象行为的控制。通过设置ListLayoutElements函数的参数构建不同页面布局元素的列表,引用其内部对象的属性和方法,实现页面布局元素的操作。以图例自动修改为例,笔者编写anchor_point()和auto_adjust()函数,分别解决图例锚点位置和固定框下图例自动调整大小的问题。auto_adjust()函数中,parameters为图例高与宽比例,Width_limit与Height_limit分别为宽高的限值,以下为其核心代码:
#---按照固定比例自动调整图例大小----#
def auto_adjust(parameters):
legend=arcpy.mapping.ListLayoutElements(mxd, “LEGEND_ELEMENT”)[0]
while legend.isOverflowing:
legend.elementWidth=legend.elementWidth + 0.1
legend.elementHeight=parameters * legend.elementWidth
if legend.elementWidth>Width_limit-0.3 or legend.elementHeight>Height_limit-0.3:
while legend.isOverflowing:
removelyr=listLegendItemLayers()[-1]
legend.removeItem(removelyr)
break
return legend.elementWidth, legend.elementHeigh
2.3.2 专题地图的批量输出
在专题地图输出前,应通过地图文档对象的saveAsCopy方法对处理后的专题地图另存到MXD文件中,以方便后期的修改或查看。Arcpy提供了很多函数如ExportToBMP、ExportToGIF、ExportToJPEG、ExportToPNG、ExportToTIFF、ExportToSVG等,能够导出不同格式和分辨率的栅格地图文件。
3.1 批量制图过程
实验通过利用新郑市第二次土地调查、土地利用变更调查、地球化学调查、农用地分等定级等数据源,借助 “3S”技术、地面调查、野外采样和农户调查等方法,对新郑市土地生态状况信息进行提取和评估[13-15]。根据评估指标数据制作专题图,表1为部分评估指标具体内容。
表1 评估指标数据
这里通过分析评估指标数据在新郑市地理空间上的分布状况来完成土地生态状况评估工作。因评估指标数据的多样性,在制图表达过程中,一些指标数据选取的符号系统和渲染方法也存在不同。建立专题变量库主要用来解决不同评估指标数据分类表达问题。首先,应将评估指标数据文件名标准化,方便MXD文件名称和图名修改;然后,根据符号系统和渲染方式将评估指标数据分类入库,这里主要按颜色分级渲染和拉伸渲染进行分类。
在ArcGIS环境下,按照实际要求制作专题地图模板,然后通过Python语言编写程序,引用地图文档对象和数据框对象将欲表达的专题数据自动加载到专题地图模板中,利用符号化基准图层批量更新专题数据层符号化系统,最后进行地图整饰并批量输出制图成果。图2为Python编写的流程工艺,图3为地图模板和成图效果。
图2 流程工艺
图3 地图模板与成图效果
3.2 分析与评价
从不同评估指标数据的成图结果分析,该方法能够满足系列专题图制作的要求。成图过程变化的要素主要包括图名、图例、图层渲染方式和颜色等。
图名:图名随着不同的评价指标而变化,与评价指标数据具有一致性;批量处理方法实现了图名自动修改,图名的修改内容源于矢量数据表的字段名和栅格数据文件名,这也是在专题变量库中按照制图要求对字段和栅格数据文件名进行标准化的主要原因。
图层渲染方式和颜色:根据专题图制图要求,不同评估指标数据可能选取的渲染方式和颜色也不相同,因此,将评估指标数据按颜色分级渲染和拉伸渲染进行分类入库是图层批量渲染的基础。
图例:在批处理过程,图例内容会有变化,导致图例可能压盖数据框内容和边界,通过这种制图工艺实现图例动态调整图例内容、图例大小、固定图例位置等功能,使得图例的大小协调,位置合适。
1)专题地图制作是个繁琐的作业过程,很难实现全部自动化,笔者仅仅是从表达数据要素中寻找共性,进行分类批量处理,达到节省人力和作业时间的目的。
2)整合了ARCMAP中制图的各个零散环节,利用已有的批处理程序语言编制出适合的流水化作业程序和工艺流程,实现比ARCMAP更自动化、更少人工干预进行专题地图的制作和输出。
3)仍有不足之处,比如制图的渲染颜色过于单调,对于不同分布评价指标数据效果不佳,导致一些评估指标专题图的符号系统未能满足要求,需人工修改。因此,要实现更好的制图效果,更加自动化,仍需作进一步探索。
[1] 何静,邹峥嵘,曾毅.土地调查专题图件的制作[J].测绘科学,2012,37(2):66-68.
[2] 邓跃明,翟娅娟,刘治枝.基于 MapInfo的专题地图制作[J].测绘通报,2001(7):17-18.
[3] 潘燕.一种基于 GIS 的专题地图制作模式[J].测绘通报,2005(9):38-40.
[4] 余咏,彭艳丽,尹言军,等.基于Arcpy 的影像地图自动处理技术研究[J].测绘通报,2015(3):82-85.
[5] 陈志军,陈建国.系列地图批处理自动成图解决方案-以勘查地球化学系列图为例[J].地质学刊,2013,37(3):456-464.
[6] 仇逸清,宋仁波.基于GIS 和ArcPy 的地质剖面半自动绘制方法[J].工程勘察,2015(5):64-68.
[7] 徐京华.专题地图制作技术与方法探讨[J].测绘通报,2003(3):46-48.
[8] 何学洲,顾学明,景祥.地理信息元数据驱动的地图整饰技术研究[J].测绘科学技术学报,2014,31(5):543-546.
[9] 戴立乾,高鹏叶,海翔.浅析Pyhton语言在县级坡度分级图制作中的应用[J].安徽农业科学,2009,37(23):11324-11327.
[10] 汤国安,杨昕.ArcGIS地理信息系统空间分析实验教程[M].2版.北京:测绘科学出版社,2012.
[11] PIMPLER E.2013.Programming ArcGIS 10.1 with Python Cookbook[M]. Brimingham, UK: Packt Publishing.
[12] Esri.ArcgGis帮助文档(10.2、10.2.1和10.2.2)[DB/OL].http://resources.arcgis.com/zh-CN/help/main/10.2,2014-5-15.
[13] 戴靓,姚新春,周生路,等.长三角经济发达区金坛市土地生态状况评价[J].农业工程学,2013,29(8):249-255.
[14] 张利,陈影,王树,等.滨海快速城市化地区土地生态安全评价与预警-以曹妃甸新区为例[J]. 应用生态学报,2015,26(8): 2445-2454.
[15] 黄海,刘长城,陈春.基于生态足迹的土地生态安全评价研究[J].水土保持研究,2013,20(1):193-201.
[责任编辑:郝丽英]
The method of making thematic maps in batch based on Arcpy
SONG Xiangping, DUAN Dongbin, ZHANG Qiaoliang
(School of Surveying and Land Information Engineering, Henan Polytechnic University, Jiaozuo 454000,China)
To solve the problem of low efficiency and high repeatability in process of producing thematic map traditionally, the Arcpy site package of Python is used to improve the method of making thematic map. On the basis of the map template made beforehand, the thematic variable database is used. Arcpy is used to improve the method and consolidate links, such as citing thematic elements, rendering and symbolizing the thematic data, adjusting dynamically the content and layout of the elements of decorating map. A new technology of batch processing streamline production takes shape. Assessing the land ecology in Xinzheng is taken as the case. At the same time, the experiment application is conducted. The streamline operation is realized, with more automatic than ARCMAP, and less artificial intervention.
Arcpy; map template; thematic variable database; thematic map
10.19352/j.cnki.issn1671-4679.2017.02.008
2016-08-22
河南省基础与前沿技术研究计划(自然科学基金)项目(112300410283);国土资源部土地资源调查评价类项目(1211410781016)
宋香平(1990-),女,硕士研究生,研究方向:地图制图;GIS开发与应用.
P283.7
A
1671-4679(2017)02-0036-06