E-mail Alert Rss
 

物探与化探, 2018, 42(5): 1069-1075 doi: 10.11720/wtyht.2018.1560

方法研究·信息处理·仪器研制

基于SVG格式进行MapGIS图形转换

杨金政1,2, 邱崇涛1,2, 陈鹏1,2

1. 核工业航测遥感中心,河北 石家庄 050002

2. 中核集团公司铀资源地球物理勘查技术中心 重点实验室,河北 石家庄 050002

The graphics conversion of MapGIS format based on SVG

YANG Jin-Zheng1,2, QIU Chong-Tao1,2, CHEN Peng1,2

1. Airborne Survey and Remote Sensing Center of Nuclear Industry,Shijiazhuang 050002,China

2. CNNC Key Laboratory for Geophysical Exploration Technology Center of Uranium Resource,Shijiazhuang 050002,China

收稿日期: 2017-12-13   修回日期: 2018-05-22   网络出版日期: 2018-10-05

Received: 2017-12-13   Revised: 2018-05-22   Online: 2018-10-05

作者简介 About authors

杨金政(1982-),男,硕士,工程师,主要从事航空、地面物探数据处理与解释工作。Email:149120592@qq.com 。

摘要

图件绘制是开展多学科、多途径的地质科学研究的重要手段之一。文中提出利用SVG作为纽带,进行不同成图软件间的图形转换的解决方案;介绍了SVG图元要素的构成与属性,并与MapGis图元进行了比对,着重对不同颜色空间的转换与对比方法和SVG与MapGis格式之间的相互转换过程进行了详细阐述,并提供了Python部分实现代码。实践表明,基于SVG格式进行图形转换,具有通用性强、效率高等优点。

关键词: SVG ; MapGis ; 图元属性 ; 图形转换 ; Python

Abstract

Map drawing is one of the important means for researching geological science with multidisciplinary and multipurpose.It has drawn up a solution that the graphics exchange is carried out between the different kinds of mapping software used by SVG.Structures and attributes of graphic entities are described in comparison with MapGIS.Conversion and comparison between various color spaces and processing between SVG and MapGis are described in detail.The related codes of Python are partly presented.Practice shows that the conversion method has the advantages of higher precision,strong commonality and higher efficiency.

Keywords: SVG ; MapGIS ; attribute of graphic entity ; graphics conversion ; Python

PDF (3688KB) 元数据 多维度评价 相关文章 导出 EndNote| Ris| Bibtex  收藏本文

本文引用格式

杨金政, 邱崇涛, 陈鹏. 基于SVG格式进行MapGIS图形转换. 物探与化探[J], 2018, 42(5): 1069-1075 doi:10.11720/wtyht.2018.1560

YANG Jin-Zheng, QIU Chong-Tao, CHEN Peng. The graphics conversion of MapGIS format based on SVG. Geophysical and Geochemical Exploration[J], 2018, 42(5): 1069-1075 doi:10.11720/wtyht.2018.1560

0 引言

在地质与物化探研究工作中,图件绘制是有机组成部分,在开展多学科、多途径的地质科学研究中,都要运用地图表达研究成果[1]。随着计算机技术的迅猛发展,各种商业绘图软件迅速面世,计算机绘图已在地质领域得到了广泛应用。国外较著名的数据处理与成图软件包括Montaj Oasis、MapInfo、Surfer和Grapher等,而国内最为常用的是MapGis地理信息系统。

MapGis是武汉中地信息工程有限公司研制的具有自主版权的大型基础地理信息系统软件平台,包括数据采集、编辑整饰、图像配准、图库管理、空间分析、图形输出等内容的国土资源行业的通用软件[2],是国内地质、物探领域中应用最广泛的软件之一。MapGis虽然对AutoCAD、MapInfo和ArcGIS等软件提供了的DXF、MIF和SHAPE等格式的导入、输出,但对Surfer、Grapher等许多软件并未提供专门的转换模块。MapGis格式转换方法大多使用DXF、MIF和SHP 格式[3,4,5,6],以手工操作为主,也有利用MIF格式进行编程处理[7]。笔者从工作实践中发现,上述方法操作对于图面单一、图元数量较少的文件效果较好,但对于大文件且内容复杂等图形或图元则无法进行有效转换,甚至无法识别,如字符串会以图形形式出现并有丢失现象、转换的颜色偏差明显致使后期编辑工作量较大。笔者以SVG格式作为纽带,利用Python语言编写格式转换程序,从根本上解决了文字、颜色等问题,不受文件大小、内容的限制,简化了转换环节,减少后期编辑工作,适用于多个不同软件间的图形转换。

1 SVG简介

SVG是可缩放矢量图形(scalable vector graphics)的简称,是由W3C推荐的一种新的图形格式标准,采用XML描述二维矢量图形及矢量光栅混合图形的Web开发语言,实际上SVG就是XML的一种具体应用。SVG图像在放大或改变尺寸的情况下其图形质量不会有所损失,并可以用任何文本编辑器创建或编辑,与JPEG和GIF相比,尺寸更小且压缩性更强。SVG功能十分强大、规范也十分详尽,具体内容可登陆http://www.w3.org网站查询和参考赵改善“SVG:一种前景光明的地学绘图技术”[8]。近年来,也有不少研究人员利用XML技术开展了网络地图传输或网络地图绘制工作[9]

由Surfer、Montaj Oasis软件中导出的SVG格式,图元要素并未涉及所有的SVG图元,但文件结构是类似的,主要包括三部分:文件头、默认参数和图元信息。图元要素主要类型包括:path(路径)、polygon(区)、polyline(线)、text(注释)和pattern(图案)等,以<g>和 </g>标示;其中,Surfer绘制面元时,使用的是path图元,而Montaj Oasis使用的是polygon图元。此处列举了与MapGis转换有关的部分SVG图元属性(表1)。

表1   SVG中的部分图元属性示例表

属性path(路径)polygon(区)polyline(线)text(注释)
stroke颜色
none(默认值)
“Hex颜色值”
none(默认值)
“Hex颜色值”
none(默认值)
“Hex颜色值”
none(默认值)
fill填充色“Hex颜色值”“Hex颜色值”nonenone“Hex颜色值”
stroke-width宽度“数值”“数值”“数值”
位置坐标d=“x,y坐标值”points=“x,y坐标值”points=“x,y坐标值”x=“x坐标值” y=“y坐标值”
stroke-dasharray虚线“数值, 数值”
font-family注释字体字体名称,如:“Arial” “宋体”
font-size注释大小“数值”
rotate注释角度角度值(°)

注:“数值”、“坐标值”单位为Surfer中设置的单位(厘米或英寸)

新窗口打开| 下载CSV


表1可看出:SVG颜色系统、线型、注释字体、计量单位与MapGis的属性设置存有差异,而颜色可通过RGB颜色空间进行转换处理。

2 Python简介

Python是一种面向对象的解释性的跨平台高级计算机语言,具有语法简单、可移植性强的特点,所以程序编写具有耗时少、程序短、易于阅读的优点。同时,它还是一种通用性语言并具有极为丰富的类库,可应用于数据库、多媒体、科学计算、网络、游戏等诸多领域。正因为Python具有强大的科学计算、绘图功能以及具有丰富的地图绘制、地理空间数据的处理与转换类库[10],最著名arcGIS地理信息系统也以它作为其脚本语言,本程序中就引用了NumPy(数值计算)、Shapely(二维图形处理)、colorMath(颜色计算)、SVGWrite(SVG的写入)等第三方类库。

3 图元要素分析

Surfer是美国Golden Software公司出品的一套功能强大的2D、3D成图软件,拥有多达12种数据网格化方法,可识别多达30种图文件格式,另外还可完成多种形式滤波和自定义滤波,以及相关的数据统计、数据分析等工作[3],具有成图迅速,图面美观,细节丰富的特点,广泛应用于地质、物探等工作中。本节以Surfer为例,进行图元要素的分析。

由于MapGis和Surfer之间的线型库、图案库、颜色值、字体等存有一系列差异,所以在图形转换时,使二者相互对应,尽可能地保持原貌或者利于编辑。

3.1 颜色

色彩是地图学中最基本的图形要素之一,是图形设计中需要特别注意的一种视觉变量,一方面是由于它具有美学上的优点,更重要的是它具有增加清晰性的效果[11]

3.1.1 MapGis颜色值的输出

SVG采用的是16进制Hex颜色值,Surfer采用的RGB颜色值,而MapGis则以CMYK颜色值为基础,建立自己的专用颜色库。为了解决色彩统一的问题,必须建一个颜色值索引表,记录MapGis颜色值对应的Hex、RGB颜色值(表2)。大多数情况下,MapGis颜色库中颜色值均有重复现象,可通过Hex颜色值的比对去除重复项,提高颜色配比速度。

表2   不同格式颜色值的对比

MapGis专用颜色值Hex颜色值RGB颜色值
1#000000(0,0,0)
2#00ffff(0,255,255)
3#ff00ff(255,0,255)
4#ffff00(255,255,0)
5#0000ff(0,0,255)
6#ff0000(255,0,0)
7#00ff00(0,255,0)
9#ffffff(255,255,255)

新窗口打开| 下载CSV


3.1.2 MapGis色库的定义

CMYK是印刷油墨形成的颜色空间,色彩不如RGB色丰富饱满;从理论上讲,当RGB与CMYK颜色空间转换时,无法做到绝对的一一对应,不同方法间往往存有一定的色彩差异。设置MapGis的色库首先要求得CMYK值,可采用以下两种方法:① 公式法;② 借助PhotoShop软件。

RGB与CMYK转换方法和计算公式参照文献[11]。Python程序代码如下:

def rgbtocmyk(myRGB):

#myRGB 类型为tuple 或list

r1,g1,b1=(x/255.0 for x in myRGB)

K=1-max(r1,g1,b1)

C=(1-r1-K)/(1-K)

M=(1-g1-K)/(1-K)

Y=(1-b1-K)/(1-K)

return (C,M,Y,K)

通过PhotoShop软件进行RGB与CMYK值的转换,可参见秦林江“Surfer与MapGis图件相互转换的几个问题”[4]。经计算验证,无论何种方法,当K值贡献较大时,转换结果与MapGis提供的值都将会存有一定色彩偏差。

3.2 图形尺寸

由于在Surfer中数据采用的单位是英寸或厘米,而在MapGis中默认单位是毫米, 所以在SVG图形中的坐标值、注释尺寸、线宽等数值注意单位换算,保证输出图形、图元尺寸与原图一致。

3.3 注释字体

MapGis中分为中文字体和西文字体,只包括宋体、仿宋、黑体、楷体等,分别用“1”、“2”、“3”、“4”数字表示;Surfer字体很丰富,也基本上可以原样将注释导出到SVG图形中。在MapGis转换时必须字体进行调整,并修改注释字体编号,如SVG图形的“宋体”改为“1”,“黑体”、“Arial”为“3”。MapGis、Surfer中注释角度单位为度,逆时针旋转为正;而SVG图形同样以度为单位,但顺时针旋转为正,转换时乘以-1即可。

3.4 填充图案、线型、符号

Surfer中导出SVG图形时若存有填充图案,大多为base64编码格式,在Python中有专门的模块可以解析,但在MapGis6.7中仍无法利用。由于MapGis花纹库大多由用户自定义产生,不同库间差别较大,而Surfer、SVG、Coredraw等中也未预设地质类花纹,所以笔者认为花纹应在格式转换后,再进行手工填充、编辑。

由Surfer中导出线型只有实线和虚线(包括颜色、线宽等)均可以很好的识别(虚线为一条整线),并可以导入MapGis中,而其他特殊线型,如铁路、公路,导出效果不佳。

符号在Surfer中称作“点(point)”,在MapGis中称作“子图”。由于二者使用的“图库”不同,所以无法直接转换。所以,需要建立一个子图对应表。

3.5 坐标系统

SVG的坐标系统的坐标原点位于左上角,X轴和笛卡尔坐标系的X轴相同,但是Y轴则与之相反[12],即SVG中的图形数值增加时其位置往下延伸,转换时可使用transform=“scale(1,-1)”参数进行变换。

4 由SVG转为MapGis格式

在我国,地质资料管理部门大多要求提交MapGis格式文件,各种标准、规范都是针对此格式制定的,因此需要把其他软件所制图件转换为MapGis格式进行归档。

4.1 计算流程及说明

以Surfer软件为例,SVG格式转换程序分为两个模块(图1)。

图1

图1   程序计算流程


4.1.1 颜色对应表的建立

MapGis启动时,需调用MapGis系统库(Slib);不同系统库对颜色、子图、线型的编号、样式均不同,所以在数据转换时,首先建立相应的对应表。由于不同软件中的线型、子图、花纹无法直接引用,所以此处只能建立颜色间的对应关系。具体操作步骤如下:

1)按顺序生成色表,仅保存面文件(wap格式);由于MapGis中“输出色表”未按颜色编号顺序生成,所以此时需要编写相应代码。

2)MapGis中图形处理—文件转换,加载面文件,导出MIF格式。

3)提取MIF格式文件的颜色值并换算RGB值,与MapGis颜色值对应。

MIF格式文件为24位10进制的RGB值,而SVG使用的是24位16进制的RGB值。此处需要两次转换,一是将10进制RGB数据转换为16进制RGB数据,二是将24位RGB数据转换为RGB值。代码如下:

def hex2rgb2(hexColor):

#24位RGB数据转换为RGB值

rgb=((hexColor>>16) & 0xff,

(hexColor>>8) & 0xff,

hexColor & 0xff)

return rgb

MapGis颜色库建立好后,重新生成颜色值索引表。

4.1.2 格式转换

MapGis软件提供了点、线、面的明码格式,在随机帮助中有详细说明,不再赘述。格式转换就是提取SVG文件中的图元信息,进行分类并改写为MapGis 的数据格式(wat、wal和wap)。

系统间颜色比对是程序的关键。HSV颜色空间由色调、饱和度、亮度三个分量构成;相对于RGB空间,能够非常直观的表达色彩的明暗、色调及鲜艳度,方便进行颜色对比。可通过两种HSV颜色值之间的欧几里得距离(欧式距离)判定其相似度。也就是说,将给定的SVG图元颜色在MapGis颜色库中搜索最近的颜色值,并给出相应的MapGis颜色编号,Python的实现代码如下:

def color_dist(c1,c2):

a2=rgb_to_hsv(*[x/255.0 for x in c2]) #将RGB颜色空间转换为HSV颜色空间

a1=rgb_to_hsv(*[x/255.0 for x in c1])

return sum((a-b)**2 for a, b in zip (a1, a2)) #返回两个颜色值的距离(的平方)

def min_color_diff (color_to_match, colorLibs):

# colorLibs为MapGis中的颜色集合(数组),color_to_match为目标颜色值

#返回最近的颜色值

return min((color_dist(color_to_match,test),colorLibs[test]) for test in colorLibs)

程序最后生成了一个颜色差值列表(表3)。查看颜色的偏差情况(diffVaule),对于偏差较大的颜色,如表3中的“20.0170”项,根据表中的CMYK 和RGB值在MapGis色库中添加新颜色。调整好后,重新运行程序。

表3   颜色间对比及参数修改参照表(示例)

偏差值(diffVaule)/10-4MapGisCodeRGBCMYK备注
0.2442833245(151,255,69)(40.784,0.0,72.941,0.0)
0.01810(255,203,0)(0.0,20.392,100.0,0.0)
0.2075523235(87,146,255)(65.882,42.745,0.0,0.0)
0.4271861014(147,255,102)(42.353,0.0,60.0,0.0)
20.01701301(255,79,0)(0.0,69.02,100.0,0.0)需添加色值

新窗口打开| 下载CSV


4.2 转换效果

以江西省某地区音频大地电磁测量剖面及地质解释结果[13]为例来进行说明。

图2为该剖面AMT测量原始图件[13],由Surfer生成,等值线图采用了彩虹色色阶,共28级。

图2

图2   由Surfer生成原始图件的效果


图3是由程序直接转换的MagGis图件,图面未经任何修改。视觉上,两幅图的色彩差别完全可以忽略,渐进色的过渡也十分清晰、自然,未存在信息“缺失”现象。同时,也可看出推测断裂和构造裂隙带(虚线)以及部分字体存有一定差异。在MagGis编辑模块中,注释、虚线为一整体形式存在,均无字符、线段“拆解”现象,此时只需统改点、线参数等简单操作,便可获取一幅美观的MagGis最终图。

图3

图3   由Surfer图转换为MapGis格式的效果


5 由MapGis格式转为SVG

CorelDRAW是Corel公司出品的一款基于Windows平台的矢量绘图软件,因其具有优良和富有创造性的绘图功能以及表现效果的独特性而在各种专题地图的编制、美术、广告创意和出版界得到广泛的使用[14]。张璐等[15]对MapGis、Surfer数据到CorelDRAW数据的转换做了较详尽的阐述,具有较好的实用效果,但该方法操作较为繁琐,后期修改工作量较大。以SVG作为中间媒介进行MapGis文件转换,可避免字符、线段拆解、图元缺失,中文识别等问题,通用性和转换效率将会更高。

在Python中有专门模块可以直接写入SVG格式。本程序就是基于MapGis明码格式利用SVG-Write模块转化为SVG文件[16],可供CorelDRAW直接调用。对于其它软件,还可通过Inkscape软件进行转换格式,如WMF格式。由于图案填充(地质花纹)在CoreldRAW和Surfer中实现并不困难,但若建立一个较为完整SVG地质花纹库不仅耗时,同时还存在与其他软件匹配的问题,所以,此处参考邱崇涛等提出的方法[17],根据地质花纹生成的原理和方法,生成相应的填充花纹。填充方法如下。

1) CoreldRAW 文件格式:cdr、位图;操作:打开填充工具(Fill Tool)→图样填充(Pattern Fill)→全色(Full color)或位图(Bitmap)→装入(Browse)→加载cdr或位图文件→编辑参数。

2) Surfer 文件格式:srf、位图等;操作①Surfer中拷贝图案→Fill→Clipboard→编辑参数;②打开Fill→File…→加载位图文件→编辑参数。

图4为由MapGis格式转换为SVG文件后导入CoreldRAW后的效果图(地质花纹为后期填充),可以看出,除部分字体(由宋体变为了仿宋体)发生变化外,总体效果与图3极为相似。此处字体变化是由CoreldRAW引起的,若由Inkscape软件导入时,字体可保持原样。

图4

图4   由MapGis格式转换为SVG图形的效果


由MapGis格式转为SVG的过程与上述转换类似。不同的是,为了保证MapGis点文件中子图的正确转换,还需建立相应的子图对照表,可由SVGWrite直接绘出。例如,“〇”子图用Circle图元给出,“◎”子图用两个同心Circle图元。

6 结论

由于不同软件在处理数据、绘图功能上有其各自的优势,在实际制图工作中,数据处理人员往往使用多种软件,保证高效地绘制出能真实反映出实际地质情况且图面美观的图件,但同时也因资料归档、印刷出版等要求,需提供相应的文件格式。而SVG图形作为一种通用的矢量格式,可以有效地进行这些软件的相互链接,并尽可能保持了图件原貌。当然,由于不同软件中含有特有的图元属性,给图形数据的转换造成了一定的困难。从生产实践来看,只有结合各自工作情况,利用编程手段,才能有针对性地进行图形转换。笔者借鉴了同行们大量的宝贵经验,编写了此转换程序,目的是尽可能地保持图件的原始面貌,以降低数据处理和制图工作量。当然,此程序虽在诸多项目中取得较好的效果,但仍需不断改进完善,例如子图库的完善、复杂线型识别与绘制等。

The authors have declared that no competing interests exist.
作者已声明无竞争性利益关系。

参考文献

黎华, 崔振昂, 李方林 .

MapGis在地质学中的应用

[J]. 物探化探计算技术, 2003,25(1):50-53.

[本文引用: 2]

唐朝永, 易慧 .

VBA和MapGis在化探异常解释评价中的应用

[J]. 物探与化探, 2008,32(4):392-396.

Magsci     [本文引用: 2]

<p>化探异常下限的确定和图件的编制是化探异常解释评价工作最基础也是最关键的。笔者通过多年的探讨和实践,将VBA与MapGIS结合起来运用到化探异常解释评价工作中,取得了一些成效。文中,笔者以均值加2倍离差方法为例,探讨了运用VBA编程计算确定化探异常下限的基本思路和一般方法,详细介绍了离散点位数据图在MapGIS中直接成图的方法,指出了VBA与MapGIS在地矿行业中具有广阔的应用前景。</p>

孙中任, 甄凡玉, 赵雪娟 .

MapGis数据与Surfer数据相互转换的实现

[J]. 地质与资源, 2008,17(1):77-80.

[本文引用: 2]

秦林江 .

Surfer与MapGis图件相互转换的几个问题

[J]. 物探与化探, 2010,34(5):677-680.

Magsci     [本文引用: 2]

<p>随着计算机技术在地质与地球物理工作中的广泛应用,计算机绘图也显得越发重要。为了提高制图质量和效率,在实际工作中经常需要结合使用几种软件。笔者从地质绘图的角度出发,阐述了Surfer与MapGIS的一些基本特点及其在地质领域中的应用,由此引出Surfer与MapGIS转换的必要,详述了Surfer中srf图形与MapGIS格式图件之间相互转换的基本方法及步骤,着重讨论了在转换过程中需要注意的问题,并提出了相应的解决方法。</p>

欧阳宇望, 段晓君 .

MapGis与Surfer软件在绘制化探图件中的应用

[J]. 中国西部科技, 2009,33(8):14-15.

[本文引用: 1]

刘宜, 周浩 .

Surfer图件转换成MapGis图件的方法

[J]. 矿产勘查, 2011,2(5):612-614.

[本文引用: 1]

王身龙, 夏训银, 王建新 , .

Surfer 转MapGis图形文件格式的方法技术

[J]. 矿产勘查, 2011,2(4):434-437.

[本文引用: 1]

赵改善 .

SVG:一种前景光明的地学绘图技术

[J]. 勘探地球物理进展, 2002,25(6):47-54.

[本文引用: 1]

尹章才, 李霖 .

基于XML的地图表达机制研究

[J]. 武汉大学学报:信息科学版, 2007,32(2):135-137.

[本文引用: 1]

Bill Lubanovic. Python 语言及其应用[M]. 丁嘉瑞, 梁杰, 禹常隆,译.北京:人民邮电出版社, 2016.

[本文引用: 1]

吴金华, 杨瑾 . 地图学[M]. 北京: 地质出版社, 2011.

[本文引用: 2]

蒋红燕, 杨哲海 .

地理信息从SHP格式向SVG格式的转换

[J]. 测绘通报, 2011,2:73-80.

[本文引用: 1]

邱崇涛, 武永强, 字勇 .

江西省全南县响坝、贵溪县浪港地区物探测量

[R]. 核工业航测遥感中心, 2010.

[本文引用: 2]

叶春, 隋振民 .

基于CorelDRAW软件的地质图制作

[J]. 世界地质, 2008,27(2):233-238.

[本文引用: 1]

张璐, 周新鹏, 靳职斌 , .

MapGis、Surfer数据到CorelDRAW数据的转换技巧

[J]. 工程地球物理学报, 2015,12(4):561-570.

[本文引用: 1]

Chad A. Learning Python data visualization [M]. Birmingham: Packt Publishing Ltd, 2014.

[本文引用: 1]

邱崇涛, 全旭东, 郭兴红 , .

地质花纹的生成与应用

[J]. 物探与化探, 2014,38(3):595-00.

[本文引用: 1]

/

京ICP备05055290号-3
版权所有 © 2021《物探与化探》编辑部
通讯地址:北京市学院路29号航遥中心 邮编:100083
电话:010-62060192;62060193 E-mail:whtbjb@sina.com