潘良波,趙曉晶,周文
(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算法的全球三維空間網格剖分方法建立索引系統能夠降低數據管理的復雜程度,可減少空間矢量數據查詢的時間,避免數據在高度上的不匹配,出現重疊、交叉等現象。