王曉輝
摘要:本文以在Hadoop分布式平臺(tái)下海量遙感地圖數(shù)據(jù)瓦片化處理為研究對(duì)象,通過(guò)架設(shè)Hadoop平臺(tái)對(duì)遙感圖像數(shù)據(jù)進(jìn)行分布式地圖瓦片生產(chǎn),統(tǒng)計(jì)不同生產(chǎn)方法下的地圖瓦片生產(chǎn)效率。本研究的主要工作內(nèi)容分為Hadoop平臺(tái)構(gòu)建、Hadoop平臺(tái)下的遙感地圖數(shù)據(jù)預(yù)處理模塊、瓦片生產(chǎn)系統(tǒng)模塊等。該分布式遙感地圖瓦片生產(chǎn)系統(tǒng)后臺(tái)操作系統(tǒng)采用的是Linux下虛擬機(jī)架設(shè)Hadoop分布式平臺(tái)。系統(tǒng)經(jīng)過(guò)測(cè)試,在地圖瓦片生產(chǎn)過(guò)程中實(shí)用性強(qiáng)、效率高,可以實(shí)現(xiàn)對(duì)海量遙感地圖瓦片快速分布式處理。
關(guān)鍵詞:遙感地圖瓦片;Hadoop;分布式
引言
隨著大數(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)開發(fā)過(guò)程基礎(chǔ)上,實(shí)現(xiàn)了在云平臺(tái)下快速生成地圖瓦片系統(tǒng)。
一、地圖瓦片云平臺(tái)支撐技術(shù)概述
1.Hadoop云平臺(tái)技術(shù)
Hadoop是基于云計(jì)算技術(shù)概念發(fā)展起來(lái)的,是由Apache基金會(huì)開發(fā)發(fā)布的開源分布式框架。其具有的免費(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是開源地理信息系統(tǒng)下的Web服務(wù)器規(guī)范,是使用Java語(yǔ)言實(shí)現(xiàn)的開源項(xiàng)目。該項(xiàng)目核心技術(shù)包括金字塔模型和地圖瓦片切割技術(shù)。通過(guò)對(duì)GeoServer的源碼分析,GeoServer采用類似Google地圖瓦片的切割方法。通過(guò)比例尺、行號(hào)、列號(hào),構(gòu)建切割后的瓦片命名規(guī)則。瓦片切割命名規(guī)則如圖1所示。
依據(jù)以上命名規(guī)則,系統(tǒng)通過(guò)更改GeoServer源碼將高分一號(hào)衛(wèi)星影像數(shù)據(jù)切割生成瓦片數(shù)據(jù)。
3.GDAL圖像處理技術(shù)
GDAL(Geospatial Data Abstraction Library)是一個(gè)在X/MIT許可協(xié)議下的開源柵格空間數(shù)據(jù)轉(zhuǎn)換庫(kù)。它利用抽象數(shù)據(jù)模型來(lái)表達(dá)所支持的各種文件格式。GDAL具有跨平臺(tái)、開源、簡(jiǎn)潔、高效的特點(diǎn),能讀取、寫入、轉(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)非常松散,是類似json的bson格式,可以較好地解決例如地圖瓦片這類海量小圖片存儲(chǔ)存儲(chǔ)和海量計(jì)算方面的應(yīng)用需求。由瓦片生成系統(tǒng)生成地圖瓦片后由采用MongoDB數(shù)據(jù)庫(kù)來(lái)存儲(chǔ)生成的地圖瓦片數(shù)據(jù)。
二、Hadoop平臺(tái)下的地圖瓦片生產(chǎn)系統(tǒng)簡(jiǎn)介
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\thadoopD1001
192.168.1.106\thadoopD1002
(3)SSH訪問(wèn)設(shè)置
Linux ssh key 分為兩個(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 命令,回車三下,如果已經(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.地圖瓦片生成系統(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;
if i==imrow
indx_row(i)=(i-1)*step_rows+mod_rows;
end
end
for (i=2:imcol)
indx_col(i)=(i-1)*step_cols;
if i==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)向下模塊開啟后,系統(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所示。
三、結(jié)語(yǔ)
(3)地圖瓦片向上迭代模塊
該模塊的上游輸入數(shù)據(jù)是原始遙感衛(wèi)星圖像數(shù)據(jù),根據(jù)衛(wèi)星圖像實(shí)際級(jí)別與Web地圖需要展示的最低級(jí)來(lái)判定是否進(jìn)行向上迭代地圖瓦片生成。
當(dāng)向上迭代模塊開啟后,系統(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所示。
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所示。
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)提高效率?!?/p>
參考文獻(xiàn):
[1] 楊森林,萬(wàn)國(guó)賓,高靜懷.基于分塊壓縮感知的遙感圖像融合[J].計(jì)算機(jī)應(yīng)用研究,2015(1):316-320.
[2] 喻凱,熊祥瑞,高濤.基于Hadoop的地圖瓦片云存儲(chǔ)系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)[J].測(cè)繪地理信息,2017(3):74-77.
[3] 任曉霞,喻孟良,張鳴之,等.基于Hadoop分布式系統(tǒng)的地質(zhì)環(huán)境大數(shù)據(jù)框架探討[J].中國(guó)地質(zhì)災(zāi)害與防治學(xué)報(bào),2018(1):130-134,142.