楊立業(yè)
(甘肅省基礎(chǔ)地理信息中心,甘肅 蘭州 730000)
隨著國(guó)產(chǎn)衛(wèi)星技術(shù)的快速發(fā)展,高分辨率衛(wèi)星影像數(shù)據(jù)獲取能力大幅提升。以甘肅省為例,全省范圍2m分辨率衛(wèi)星影像一季度可覆蓋一次,月覆蓋率達(dá)到90%以上,0.8m分辨率衛(wèi)星影像一年可覆蓋一次。豐富的遙感影像為政府部門(mén)和各行業(yè)、科研院所等提供了及時(shí)、可靠的數(shù)據(jù)基礎(chǔ)。遙感影像數(shù)據(jù)的豐富應(yīng)用場(chǎng)景對(duì)海量影像數(shù)據(jù)的快速可視化提出了較強(qiáng)的需求。為更好地管理和共享海量遙感數(shù)據(jù), 國(guó)內(nèi)研究者做了大量的基礎(chǔ)研究[1-3]。
目前,海量影像可視化共享主要是通過(guò)預(yù)生成影像地圖瓦片等方式實(shí)現(xiàn)。影像數(shù)據(jù)基于網(wǎng)絡(luò)端的在線瀏覽方式主要為地圖瓦片服務(wù)[4]。地圖瓦片服務(wù)分為影像地圖瓦片預(yù)生成和影像地圖瓦片動(dòng)態(tài)創(chuàng)建兩種方式。其中,影像地圖瓦片預(yù)生成方式是構(gòu)建影像地圖瓦片服務(wù)的主要方式[5-6],此方法具有更快的瀏覽響應(yīng)速度,缺點(diǎn)是需要較長(zhǎng)時(shí)間的線下預(yù)處理過(guò)程,且不支持動(dòng)態(tài)波段組合顯示、數(shù)據(jù)更新效率低;影像地圖瓦片動(dòng)態(tài)創(chuàng)建方式是根據(jù)客戶(hù)端發(fā)出的請(qǐng)求,以實(shí)時(shí)在線方式生成影像地圖瓦片,適合在數(shù)據(jù)持續(xù)更新的情況下使用,但存在瀏覽響應(yīng)速度慢、占用在線計(jì)算資源較多等缺點(diǎn)[7]。上述海量影像可視化共享方式存在預(yù)處理時(shí)間長(zhǎng)、時(shí)效性差、不支持動(dòng)態(tài)波段組合顯示、商業(yè)軟件投入成本大、在線計(jì)算資源多等問(wèn)題。
為解決上述問(wèn)題,本文提出了基于Cloud Optimized GeoTIFF技術(shù)、Hadoop分布式存儲(chǔ)技術(shù)和Spark并行運(yùn)算技術(shù),實(shí)現(xiàn)了海量影像的快速可視化顯示,并支持動(dòng)態(tài)波段組合顯示,數(shù)據(jù)更新效率明顯提升。
COG,即云優(yōu)化 GeoTIFF格式, 是為了解決GeoTIFF文件在云存儲(chǔ)中讀寫(xiě)性能的問(wèn)題,而對(duì)GeoTIFF格式進(jìn)行了優(yōu)化。它具有高效地提取GeoTIFF文件中的子區(qū)域的特性[8]。COG是規(guī)則化的GeoTIFF文件,將概覽等元數(shù)據(jù)信息添加到普通的GeoTIFF文件, COG技術(shù)實(shí)現(xiàn)了GeoTIFF文件的優(yōu)化云端處理,通過(guò)優(yōu)化的概覽元數(shù)據(jù)信息,可以快速定位和讀取指定范圍的局部影像數(shù)據(jù)塊,可大幅提高海量遙感影像數(shù)據(jù)的讀取性能。
Hadoop提供了一個(gè)分布式文件系統(tǒng)(HDFS)[9]。通過(guò)HDFS可使用廉價(jià)計(jì)算機(jī)設(shè)備搭建集群,解決海量遙感影像高并發(fā)請(qǐng)求訪問(wèn)時(shí)磁盤(pán)I/O性能瓶頸。
Spark 是一種基于內(nèi)存的分布式計(jì)算框架,核心是圖計(jì)算和數(shù)據(jù)流的快速處理,但其本身并不具備直接處理遙感影像數(shù)據(jù)的能力[10]。文獻(xiàn)[10]主要研究了面向Spark計(jì)算框架的遙感影像金字塔模型構(gòu)建方法及其數(shù)據(jù)存儲(chǔ)組織結(jié)構(gòu),解決了遙感影像的即時(shí)計(jì)算處理效率及分布式存儲(chǔ)優(yōu)化,實(shí)現(xiàn)了影像的動(dòng)態(tài)渲染。本文在此研究基礎(chǔ)上,采用遙感影像COG網(wǎng)格模型優(yōu)化遙感影像的數(shù)據(jù)存儲(chǔ)和組織結(jié)構(gòu),利用Spark加速影像COG網(wǎng)格模型的構(gòu)建過(guò)程、影像瓦片數(shù)據(jù)的局部讀取和基于波段信息的動(dòng)態(tài)渲染過(guò)程。影像COG網(wǎng)格模型的構(gòu)建過(guò)程主要是對(duì)遙感影像數(shù)據(jù)進(jìn)行重采樣,根據(jù)網(wǎng)格模型將其分割成COG文件,并存儲(chǔ)到Hadoop集群的HDFS文件系統(tǒng)中。影像瓦片讀取和動(dòng)態(tài)渲染過(guò)程主要是從HDFS中存儲(chǔ)的COG文件中讀取局部影像數(shù)據(jù)塊,并根據(jù)波段組合動(dòng)態(tài)渲染成PNG圖片。與基于Hadoop MapReduce的遙感影像金字塔模型的構(gòu)建效率相比,Spark 可以將原始影像數(shù)據(jù)集轉(zhuǎn)成RDD,并將計(jì)算處理后的中間結(jié)果保存在內(nèi)存中,減少了影像數(shù)據(jù)的 I/O 次數(shù),大幅提高了遙感影像處理速度。
基于Spark的影像COG網(wǎng)格模型是一種利用彈性數(shù)據(jù)集RDD來(lái)處理海量遙感數(shù)據(jù)的模型。影像COG網(wǎng)格模型的構(gòu)建過(guò)程中會(huì)顧及影像數(shù)據(jù)的分層和影像數(shù)據(jù)的分塊,其最大分層數(shù)是根據(jù)原始遙感影像的分辨率大小確定的。將原始遙感影像切分成大小相等的COG文件,進(jìn)而根據(jù)最大分層數(shù)及每層的網(wǎng)格元數(shù)據(jù)構(gòu)建網(wǎng)格模型,建立多分辨率層次影像COG網(wǎng)格文件并存儲(chǔ)到HDFS分布式文件系統(tǒng)中。
傳統(tǒng)的遙感影像瓦片金字塔模型構(gòu)建,是先將原始影像按照一定的規(guī)則切割成大小相等的一系列瓦片,形成最底層級(jí)的瓦片數(shù)據(jù),然后通過(guò)數(shù)據(jù)抽稀和瓦片合并,形成上一層影像數(shù)據(jù),循環(huán)操作,直到單層瓦片的個(gè)數(shù)小于4則完成影像金字塔構(gòu)建[11-12]。與傳統(tǒng)的構(gòu)建影像金字塔模型相比,本文提出的面向 Spark 的影像COG網(wǎng)格模型的構(gòu)建策略,大大減少了影像金字塔分層級(jí)數(shù)和影像切片數(shù)量,計(jì)算量也會(huì)大大減少,解決了遙感影像的分布式切片問(wèn)題。具體實(shí)現(xiàn)流程如圖1所示。
圖1 基于Spark的影像COG網(wǎng)格模型構(gòu)建
未使用COG技術(shù)時(shí),Geotrellis通過(guò)ETL操作實(shí)現(xiàn)對(duì)數(shù)據(jù)的處理,將數(shù)據(jù)推送到后端Hadoop中,形成Layer的概念,實(shí)際上在后端Hadoop中存儲(chǔ)的是不同層級(jí)的大量小瓦片,然后再根據(jù)請(qǐng)求讀出相應(yīng)的瓦片進(jìn)行處理。
在Geotrellis中使用COG技術(shù),將GeoTIFF文件轉(zhuǎn)換為COG文件,在轉(zhuǎn)換的過(guò)程中生成對(duì)應(yīng)的元數(shù)據(jù),在元數(shù)據(jù)里描述的是如何找到請(qǐng)求對(duì)應(yīng)的包括文件名稱(chēng)、存儲(chǔ)位置、數(shù)據(jù)范圍(HTTP Range)等數(shù)據(jù)信息,可以精準(zhǔn)快速的請(qǐng)求到此數(shù)據(jù),并支持對(duì)請(qǐng)求到的數(shù)據(jù)進(jìn)行其他處理。不僅解決了瓦片數(shù)據(jù)讀取性能和耗費(fèi)存儲(chǔ)空間的問(wèn)題,也解決了瓦片生成耗時(shí)長(zhǎng)等問(wèn)題,大幅縮短了數(shù)據(jù)處理時(shí)間,并提高了瓦片請(qǐng)求訪問(wèn)效率。
具體實(shí)例如下所述:
(1)輸入已有影像,如圖2所示;
圖2 示例影像數(shù)據(jù)
(2)通過(guò)sc.hadoopMultibandGeoTiffRDD(inputPath)創(chuàng)建影像讀取的RDD;
(3)使用ZoomedLayoutScheme指定瓦片金字塔規(guī)則,WebMercator代表Web墨卡托投影,tilesize代表瓦片大小256*256;
(4)使用reproject將原始影像空間參考投影到Web墨卡托;
(5)通過(guò)HadoopCOGLayerWriter創(chuàng)建COG格式影像塊存儲(chǔ)寫(xiě)操作;
(6)通過(guò)COGLayer.fromLayerRDD創(chuàng)建COG圖層和圖層元數(shù)據(jù)信息;
(7)通過(guò)ZCurveKeyIndexMethod設(shè)置每層COG影像塊文件命名規(guī)則采用Z曲線網(wǎng)格編碼算法,如圖3所示;
圖3 COG影像塊文件命名規(guī)則Z曲線網(wǎng)格編碼
(8)通過(guò)writer.writeCOGLayer方法啟動(dòng)Spark算子執(zhí)行COG裁切;
(9)實(shí)現(xiàn)效果圖,代碼執(zhí)行后數(shù)據(jù)COG目錄組織格式,如圖4所示;
(10)COG文件的命名規(guī)則如圖5所示。
圖4 COG影像目錄組織格式
圖5 COG文件命名規(guī)則
基于Spark的彈性數(shù)據(jù)集RDD分布式計(jì)算能力,可快速實(shí)現(xiàn)影像瓦片數(shù)據(jù)讀取和動(dòng)態(tài)渲染,主要是從存儲(chǔ)在HDFS中的COG文件中讀取局部影像數(shù)據(jù)塊并根據(jù)波段組合信息動(dòng)態(tài)渲染成PNG圖片。
瀏覽器端通過(guò)WMTS協(xié)議請(qǐng)求影像時(shí),將圖層名、級(jí)別、行號(hào)、列號(hào)和波段組合信息發(fā)送到服務(wù)端,服務(wù)端程序接收到請(qǐng)求后會(huì)調(diào)動(dòng)Spark集群根據(jù)圖層名、級(jí)別、行號(hào)和列號(hào)快速查找和定位到HDFS中存儲(chǔ)的COG文件,并只讀取傳入的瓦片范圍區(qū)域內(nèi)的局部柵格數(shù)據(jù)塊MultibandTile,將MultibandTile和bands組合信息傳送到PNG渲染程序,將MultibandTile數(shù)據(jù)塊根據(jù)bands信息重新波段組合,生成新的MultibandTile數(shù)據(jù)塊,然后將各波段賦予R、G、B值生成PNG格式數(shù)據(jù)流返回給瀏覽器端,完成數(shù)據(jù)請(qǐng)求和動(dòng)態(tài)渲染過(guò)程。請(qǐng)求流程如圖6所示。
圖6 基于Spark的影像瓦片動(dòng)態(tài)渲染請(qǐng)求流程圖
以甘肅省2019年全省第三季度2m分辨率影像為例,影像數(shù)據(jù)含金字塔數(shù)據(jù)量約1TB。COG數(shù)據(jù)入庫(kù)約90min,影像數(shù)據(jù)入庫(kù)即發(fā)布為WMTS服務(wù),滿(mǎn)屏按波段任意組合、動(dòng)態(tài)渲染處理和顯示時(shí)間≤2s。傳統(tǒng)ArcGIS Server發(fā)布靜態(tài)切片需要20多小時(shí),并且靜態(tài)切片不支持波段組合。
影像數(shù)據(jù)按波段組合動(dòng)態(tài)渲染輸出顯示效果如圖7-圖9所示。
圖7 按波段組合動(dòng)態(tài)渲染輸出效果圖(1,2,3波段組合)
圖8 按波段組合動(dòng)態(tài)渲染輸出效果圖(2,1,3波段組合)
圖9 按波段組合動(dòng)態(tài)渲染輸出效果圖(單波段)
綜合應(yīng)用COG、Hadoop和 Spark技術(shù),實(shí)現(xiàn)了影像快速可視化及共享,經(jīng)應(yīng)用驗(yàn)證,其大幅提升了從影像數(shù)據(jù)到發(fā)布成可視化的影像服務(wù)的效率,并實(shí)現(xiàn)了按波段組合動(dòng)態(tài)渲染,因此該技術(shù)方法比較適用于海量影像的數(shù)據(jù)可視化共享。