潘良波,赵晓晶,周文
(1.正元地理信息集团股份有限公司,北京 101300; 2.北京市智慧管网安全评价及运营监管工程技术研究中心,北京 101300;3.山东正元地球物理信息技术有限公司,山东 济南 250000)
当前,测绘、遥感、卫星导航、对地观测等时空地理信息数据获取技术越来越成熟[1],数据体量也越来越大。但是不同领域、不同区域的数据有其独立的格式、标准,很难进行统一的组织存储、融合与管理[2],不利于数据的进一步开发利用。如何将这些海量、多源、异构的时空地理信息数据进行统一管理[3],深度分析挖掘数据之间的关系,研究其时空发展规律,成为充分利用新一代信息技术的基础[4]。此外,随着地球空间元素的多元化,时空地理信息数据范围从地球表面扩展到了地上地下全空间,迫切需要在传统二维空间数据组织编码的基础上进行立体空间的延展[5,6],建立满足地上地下全空间的三维空间数据组织编码体系[7~9],进而实现对地上地下全空间多源数据的组织管理。
基于此,本文设计一种基于Geohash算法的全球三维空间网格剖分方法和编码方式,为多元、多尺度、多语义、多模态的时空地理信息进行数据组织融合提供方法与解决思路,并显著提高时空地理信息数据的检索查询效率。
全球三维空间网格剖分实现步骤主要包括如下内容:
(1)球面网格剖分
根据Geohash算法,将地球球面理解为一个基于经纬线的坐标系,纬度范围在[-90°,90°],经度范围在[-180°,180°]。用平面递归的方式将地球球面分解成多个级别的子块,即利用等分法将经度范围和纬度范围分别划分为多级、等分的不同区间段。
(2)高程区间段划分
在高程维度上,按照三维空间的高程范围由低到高的顺序,将地球球面以下的地下空间以及地球球面以上的地上空间的高程范围,利用等分法的原则将高程维度划分为不同级别的多个高程区间段,同一级别包括多个相同高度的高程区间段,高程级别越高,高程区间段的高度越短,所表示的空间位置越精确。在确定的三维空间内,对高程区间进行n等分,得到第1级的三维空间网格的高程区间段,然后再对第1级的高程区间段进行n等分得到第2级的高程区间段,以此类推将高程区间划分至最高级别。其中,n为高程维度每级的等分数,取值为大于等于2的任意正整数,n的取值主要影响每级高程区间段的精度,在实际应用时应根据编码的空间范围和实际所需精度等各方面的条件自行选择。例如,以12级为最高级,取n=5,在确定的三维空间范围内,将高程区间进行5等分,获得第1级的高程区间段;然后将第1级的每一个高程区间段再进行5等分,获得第2级高程区间段,以此类推,第12级的高程区间段将高程平均分为512= 244 140 625段。
(3)网格组合
将球面维度的网格与高程维度的高程区间段组合形成以地球球面为基准的全球三维空间网格(图1),同一级别的网格在三个维度上包括的区间段是相同的,球面维度的单位为“度”(°),高程维度的单位为m。
图1 全球三维空间网格示意图
全球三维空间网格的编码包括三个步骤,分别为单维度编码、转码和组码。
(1)单维度编码
单维度编码即对经度、纬度和高程三个维度上每一级别的每一个区间段进行编码。其中:
经度和纬度维度参考Geohash的编码方式,采用二进制编码。
高程维度的编码方式为:以0,1,2,…,n-1的编码方式为每一级每一个高程区间段进行编码。每一级n等分的高程区间段从小到大分别用0、1、2…(n-1)表示,即第1级的高程区间段从小到大分别为0、1、2…(n-1),第2级的高程区间段从小到大分别为00、01、02…0(n-1)、10、11、12…1(n-1)…(n-1)1、(n-1)2、(n-1)3…(n-1)(n-1),以此类推,得到第1级到最高级所有高程区间段的编码。
(2)转码
根据实际应用需求,采用base 32的编码方式,即Geohash编码,将经度和纬度维度的二进制编码组合为球面网格的二进制编码,并转换为相应的数值编码(如表1)。
base 32编码方式 表1
高程维度上,将高程区间段的编码转换为相应的数值编码,其中一个编码表示唯一的一个数值,用数值编码表示每一级每一个高程区间段的数值,即为每一级别每一个高程段的高程编码,当n小于等于32时,可采用与Geohash编码规则相同的base 32编码方法。
例如,当n为5时,将每一级的高程区间段平均5等分,然后采用base 32编码方法,即第1级的高程编码为0、1、2、3、4,第2级的高程编码分别为00、01、02、03、04、10、11、12、13、14、20、21、22、23、24、30、31、32、33、34、40、41、42、43、44,第1级别的高程编码有0-4共5个,第2级别有52(即5×5)=25个,以此类推,直至将最高级的高程区间段完成编码。
当n大于32时,base 32的编码便不能满足需求,需要采用其他的编码方式进行转码,可以考虑采用base 36、base 64等编码方式。
(3)组码
将球面网格的编码和高程维度的编码进行交叉重组,在球面网格编码的基础上加入上述高程区间段的编码,构建形成全球三维空间网格的唯一编码。每一级的全球三维空间网格编码都是由相应级别的球面网格编码和相应级别的高程区间段编码组成,球面网格编码在前,高程区间段编码在后;每一级别的全球三维空间网格编码的前缀都是该位置的上一级别的全球三维空间网格编码。
全球三维空间网格在编码过程中采用类似Z曲线的编码方式。采用递归思想,将每一个三维空间网格分解为更高一级的网格时,编码的顺序是自相似的,进而在三维空间中形成三维的皮亚诺曲线。利用三维的皮亚诺曲线将三维空间转换成一维曲线,进而编码相似的网格其距离也相近,在空间检索过程中只需要搜索编码相似网格中的对象。
例如,在三维空间范围内,搜索某POI点周围固定范围内的其他已知POI点,可根据搜索范围、各级网格精度确定该点所在三维空间网格应编码的级别,并根据该点的经纬度以及高程值确定所在网格的全球三维空间网格编码,然后查找其周围的26个三维空间网格,最后确定在这27个三维空间网格(包括矢量点所在的三维空间网格)中与其相近的其他已知矢量点的位置,并通过实际距离计算找到符合要求的矢量点。
将本文所述时空地理数据组织方法应用到实际生活中,首先确定空间编码范围,在此基础上将三维空间划分为多级网格,并且对每一个网格进行唯一编码,以此作为三维空间索引的基础。
由于每一级的每个三维空间网格都有其对应的唯一编码,并且每级编码与其对应的上一级编码的前缀相同,这就保证了相近位置上全球三维空间网格编码具有相似性,进而为三维空间矢量数据的查询提供了便捷方法,大幅度降低了三维空间数据组织管理的复杂程度,减少了三维空间数据查询的时间。
理论上,为了对数据进行更好的组织管理,高程范围内应该包含全部的数据。但是,如果选取的高程范围过大,编码空间过大,数据查询时无效数据很多,就加大了编码的工作量,也加大了对计算机的性能要求,延长了对数据的查询时间,不利于对数据的有效组织管理。因此,在获取编码空间时,应避免出现选取的编码空间过大或过小的问题。同时,为统一高程值,高程基准选择1985国家高程基准;编码空间的高程范围为(-6371,6371),单位为km,以地球表面为中间面,此空间可以保证三维空间网格的精度,并且可以容纳更多的数据。
编码空间确定后,将选取的三维空间划分为不同级别的三维空间网格,每一级三维空间网格的平面网格按Geohash划分,编码采用Geohash编码体系;为了与Geohash编码具有更好的匹配性,高程同样划分为12级,并对每一级别的高程5等分进行对比,如表2所示。
不同级别高程维度误差对比表 表2
上一级的高程区间段包含5个下一级的高程区间段。对三维空间网格进行编码时,将球面维度的Geohash编码放在前面,高程编码放在后面,这样就组成了全球三维空间网格编码。其中每一个三维空间网格的编码从左至右的第一位至倒数第三位的编码序列表示该三维空间网格所在处上一级的编码。比如,一个高程区间段的编码数值为143021,表示一个6级的三维空间网格,则其对应的高程编码就是143021。如果该三维空间网格球面维度的Geohash编码为wkmxfb,则其三维空间编码为w1k4m3x0f2b1,该三维空间网格所在位置的第5级三维空间编码为w1k4m3x0f2。
利用以下步骤可确定空间中一点的各级编码:
(1)已知编码空间的高程范围为(-6371,6371),单位为km,高程基准采用1985国家高程基准,对每一级别高程进行5等分,高程分为12级。
(2)三维空间中一点的坐标为:东经116.604980°,北纬39.603027°,高程 -3.526 km,高程基准采用1985国家高程基准,若已知点的高程基准与三维空间编码采用的高程基准不同,应将点的高程统一到三维空间编码采用的高程基准下。
(3)已知高程范围为(-6371,6371),对其5等分,得到的高程段分别为:(-6371,-3822.6]、(-3822.6, -1274.2]、(-1274.2,1274.2]、(1274.2,3822.6]、(3822.6,6371),其中-3.526落在(-1274.2,1274.2]高程段中,编码数值记为2,所以-3.526所在三维空间网格的第1级高程编码为2;然后对(-1274.2,1274.2]高程段5等分,得到的高程段分别为:(-1274.2, -764.52]、(-764.52,-254.84]、(-254.84,254.84]、(254.84,764.52]、(764.52,1274.2],其中-3.526落在(-254.84,254.84]高程段中,因此编码数值记为2,所以该点所在三维空间网格的第2级高程编码为22,以此类推,该点所在三维空间网格的第12级高程编码为:222213042003,具体计算方法如表3所示。
-3.526 km处所在网格高程编码 表3
(4)确定该点经纬度所在位置的Geohash编码为wx4cm3t0kgqf。
(5)将Geohash编码与高程编码交叉重组得到该点的三维空间编码为w2x242c2m133t004k2g0q0f3。
续表3
本文基于Geohash算法突破二维空间索引编码的方式,加入高程维度的剖分,将地上地下全空间剖分为多层级、多尺度的立体网格,并为所有立体网格建立全球唯一的网格编码,以立体网格单元为基础,把地上地下全空间大数据映射到统一空间,构建统一时空基准下的时空对象关联关系,进而为地上地下全空间数据的可视化、快速查询统计和空间分析提供基础支撑,同时可将空间数据查询检索效率提升10倍以上。采用基于Geohash算法的全球三维空间网格剖分方法建立索引系统能够降低数据管理的复杂程度,可减少空间矢量数据查询的时间,避免数据在高度上的不匹配,出现重叠、交叉等现象。