基于正则表达式的空间数据纠偏算法实现
2018-12-03宋碧波冯玉铃李旭赵艳坤
宋碧波 冯玉铃 李旭 赵艳坤
(1. 河南省基础地理信息中心,河南 郑州 450003;2. 河南省寰宇信息技术股份有限公司,河南 郑州 450000;3. 河南省科源测绘中心,河南 郑州 450003)
电子地图生产作业面积广阔,往往是一个市或者一个省。空间数据种类多种多样,如行政区划、建筑物、道路桥梁、河流湖泊、POI等,如何快速、有效地获取空间数据是提升电子地图生产效率需解决的主要问题。随着地理信息的广泛应用和互联网地图网站的普及,从网络上抓取地图数据成为空间数据获取的重要手段之一。在我国,出于安全考虑,地图在发布和出版时需要进行保密技术处理,互联网地图空间数据都是经过处理后的,因而网络参考数据纠偏成为电子地图生产的重要环节。本文将对一种基于正则表达式的空间数据快速批量纠偏算法进行研究。
1 互联网地图坐标系现状
由于国内公众空间电子导航地图涉及国家信息安全,出于国家安全考虑,从互联网抓取的空间数据大多是在WGS-84坐标系基础上进行加密的,以保障国家机密信息不对外泄露[2]。例如,高德地图、百度地图采用的坐标系分别为GCJ-02、BD-09。目前,电子地图生产需要的是WGS-84坐标系,因此,在线获取的公众空间地理数据都必须经过校正才能应用。如果能够对获取的网络参考数据进行快速纠偏,充分利用已有空间数据,不仅可以避免数据重复采集,节约生产成本,而且还能提高数据整体生产效率。常用的互联网地图坐标系如下:
(1)地球坐标(WGS-84)
原始坐标体系,是为GPS全球定位系统使用而建立的坐标系统。从专业GPS设备中取出的数据、国际地图提供商使用该坐标系,例如Google Earth、OSM等国外地图。
(2)国测局坐标(GCJ-02)
国家测绘地理信息局制定的互联网地图坐标系,是对WGS84坐标进行非线性加偏后得到的坐标,俗称“火星坐标”。国家规定国内出版的各种地图系统(包括电子形式),必须至少采用GCJ-02对地理位置进行首次加密。从国行移动设备中定位获取的坐标数据,以及我国的互联网地图基本都使用该坐标系,比如高德地图、腾讯地图、百度地图、Google地图(中国范围)。
(3)百度坐标(BD-09)
百度地图独有的坐标系,在GCJ-02的基础上进行二次加密的地图坐标系。百度地图、百度SDK、Geocoding使用该坐标系。
2 空间数据纠偏方法
2.1 常用方法
对空间数据纠偏就是对矢量数据中的几何对象(Geometry)进行纠偏。几何对象的种类繁多,若对每种几何类型的空间节点进行逐个解析、坐标计算与赋值,数据处理效率将会非常低。成熟的GIS软件大多需要在数据可视的情况下,通过手工拖动或输入相关参数的方法进行纠正,面对电子地图生产过程中大数据量、精确、批量处理的要求,数据加载显示速度慢、处理不够精确,无法批量操作、耗时费力等一系列问题凸显出来。
2.2 基于正则表达式的纠偏方法
基于GDAL开源库的坐标信息正则替换方法,能够实现对空间数据几何对象的快速更新。借助C#语言进行算法实现与程序开发,可简便、快速、批量地完成空间数据纠偏工作。关键技术如下:
(1)正则表达式
正则表达式(Regular Expression)又称规则表达式,是计算机科学中用来检索、替换符合某个模式的文本。通过事先定义好的一些特定字符或字符组合,组成规则字符串,实现对文本数据的过滤逻辑,从而获取目标信息[3]。正则表达式具有灵活性、逻辑性,且功能性非常强,可迅速用极其简单的方式达到对字符串的复杂控制。
(2)GDAL
GDAL(Geospatial Data Abstraction Library)是一个在X/MIT许可协议下的开源栅格空间数据转换库[4],利用抽象数据模型来表达所支持的文件格式,包含一系列命令行工具进行数据转换和处理。GDAL下的一个分支OGR提供了对矢量数据的支持。OGR数据模型基于OpenGIS的标准来设立,主要对象类如下:
① OGR Geometry类:封装了Open GIS的矢量数据模型,并提供了几何操作,支持不同数据格式间及空间参考系统间的转换。
② OGR Feature Defn类:封装了投影和基准面的定义。
③ OG RFeature类:封装了一个完整feature的定义,包括geometry和一系列属性。
④ OGR Feature Defn类:封装了feature的属性,通常与一个层(layer)对应。
⑤ OGR Layer类:OGR Layer是一个抽象基类,表示OGRData Source里面的一层要素(feature)。
⑥ OGR Data Sourc类:一个抽象基类,表示包含OGRLayer对象的一个文件或数据库。
⑦ OGR SFDriver类:对应于每一个矢量文件的格式,由OGR SFDriver Registrar注册和管理。
(3)技术流程
首先,通过GDAL/OGR库读取矢量数据,获取每个要素的空间几何信息,并转换为wkt文本格式。然后,利用正则表达式进行匹配,获取节点坐标;借助对应的坐标系纠偏算法对坐标进行重新计算。最后,利用正则表达式更新所有坐标信息,从而实现对空间数据的纠偏或加偏。
常用的网络地理信息数据校正方法有控制点校正、纠偏数据库校正、坐标系统转换校正等。其中,坐标系统转换校正方法主要针对GCJ-02坐标系、BD-09坐标系以及WGS-84之间的坐标系统转换问题,通过对坐标系椭球基准进行研究或利用统计学方法寻找规律,确定两者之间的转换公式。本次研究使用了第三种方法的已有研究成果,对互联网空间数据进行了纠偏计算。空间数据纠偏流程如图1所示。
3 算法实现
图1 空间数据纠偏流程图
在VS.NET平台下,开发程序实现空间数据的批量自动纠偏、加偏[5],核心代码如下:
其中,参数geomS为每个几何要素的几何对象信息,参数trans为实现某种纠偏或者加偏算法的委托实例,从而实现对每个节点坐标的重新计算。
4 试验与分析
从高德地图上抓取地图数据作为试验数据进行几何纠偏,采用文中方法并调用GCJ-02向WGS-84坐标系转换算法对几何对象进行重新计算,处理结果在ArcGIS平台中进行显示,实现效果如图2所示。绿色图形为原始几何间对象,黄色图形为经过纠偏后的几何对象。通过加大计算的数据量对程序处理效率进行估算,图形计算效率达到每秒三万条以上,达到了快速纠偏的目的,能够用于数据的批量处理。
图2 几何要素纠偏结果
5 结语
本文利用正则表达式实现对空间数据的快速纠偏、加偏,避免了对不同几何对象的一一解析、计算。通过对正则替换内容进行修改,实现对所有二维空间对象的批量处理。本方法也适用于三维空间对象的纠偏,以及空间数据融合、数据加密等工作,可促进对已有网络空间数据的重复利用,节约数据生产成本,提高电子地图的生产效益[6]。