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