崔虎平,江 南
(信息工程大学地理空间信息学院,河南郑州450052)
长期以来,地理数据处理过程中的数据格式转换一直是地理信息系统的研制开发与应用过程中必不可少的,也是花费时间、经费比较大的模块。不同的地理信息系统应用程序均需要读取、转换不同格式的地理数据,然后进行查询分析。这种处理过程如图1所示。
图1 传统数据格式转换流程
每一个应用程序均需要编写大量的代码用于读取不同的文件格式,进行重复的工作,因此,需要建立一个统一的数据访问接口,使得应用软件的开发脱离这些琐碎复杂的数据格式转换。OGR简单要素库(OGR simple feature library)就是最有效的解决方案之一。
OGR是开源C++代码库,可以提供读取(部分可以写入)大量的矢量数据格式文件,如 ESRI Shape、SDTS、PostGIS、Oracle Spatial、MapInfo mid/mif和TAB文件等格式。随着开源项目的发展,OGR目前已作为地理空间数据抽象库(open geospatial data abstraction library,GDAL)的一部分,GDAL可完成栅格地理数据的读写转换,栅格数据与矢量数据处理相结合,相得益彰,使得GDAL/OGR在许多开源项目中得到了更广泛的应用,如熟悉的 Google Earth、ESRI ArcGIS 9.2+、GRASS、OpenEV、UMN MapServer、Quantum GIS(QGIS)、MapWindow 等十几个开源项目。
OGR目前支持的矢量数据格式如表1所示。
表1 OGR支持的矢量数据格式
其中,是否允许保存为No,表示当前只支持读取该文件格式;而Yes表示既可以读取此文件格式还可以写此文件格式。因此为了将某一文件格式(如MapGIS明码格式)转换为其他文件格式,只要在OGR增加相应的读取该文件格式代码,即可保存为可建立的文件格式。
本文就是使用OGR提供的矢量数据模型,在VC++开发环境下,增加读取MapGIS明码数据文件格式的相关代码,实现由MapGIS明码数据格式转换为其他矢量数据格式的功能。其流程如图2所示。
图2 基于OGR的数据格式转换
在OGR中,不同的数据格式对应不同的驱动(Driver),OGR统一管理所有支持的驱动,使用驱动完成地理数据格式的读取与保存。OGR中类的框架关系如图3所示。
图3 OGR中类的框架关系
其中,
1)OGRSFDriverRegistrar:负责注册并统一管理所有驱动;
2)OGRSFDriver:对应于某一文件格式,可以实现打开数据源、复制、删除等功能;
3)OGRDataSource:表示文件或数据库的抽象类,由用户继承实现,包含一个或多个图层(OGRLayer);
4)OGRLayer:表示数据源中要素的抽象类,由用户继承实现;
5)OGRSpatialReference:空间参考类;
6)OGRFeature:表示某一几何要素,包括属性信息;
7)OGRGeometry:几何对象类。
由于OGR是基于OpenGIS简单要素数据模型建立起来的,数据的类型、方法命名均符合OpenGIS规范,因此非常容易移植于其他符合OGC规范的软件系统中。OGR使用的几何数据对象关系如图4所示。
图4 OGR中的几何数据对象关系
为了读取新的数据格式,主要实现OGR中以下3个类的接口:OGRSFDriver、OGRDataSource与OGRLayer。在实现以上接口以后,使用OGRSFDriverRegistrar类函数RegisterDriver(new OGRMapGISDriver)将新的驱动增加到OGR中。
将新的驱动增加到OGR驱动列表后,就可以使用OGR完成相应数据格式的读取功能,使用OGR可以将源数据格式转换为驱动列表中可保存的数据格式。
使用OGR完成数据格式转换的主要流程如图5所示。
图5 实现数据格式转换的主要流程
第1步:得到注册的驱动。
第2步:根据指定的驱动名,得到驱动对象。
第3步:使用驱动打开数据文件,得到数据源对象。
第4步:根据指定的目标驱动名,得到目标驱动对象,方法同第2步。
第5步:建立输出数据源。
第6步:根据源目标数据中图层个数,依次在目标数据源中建立图层。
第7步:建立目标图层的属性结构。
第8步:依次写入源数据集中的要素对象。
第9步:释放内存。
综合以上处理过程,笔者编写了通用地理数据格式转换工具,界面图6所示。
矢量地理数据格式转换是地理信息系统开发与应用过程的基础之一。本文研究了OGR实现矢量地理数据格式转换的原理,并在OGR中编程实现了MapGIS明码格式驱动的开发,完成了向其他数据格式之间的转换。其重要意义在于数据格式之间的转换不再需要大量的商业软件来完成,节约了大量的软件购置费用,同时软件的开发思路对于其他数据格式的转换具有借鉴意义。
仍存在以下不足:
1)由于OGR采用符合OpenGIS的简单几何数据模型,因而MapGIS数据格式向其他数据格式转换时丢失了其拓扑关系。
2)目前完成矢量数据转换过程时保持空间参考系保持不变,如何在转换过程中增加地理参考系有待于进一步研究。
[1]易善桢,李琦,承继成.空间信息的共享与互操作[J].测绘通报,2000(8):17-19.
[2]孙立坚,朱翊,刘纪平,等.GIS数据交换理论与系统架构的研究[J].测绘通报,2007(9):57-60.
[3]王家耀.空间信息系统原理[M].北京:科学出版社,2001.
[4]华一新,吴升,赵军喜.地理信息系统原理与技术[M].北京:解放军出版社,2001.
[5]苏洁,周东方,岳春生.GPS车辆导航中的实时地图匹配算法[J].测绘学报,2001,30(3):252-256.