王曉輝
廣東工貿職業(yè)技術學院 廣東 廣州510000
隨著大數據技術和遙感衛(wèi)星技術的快速發(fā)展,遙感地圖瓦片服務日益增多,為滿足不同用戶在使用地圖瓦片服務的不同需求,瓦片生成系統(tǒng)成為各地圖瓦片服務商的關鍵核心技術。
通過將海量的遙感數據分布到Hadoop云平臺上進行處理可以快速高效地生成和管理生成的地圖瓦片數據。本文是在Hadoop云平臺的地圖瓦片生成系統(tǒng)開發(fā)過程基礎上,實現了在云平臺下快速生成地圖瓦片系統(tǒng)。
1.Hadoop云平臺技術
Hadoop是基于云計算技術概念發(fā)展起來的,是由Apache基金會開發(fā)發(fā)布的開源分布式框架。其具有的免費、高效等特點可以滿足低成本云計算平臺架設。Hadoop項目的核心技術是HDFS分布式文件系統(tǒng)與MapReduce框架,地圖瓦片系統(tǒng)通過HDFS系統(tǒng)來存儲海量遙感圖像衛(wèi)星數據,通過MapReduce框架來實現分布式地圖瓦片處理工作。
2.GeoServer地圖瓦片切割技術
GeoServer是開源地理信息系統(tǒng)下的Web服務器規(guī)范,是使用Java語言實現的開源項目。該項目核心技術包括金字塔模型和地圖瓦片切割技術。通過對GeoServer的源碼分析,GeoServer采用類似Google地圖瓦片的切割方法。通過比例尺、行號、列號,構建切割后的瓦片命名規(guī)則。瓦片切割命名規(guī)則如圖1所示。
圖1 瓦片命名規(guī)則
依據以上命名規(guī)則,系統(tǒng)通過更改GeoServer源碼將高分一號衛(wèi)星影像數據切割生成瓦片數據。
3.GDAL圖像處理技術
GDAL(GeospatialDataAbstractionLibrary)是一個在X/MIT許可協(xié)議下的開源柵格空間數據轉換庫。它利用抽象數據模型來表達所支持的各種文件格式。GDAL具有跨平臺、開源、簡潔、高效的特點,能讀取、寫入、轉換、處理大多數柵格數據文件格式。本系統(tǒng)通過將GDAL編譯成Linux下可被Java調用的so文件,方便在Hadoop云平臺環(huán)境下使用。比如:TIFF轉PNG算法實現等。
4.MongoDB數據庫技術
MongoDB是一個分布式文件存儲的數據庫。它支持的數據結構非常松散,是類似json的bson格式,可以較好地解決例如地圖瓦片這類海量小圖片存儲存儲和海量計算方面的應用需求。由瓦片生成系統(tǒng)生成地圖瓦片后由采用MongoDB數據庫來存儲生成的地圖瓦片數據。
1.Hadoop集群搭建
(1)集群hostname配置
修改/etc/hostname每個節(jié)點單獨配置,如主節(jié)點修改為hadoopD1001。
(2)集群hosts配置
根據集群節(jié)點主機名和IP修改/etc/hosts文件成如下格式,整個集群統(tǒng)一配置。
192.168.1.105’ ’hadoopD1001
192.168.1.106’ ’hadoopD1002
(3)SSH訪問設置
Linuxsshkey分為兩個:/home/ubuntu/.ssh/id_rsa和/home/ubuntu/.ssh/id_rsa.pub,其內容是155個字符為一行的字符串。
使用/home/ubuntu/.ssh/id_rsa可以訪問/home/ubuntu/.ssh/id_rsa.pub,因此可以將集群中所有的公鑰放到一個統(tǒng)一的authorized_keys中并復制到每個節(jié)點/home/ubuntu/.ssh/authorized_keys中。生成秘鑰:切換到ubuntu用戶下使用ssh-keygen命令,回車三下,如果已經有key覆蓋,將整個集群中所有的id_rsa.pub放入authorized_keys,并復制到整個集群的/home/ubuntu/.ssh中。
(4)修改/etc/profile配置,配置jdk,環(huán)境變量
(5)Hdfs搭建設置
etc/hadoop/core-site.xml
etc/hadoop/hdfs-site.xml
Hadoop集群搭建成功如圖2所示。
圖2 Hadoop集群搭建成功
2.地圖瓦片生成系統(tǒng)模塊設計
地圖瓦片生成系統(tǒng)劃分為數據分塊處理模塊、地圖瓦片向上迭代模塊、地圖瓦片向下迭代模塊。由系統(tǒng)控制來生成不同級別地圖瓦片。
(1)數據分塊處理模塊
該模塊主要功能是數據分塊,系統(tǒng)調用matlab數據分塊算法對高分一號衛(wèi)星數據進行分塊。算法需要輸入遙感衛(wèi)星圖像數據,輸入分塊的行與列,根據輸入分塊的行與列,對數據分辨率的行與列取模,獲取余數。將讀入數據的分辨率的行與列減去余數并除以分塊的行列數,將輸入的分塊數的行列加1,建立索引矩陣,矩陣中存放分塊用索引的行列號,根據索引矩陣的行列號生成不同區(qū)域矩陣,根據索引矩陣的行列號保存分塊的不同矩陣。具體算法如下:
function[outfile1]=segimg(file,imrow,imcol)
image=file;
rows=size(image,1);
cols=size(image,2);
mod_rows=mod(rows,imrow);
mod_cols=mod(cols,imcol);
step_cols=(cols-mod_cols)/imcol;
step_rows=(rows-mod_rows)/imrow;
imrow=imrow+1;
imcol=imcol+1;
indx_row=zeros(1,imrow);
indx_col=zeros(1,imcol);
for(i=2∶imrow)
indx_row(i)=(i-1)*step_rows;
ifi==imrow
indx_row(i)=(i-1)*step_rows+mod_rows;
end
end
for(i=2∶imcol)
indx_col(i)=(i-1)*step_cols;
ifi==imcol
indx_col(i)=(i-1)*step_cols+mod_cols;
end
end
imrow=imrow-1;
imcol=imcol-1;
a=cell(imrow,imcol);
temprow={};
for(i=1∶imrow)
for(j=1∶imcol)
temprow{i}=image(indx_row(i)+1∶indx_row(i+1),∶,∶);
a{i,j}=temprow{i}(∶,indx_col(j)+1∶indx_col(j+1),∶);
name=strcat('rl',num2str(i),num2str(j),'.mat');
temp=a{i,j};
save(name,'temp');
end
end
outfile1=a;
end
(2)地圖瓦片向下迭代模塊
該模塊的上游輸入數據是由分塊模塊提供的遙感衛(wèi)星圖像分塊數據,根據衛(wèi)星圖像實際級別與Web地圖需要展示的最高級來判定是否進行向下迭代地圖瓦片生成。
當向下模塊開啟后,系統(tǒng)進入Hadoop集群系統(tǒng)的MapReduce模型處理分塊數據,首先在Map階段,分塊影像數據從HDFS讀取到本地,由于是向下迭代,在此運行圖像分塊模塊,分塊結束后,使用GDAL將TIFF格式的衛(wèi)星影像數據轉換為PNG格式,這是因為Web瓦片通用格式為PNG圖片格式。然后對PNG格式圖像重采樣。將重采樣后的數據存儲到Mongodb數據庫中,最后刪除本地臨時文件。如圖3所示。
圖3 瓦片生成向下迭代流程圖
(3)地圖瓦片向上迭代模塊
該模塊的上游輸入數據是原始遙感衛(wèi)星圖像數據,根據衛(wèi)星圖像實際級別與Web地圖需要展示的最低級來判定是否進行向上迭代地圖瓦片生成。
當向上迭代模塊開啟后,系統(tǒng)進入Hadoop集群系統(tǒng)的MapReduce模型處理,首先在Map階段,分塊影像數據從HDFS讀取到本地,使用GDAL將TIFF格式的衛(wèi)星影像數據轉換為PNG格式,然后對PNG格式圖像重采樣。將重采樣后的數據存儲到Mongodb數據庫中作為當前級別迭代地圖瓦片,最后刪除本地臨時文件。
以上流程與向下迭代基本相同。向上迭代與向下迭代的區(qū)別在于Reduce階段。在Reduce階段的輸入數據是未重采樣的PNG遙感衛(wèi)星圖像數據,使用圖像鑲嵌功能,按照網格編號將四塊PNG圖像鑲嵌為一塊PNG,其中可能會出現PNG圖像不足的情況,這時使用透明PNG圖像進行補足鑲嵌。鑲嵌后的PNG圖像存放在HDFS上作為下一個向上迭代的輸入數據,最后刪除本地臨時文件。如圖4所示。
圖4 瓦片生成向上迭代流程圖
3.系統(tǒng)測試與性能分析
系統(tǒng)采用的測試數據為90GB遙感衛(wèi)星圖像數據,輸入數據為12級地圖瓦片數據。系統(tǒng)使用5個子節(jié)點的Hadoop集群進行地圖瓦片生成處理。下表列出了瓦片分塊模塊、向下迭代模塊(17級—12級)、向上迭代(11級—6級)的瓦片生成效率。系統(tǒng)處理效率如表1所示。
表190 GB數據測試結果
Hadoop云平臺瓦片生成系統(tǒng)可以有效解決海量遙感衛(wèi)星圖像的地圖瓦片切片服務,從而為用戶通過Web客戶端訪問WEBGIS項目提供支持。
本研究的特色是分布式計算環(huán)境下的遙感地圖瓦片生產研究。在遙感地圖瓦片生產中引入分布式計算的思想,用以提高海量地圖瓦片生產速度并解決多機協(xié)同計算問題,為當前海量地圖瓦片生成提供一種有效的解決方案,防止因在遙感地圖瓦片生產過程中出現處理計算能力不足而產生頸瓶。此外,該系統(tǒng)瓦片生產效率通過更改算法和MapReduce模型仍然有進一步提高的可能。在今后的研究中,還需要通過進一步改進算法等來提高效率。