MapGIS地学数据和符号库的ArcGIS转换方案
吴新强, 周娅, 王如意, 张会兵, 秦兴国
桂林电子科技大学计算机科学与工程学院,桂林 541004
通信作者:周 娅(1966-),女,教授,研究方向为数据库、地理信息系统及应用等。Email: ccyzhou@guet.edu.cn

第一作者简介: 吴新强(1989-),男,硕士研究生,主要研究的方向为海量数据处理、地理信息系统及其应用。Email: wuxinqiang819@163.com

摘要

为了在MapGIS和ArcGIS平台之间进行数据共享,提出了从MapGIS到 ArcGIS的地学数据和符号库转换方案。基于MapGIS和ArcGIS Objects开发包进行二次开发,将地质符号库通过MapGIS软件导出为对应的可扩展标记语言(extensible markup language,XML),解析并符号化成相应的符号库; 将地学数据转换为shapefile文件,并生成保存有渲染信息的工程文件(.mxd)。最终通过程序化实现从 MapGIS平台到ArcGIS平台的地学数据及符号库的转换。

关键词: MapGIS; ArcGIS; 转换; 符号库; MXD文件
中图分类号:TP 311 文献标志码:A 文章编号:1001-070X(2015)04-0183-06 doi: 10.6046/gtzyyg.2015.04.28
Conversion of data and symbol library from MapGIS to ArcGIS
WU Xinqiang, ZHOU Ya, WANG Ruyi, ZHANG Huibing, QIN Xinguo
Computer Science and Engineering Guilin University of Electronic Technology, Guilin 541004, China
Abstract

In order to attain data sharing between MapGIS and ArcGIS system, this paper puts forward a scheme which realizes the conversion of geological data and geological symbol library from MapGIS to ArcGIS. On the basis of MapGIS and ArcGIS Objects for secondary development, geological symbol library exports the corresponding file as XML by MapGIS software. XML is analyzed and symbolized into the corresponding symbol library. Geological data are converted into shapefiles, with the generation of engineering (MXD) files which save the render information. The conversion of geological data and geological symbol library from MapGIS platform to ArcGIS platform can be finally realized by programming.

Keyword: MapGIS; ArcGIS; conversion; symbol library; MXD file
0 引言

在地理信息系统(GIS)中, 能实现不同平台之间数据的转换, 对日后数据共享是至关重要的。目前我国国土资源部门大多数单位主要使用国产MapGIS软件, 很多GIS数字资料的数据加工、建库工作都是基于MapGIS平台实现的[1]。而美国ESRI公司的旗舰产品ArcGIS则占领着当今国际地理信息系统的主要市场, 该系统在对空间数据库开发、一体化管理方面具有独特的优势。近年来, 我国许多国土资源信息的数据变更、数据应用都是在ArcGIS平台中进行的, 因此这2个GIS平台间的数据转换需求常遇而迫切[1]

目前市场上已有很多相关的转换软件, 由于MapGIS不支持OpenGIS标准, 虽然其本身提供了转换功能, 包括转换成ArcGIS支持的E00格式或者Shape格式等, 但还存在很多问题: 如属性丢失, 转换后属性都是缺省属性, 不能进行批量转换; 由于转换后地质符号库不匹配, ArcGIS会以默认的符号对图形进行渲染, 出现符号、注记及颜色丢失等现象。许多研究人员也通过不同的改进方式进行数据转换[1, 2, 3], 但均没有提及符号库的转换问题, 因此多数MapGIS用户在数据共享方面仍有不少障碍。

本文基于MapGIS SDK和ArcGIS Objects提供的COM组件进行二次开发, 实现了将MapGIS文件以及地质符号库转换到ArcGIS平台支持的文件格式, 解决了MapGIS文件数据到ArcGIS数据转换信息丢失问题, 实现了符号共享与符号库跨平台[4]的应用。

1 相关工作

将MapGIS数据转换成ArcGIS平台下支持的文件数据格式, 需要通过MapGIS提供的SDK开发包调用相应的接口实现MapGIS数据文件的读取, 再通过ArcGIS提供的Objects开发包调用相应的接口实现数据向目标文件的写入和生成。2个GIS平台的数据格式不同, 其数据文件对照如表1[5]所示。

表1 MapGIS与ArcGIS数据文件对照 Tab.1 Data file comparison from MapGIS to ArcGIS
1.1 文件的数据格式

1.1.1 MapGIS源数据格式

1)MapGIS加密二进制格式(.wt, .wl, .wp)。MapGIS 数据格式的选择主要依据是该格式是否能包含所有的MapGIS所提供的属性信息, 即包括空间信息和属性信息。利用E00, shapfile等中间格式进行数据转换存在属性丢失等缺点。本文通过MapGIS开发包提供的接口读取MapGIS加密二进制格式文件的方式实现数据转换, 不经过第三方, 确保数据的空间对象图形坐标和属性值转换前后完全一致, 保证数据的正确性, 提高转换效率。

2)地质符号系统库格式(.lib)。在MapGIS平台下, 该格式用来存储地质符号(包括点符号、线符号、面符号)以及颜色库, 该地质符号系统库是地质符号转换的原始数据源。

3)可扩展标记语言(extensible markup language, XML)格式。由于MapGIS SDK没有提供可以读取系统库中符号的数据源的API, 所以使用XML文件存储符号库中的数据, 继而解析XML文件, 可以做到无属性丢失, 从而提高开发效率。

1.1.2 ArcGIS目标数据格式

1)shapefile文件格式(.shp)。ArcGIS数据格式的选择主要依据是该格式是否能保存MapGIS提供的所有信息, 即包括空间信息和属性信息。由于shapefile文件对于空间要素的存储方式是按照点、线、面进行存储的, 类似于MapGIS的数据存储结构, 同时也是MapGIS和ArcGIS都支持的中间文件, 故本文选择ArcGIS识别加载的shapefile文件数据格式来完成数据转换。

2)工程文件格式(.mxd)。shapefile文件无法渲染图形文件的颜色以及符号, 为避免属性信息丢失, 工程文件中不仅存储生成的shapefile文件信息, 还同时存储对shapefile文件进行渲染的信息。

3)图层文件格式(.lyr)。图层文件用来保存在ArcGIS中shapefile文件只保存了子图类点实体, 而没有被保存的注释类点实体, 故注释类点实体的渲染信息保存成图层文件。

1.2 系统框架

GIS数据转换系统框架如图1所示。

图1 系统框架Fig.1 System framework

1.3 开发环境

使用MapGIS提供的SDK以及ArcGIS提供的Objects和COM组件, 运用VC++语言对MapGIS数据源进行读取, 以及对ArcGIS平台下文件进行写入和保存; 再运用C#语言读取Access数据库, 并使用GDI函数符号化地质符号。

2 地质符号转换
2.1 MapGIS地质符号数据读取

通过MapGIS软件自身提供的功能, 将地质符号库转换为XML文件, 通过Dom4j解析器解析XML文件地质符号系统库[6], 并将解析数据存储在Access数据库中对应的SubGrapeb表、Line表及Reg表中。此XML文件中数据包括点符号、线符号和面符号, 但是不含有颜色库, 因此颜色库中的颜色信息是通过_GetAColorRGBValue()函数得到MapGIS颜色号对应的RGB值, 并存储在Access数据库中的color表中。

2.2 ArcGIS地质符号的符号化及管理

ArcGIS绘制新的符号要实现Symbol类, 故要实现相应的ISymbol接口、IPersist接口、IPersiststream接口和IClone接口, 所有的地学符号都必须继承以上4个接口并在此基础上进行开发。ArcGIS平台下提供了PictureMarkerSymbol接口和MultiLayerMarkerSymbol接口用于绘制MapGIS下的地质点符号, 但是也有很多在MapGIS下不能绘制的符号, ArcGIS提供了对其可以扩展的接口。本文选择自定义的MarkerSymbol[7], LineSymbol[8]和FillSymbol类实现ISymbol接口来绘制, 绘制方法主要运用GDI函数进行。

2.3 转换结果

地质点符号[9, 10]转换如图2所示, 其中包含有子图的大小、角度及子图号等信息。

图2 点符号转换对照Fig.2 Comparsion of point symbol conversion

3 文件数据转换
3.1 单文件数据转换

MapGIS 数据文件转换的主要步骤:

1)通过MapGIS SDK提供的API调用相应的函数, 创建相应类型的shapefile文件, 并读入MapGIS数据文件数据。

2)将读取的空间信息、属性信息数据存储在新建的shapefile中。shapefile中包含空间信息文件(.shp)、属性信息文件(.dbf)和索引文件(.shx)。

3)根据要转换数据文件的类型, 来调用相应的函数, 生成相对应的渲染文件并保存在工程文件MXD中, 但是注释文件的渲染信息则保存在图层文件(.lyr)中。

3.1.1 点文件转换

MapGIS点文件进行转换, 要获取到点文件的空间信息和属性信息。转换后会生成相应的shapefile文件以及相应的MXD文件。首先读取点文件中图元的个数以及属性; 其次判断点类型, 如果是注释类点实体会被直接删除并压缩存盘, 否则会把子图类点实体的具体属性写入shapefile 文件中; 最后创建一个工程文件(.mxd), 根据ID号来索引出shapefile文件中相应的字段对每个点实体渲染, 保存在MXD文件中。点文件中点坐标获取代码为:

IPointPtr ipPoint(CLSID_Point);

ipPoint-> put_X(xy.x);

ipPoint-> put_Y(xy.y);

IGeometryPtr ipGeom = ipPoint;

3.1.2 线文件转换

线文件的转换类似于点文件转换。进行MapGIS 线文件转换, 先要获取线文件的空间和属性信息以及点文件的空间坐标信息; 转换后会生成相应的shapefile 文件以及相应的MXD文件。不同的是线坐标点信息(x, y)写入的方式, 由于线文件是由点文件组成的, Point是指连续线每个线段端点的xy坐标, 所以线文件转换时先要获取线文件中起始点和终止点的坐标, 然后创建一个Line对象, 并设置Line对象的起始与终止点; 再创建一个Path对象, 通过ISegmentCollection接口为Path对象添加Segment对象; 最后创建一个Polyline对象, 通过IGeometryCollection为Polyline对象添加Path对象。部分代码如下:

ipPointFrom-> put_X(pDat[j-1].x);

ipPointFrom-> put_Y(pDat[j-1].y);

ipPointTo-> put_X(pDat[j].x);

ipPointTo-> put_Y(pDat[j].y);

ipLine-> PutCoords(ipPointFrom, ipPointTo);

pPath-> AddSegment(ipLine);

pPolyline-> AddGeometry((IGeometryPtr)pPath);

3.1.3 面文件转换

MapGIS面文件进行转换, 要获取面文件的空间信息和属性信息以及线文件和点文件的坐标信息。转换后会生成相应的shapefile文件以及相应的MXD文件。面符号转换过程与线文件转换过程类似, 面文件是分别由点文件以及线文件组成, Point是指多边形每个顶角的xy坐标; 区别在于面坐标点信息(x, y)写入的方式, 当线方向为正方向时, 坐标点的信息是从起点到终点; 当线方向为逆方向时, 坐标点的信息是从终点到起点, 这样就可以围成一个封闭的区域, 即由多条边围成的一个闭合的路径形成的一个面。

当面文件中线方向为正方向时的实现代码为:

ipPointFrom-> put_X(lxy[k-1].x);

pPointFrom-> put_Y(lxy[k-1].y);

ipPointTo-> put_X(lxy[k].x);

ipPointTo-> put_Y(lxy[k].y);

当面文件中线方向为逆方向时实现代码为:

ipPointFrom-> put_X(lxy[k].x);

ipPointFrom-> put_Y(lxy[k].y);

ipPointTo-> put_X(lxy[k-1].x);

ipPointTo-> put_Y(lxy[k-1].y);

ipLine-> PutCoords(ipPointFrom, ipPointTo);

pRing-> AddSegment(ipLine);

pPolygon-> AddGeometry((IGeometryPtr)pRing)

3.1.4 注记文件转换

注记文件的转换类似于点文件的转换, 不同的是注释类会删除子图类, 并生成注释类图层文件(.lyr)的写入方式。下面是生成.lyr 文件的注释点实体VC代码描述: 首先, 创建一个LayerFile对象, 并创建一个空白图层文件; 然后创建一个FeatureLayer对象, 将为其添加渲染数据源, 即生成的shapefile文件; 最后创建Layer对象和GeoFeatureLayer对象, 将渲染后的Layer对象替换空白的LayerFile对象。部分实现代码如下:

ILayerFilePtr layerFile(CLSID_LayerFile);

layerFile-> New((_bstr_t)layerPath);

IFeatureLayerPtr pFeatureLayer(CLSID_FeatureLayer);

pFeatureLayer-> putref_FeatureClass(ipShape);

ILayerPtr ipLayer(pFeatureLayer);

IGeoFeatureLayerPtr ipGeoFeatureLayer = ipLayer;

layerFile-> ReplaceContents(ipGeoFeatureLayer);

layerFile-> Save();

注释类文件[11, 12]中有些特殊注记内容需要处理, 如上下标(图中红色标注处), 倾斜等等。处理后点注记的DBF文件如图3所示, 图中Expression字段包含颜色、字体、大小、注记内容、上下标、空格、横竖方向、是否透明等渲染信息。

图3 点文件中注记类的DBF文件Fig.3 DBF file of annotate class file in point file

3.2 工程文件数据转换

MapGIS工程文件(.mpj)包含所有MapGIS文件的渲染信息和属性信息, 工程文件包含点文件(.wt)、线文件(.wl)和面文件(.wp)。转换时, 首先根据 _PRJGetItemType() 函数获取到文件的类型来判断图层文件是点文件、线文件还是面文件。

如果是点文件的话, 要利用PNTINFO.type来读取点符号的类型: 子图类型(PNT_SUB)和注记类型(PNT_NOTE)。本文采用的方式是将子图类实体和注记类实体分别存储在不同的图层文件中, 即一个点文件如果包含子图和注记, 会生成2个渲染图层文件。子图类型点实体转换操作为: 首先判断点文件中的点实体类型, 如果存在注记类型点实体, 就调用_DelPnt()函数删除, 并压缩存盘; 然后调用相应点文件转换函数ArcGIS ConvertPoint()生成相应的shapefile文件; 最后将渲染好的图层信息加载到工程文件MXD中。注记类型点实体转换操作为: 首先判断点文件中的点实体类型, 如果存在子图类型点实体, 就调用_DelPnt()函数删除, 并压缩存盘; 然后调用相应点文件转换函数ArcGIS ConvertAnnotate()生成相应的shapefile文件; 最后将渲染好的图层信息加载到图层文件(.lyr)中。

如果是线文件的话, 直接调用相应线文件转换函数ArcGIS ConvertLine()生成相应的shapefile文件, 将渲染好的图层加载到工程文件(.mxd)中。

如果是面文件的话, 直接调用相应面文件转换函数ArcGIS ConvertReg()生成相应的Shapefile文件, 将渲染好的图层加载到工程文件(.mxd)中。

4 转换结果

MapGIS文件转换成ArcGIS文件时, 所有文件都会转换到shapefile文件中保存, 对shapefile文件进行渲染后, 点文件、线文件和面文件会进一步保存为MXD文件, 而点文件中注释类点实体会转换成图层文件(.lyr)保存。

本文以广西某县的水文图作为转换数据源, 验证转换的正确性。转换结果如图4所示。

图4 从MapGIS 转换到ArcGIS的效果对比Fig.4 Effect figure of comparison of conversion from MapGIS to ArcGIS

广西壮族自治区容县水文图中裁剪的部分经过文件转换后, 分2种情况: ①转换中注记文件和颜色使用默认值渲染; ②转换中使用注记文件转换以及颜色使用CMYK向RGB转换的颜色值渲染。本文提供的地图数据文件转换方式基本实现了点、线、面和工程文件的转换, 但是存在注记、颜色以及符号等渲染信息丢失; 通过对比可以明显看出, 标注、颜色及图层都基本正确, 但点、线、面符号有明显丢失, 而渲染图层是用ArcGIS提供默认的点、线、面符号, 因此本文第二节地质符号转换将MapGIS平台下使用的符号库迁移到ArcGIS平台下, 从而可以使原来相应的符号在转换过程中渲染相对应的图层, 所以在转换后的图形文件中应用转换后的符号。通过对比图2图4可知, 本研究成果基本无损地实现了将地理图形数据从MapGIS平台迁移到ArcGIS平台下, 并且几乎没有丢失注记、颜色和符号等信息。

本研究开发的软件的稳定性以及实用性已在实际应用中得到验证, 达到了预期的效果, 但仍存在一些不足。如系统并不是一个涵盖国标符号的符号库, 仍然是一个局部使用的符号库。今后将会在研发跨平台的数据库管理系统方面开展深入研究, 实现符号库脱离GIS平台的束缚, 以达到真正意义上的跨平台数据共享。

5 结论

1)本文的方案实现了原有MapGIS数据到ArcGIS平台的准确转换, 保证数据和符号的真实性。在使用习惯沿袭和先进管理平台的优越性能2方面获得了双重收益。

2)针对不同GIS平台不能进行数据共享的难题, 实现了一个通用的标准绘图地学符号管理数据库, 并将此符号库系统封装成一个标准的动态链接库, 可以注册到任何标准的GIS平台中, 以此来解决ArcGIS提供的符号不能满足MapGIS下所有符号的需求, 从而使MapGIS到ArcGIS平台下地学图件数据的完美转换得以实现。

3)针对转换过程中文件的空间属性(坐标信息)、属性信息、颜色不一致的问题, 通过参数赋属性的方式进行解决, 从而避免了转换时属性丢失的现象。

4)专题数据库中系统库数量多且复杂, 大多数系统库存在一图一库的现象, 手工实现MapGIS符号库到ArcGIS符号库的转换需要耗费大量的人力、物力, 故地学符号库转换系统将MapGIS平台下的Slib系统库转换成ArcGIS平台下支持的Style符号库, 很好地解决了专题数据转换问题。

The authors have declared that no competing interests exist.

参考文献
[1] 任志远. MapGIS到ArcGIS数据转换方法的分析研究[J]. 苏州科技学院学报: 自然科学版, 2009, 26(3): 77-80.
Ren Z Y. Data conversion from MapGIS to ArcGIS[J]. Journal of Suzhou University of Science and Technology: Natural Science, 2009, 26(3): 77-80. [本文引用:3]
[2] 彭晶晶, 戴爱德. MapGIS数据向ArcGIS转换研究[J]. 国土资源信息化, 2008(1): 19-25.
Peng J J, Dai A D. Data conversion from MapGIS to ArcGIS[J]. Land and Resources Information, 2008(1): 19-25. [本文引用:1]
[3] 黄云. MapGIS向ArcGIS数据格式转换方法探讨[J]. 地矿测绘, 2010, 26(1): 33-35.
Huang Y. Data format conversion methods form MapGIS to ArcGIS[J]. Surveying and Mapping of Geology and Mineral Resources, 2010, 26(1): 33-35. [本文引用:1]
[4] 马建芳. 全矢量地质符号库的设计与实现[D]. 北京: 中国地质大学, 2013.
Ma J F. Design and Implementation of Full-vector Geological Symbol Database[D]. Beijing: China University of Geosciences, 2013. [本文引用:1]
[5] 范晓明. 跨GIS平台数据格式与地图符号转换[D]. 北京: 中国地质大学, 2009.
Fan X M. The Conversion of File Formats and Symbol Library Access GIS Platform[D]. Beijing: China University of Geosciences, 2009. [本文引用:1]
[6] Zhou Y, Wu X Q, Wang R Y. A semantic similarity retrieval model based on Lucene[C]//2014 5th IEEE International Conference on Software Engineering and Service Science(ICSESS 2014). Beijing: IEEE, 2014: 854-858. [本文引用:1]
[7] ESRI. Logo marker symbol example[EB/OL]. [2014-06-09]. http://resources.esri.com/help/9.3/ArcGISdesktop/com/COM/ExtendAO/LogoMarkerSymbol.htm. [本文引用:1]
[8] 孙林, 王艳慧. 基于ArcGIS的1: 250 000国标地形图符号制作[J]. 测绘与空间地理信息, 2014, 37(1): 66-68.
Sun L, Wang Y H. National stand ard of 1: 250 000 topographic map symbols based on ArcGIS[J]. Geomatics and Spatial Information Technology, 2014, 37(1): 66-68. [本文引用:1]
[9] 许晖. MapGIS到ArcGIS地质灾害数据符号的正确表达关键技术研究[J]. 测绘技术装备, 2013, 15(4): 17-19.
Xu H. Key technology research MapGIS to geological disasters ArcGIS data symbols correctly expressed[J]. Geomatics Technology and Equipment, 2013, 15(4): 17-19. [本文引用:1]
[10] 詹昊, 高金平, 张云姣. MapGIS到ArcGIS数据格式转换关键技术研究[J]. 测绘通报, 2012(s1): 553-554.
Zhan H, Gao J P, Zhang Y J. MapGIS to ArcGIS data format conversion key technology research[J]. Bulletin of Surveying and Mapping, 2012(s1): 553-554. [本文引用:1]
[11] 李敬敏. 面向对象的地图注记库设计与实现[D]. 北京: 中国地质大学, 2010.
Li J M. The Design and Implementation of Object-Oriented Annotation Database[D]. Beijing: China University of Geosciences, 2010. [本文引用:1]
[12] 万里飞. 空间要素渲染的插件化研究与实现[D]. 北京: 中国地质大学, 2012.
Wan L F. The Plug-in Interface Research and Realization of Geospatial Feature Rendering[D]. Beijing: China University of Geosciences, 2012. [本文引用:1]