張發(fā) 姜維 王華強(qiáng)
摘 要:本文主要探討利用Google Earth軟件對(duì)Google影像海量下載與拼接的方法。
關(guān)鍵詞:Google Earth;API函數(shù);影像拼接
一、引言
Google Earth是一款由谷歌公司開(kāi)發(fā)的虛擬地球軟件,其高分辨率的全球影像可以為很多行業(yè)提供服務(wù),在實(shí)際生產(chǎn)作業(yè)中,Google影像作為輔助信息也可以發(fā)揮很大的作用,可在地形圖編輯時(shí)作為底圖對(duì)地物信息進(jìn)行參考、正射影像制作時(shí)對(duì)紋理匱乏區(qū)域進(jìn)行修補(bǔ)替換等。
二、利用API函數(shù)操縱Google地球
Google提供了一系列API函數(shù)用于Google地球的二次開(kāi)發(fā),通過(guò)API函數(shù)我們可以設(shè)置Google影像的顯示位置和縮放比例、當(dāng)前數(shù)據(jù)流量的進(jìn)度以及當(dāng)前窗口Google影像的四個(gè)角點(diǎn)地理坐標(biāo)等信息。屏幕的位置和縮放比例主要通過(guò)是設(shè)置相機(jī)的位置和高度來(lái)控制,用的是IApplicationGE接口的SetCameraParams方法,傳入的主要參數(shù)包括中心點(diǎn)的經(jīng)緯度、高度、高度模式、范圍、傾角、方位角等;當(dāng)前數(shù)據(jù)流量進(jìn)度是只當(dāng)前屏幕范圍內(nèi)數(shù)據(jù)的下載進(jìn)度,可以通過(guò)IApplicationGE接口的StreamingProgressPercentage參數(shù)來(lái)設(shè)置;計(jì)算當(dāng)前屏幕的四個(gè)角點(diǎn)地理坐標(biāo)可依次通過(guò)IApplicationGE接口的GetPointOnTerrainFromScreenCoords函數(shù)計(jì)算。
三、利用拷屏技術(shù)下載Google Earth影像
將Google Earth定位到指定坐標(biāo)后,接下需要通過(guò)拷貝屏幕的方式來(lái)獲得窗口內(nèi)的Google影像,步驟如下:
1、獲得Google Earth窗口在屏幕上的矩形位置
通過(guò)API函數(shù)我們可以獲得Google Earth的窗口句柄,然后通過(guò)窗口句柄可以獲得其屏幕位置和客戶區(qū)大小,進(jìn)而可以推算出Google Earth窗口在屏幕上的矩形位置。
2、判斷窗口是否被遮擋
由于是通過(guò)拷屏的方式獲得Google影像,在拷屏前需要對(duì)Google Earth窗口是否被遮擋進(jìn)行判斷,組合運(yùn)用API函數(shù)可以實(shí)現(xiàn)此功能,步驟如下:首先獲得窗口的句柄以及所在的屏幕位置,然后利用GetNextWindow函數(shù)可以依次獲得位于其上的窗口句柄,然后獲得每一個(gè)位于其上的窗口所在的屏幕位置,若兩個(gè)窗口所在的屏幕位置存在交叉,則判定窗口被遮擋。
四、海量Google影像的拼接與存儲(chǔ)
由拷屏方法獲得的Google影像是一塊塊分散的影像,在應(yīng)用前需要對(duì)其進(jìn)行拼接形成一幅整個(gè)區(qū)域的大影像。對(duì)于影像的拼接如果采用人工拼接的方式勢(shì)必費(fèi)時(shí)費(fèi)力,且當(dāng)影像數(shù)據(jù)量較大時(shí)需要專業(yè)軟件才能滿足要求,因此對(duì)于下載的影像的拼接采用自動(dòng)化的方式,對(duì)于海量數(shù)據(jù)的存儲(chǔ)采用自定義的支持海量數(shù)據(jù)的影像格式。
1、海量影像數(shù)據(jù)格式簡(jiǎn)介
對(duì)于下載的Google影像,當(dāng)區(qū)域范圍大、影像分辨率較高時(shí),影像的數(shù)據(jù)量會(huì)隨之急劇增大,可達(dá)幾百GB甚至TB級(jí),為了便于影像的存儲(chǔ)和拼接,本文采用支持64位尋址的分層分塊的自定義影像格式。64位尋址技術(shù)可使支持的影像大小達(dá)222TB,數(shù)據(jù)分塊的存儲(chǔ)方式可以極大地減少計(jì)算機(jī)尋址的次數(shù),大幅提高影像讀寫(xiě)的效率,通過(guò)建立金字塔的方式,可以方便程序?qū)τ跋竦目焖贋g覽顯示。
自定義的影像格式包含兩個(gè)部分:文件頭和影像數(shù)據(jù)區(qū),其中文件頭包含文件標(biāo)識(shí)、影像高度和寬度、影像的灰度級(jí)數(shù)、影像塊大小、金字塔影像的層數(shù)、文件大小等信息。影像數(shù)據(jù)區(qū)為每層的影像數(shù)據(jù),對(duì)于每層的影像數(shù)據(jù)根據(jù)影像塊大小進(jìn)行分塊存儲(chǔ)。自定義海量影像數(shù)據(jù)結(jié)構(gòu)如圖1所示。
2、Google影像的并行拼接
Google影像的并行拼接目的是使Google影像的下載與拼接分開(kāi)進(jìn)行,以提高Google影像下載的速度。并行拼接的原理如下:下載程序?qū)⒖狡料螺d得到的影像保存于臨時(shí)目錄,同時(shí)將其路徑信息等以消息形式發(fā)給并行程序控制端,然后下載程序進(jìn)行下一位置的影像下載;并行程序控制端對(duì)接收的消息依次逐個(gè)進(jìn)行處理,首先解析出每條消息中的待拼接影像路徑和執(zhí)行程序等信息,然后創(chuàng)建線程進(jìn)行執(zhí)行影像拼接。
單個(gè)待拼接影像的拼接步驟如下:首先讀取待拼接影像信息和其坐標(biāo)范圍信息(地理坐標(biāo)),根據(jù)坐標(biāo)范圍信息計(jì)算待拼接影像在整個(gè)區(qū)域海量影像中的坐標(biāo)范圍(單位是像素),然后申請(qǐng)空間并根據(jù)整個(gè)區(qū)域影像的采樣間隔對(duì)待拼接影像重采樣,最后將重采樣后的影像寫(xiě)入?yún)^(qū)域海量數(shù)據(jù)影像文件。
五、下載與拼接試驗(yàn)結(jié)果
本文根據(jù)上述方法對(duì)香港地區(qū)的Google影像進(jìn)行了下載與拼接試驗(yàn)。下圖2為香港地區(qū)拼接后的Google影像(起始坐標(biāo)為經(jīng)度113.82、緯度22.14,采樣間隔為0.00001(度),影像寬68000、高46000,生成金字塔后影像大小為11.6GB),第一個(gè)圖片為全局圖像,第二個(gè)圖像正常大小的局部影像。
六、結(jié)束語(yǔ)
目前,利用本文方法獲得的影像數(shù)據(jù)已在多項(xiàng)生產(chǎn)作業(yè)中作為輔助信息使用,生產(chǎn)實(shí)踐證明本文方法獲得的Google影像在對(duì)正射影像的紋理匱乏區(qū)域進(jìn)行修補(bǔ)方面具有很強(qiáng)的應(yīng)用價(jià)值。隨著Google影像的全球覆蓋化,且很多地區(qū)影像分辨率較高,我們通過(guò)對(duì)其數(shù)據(jù)的下載、拼接,便可獲得全球任意地區(qū)的影像數(shù)據(jù)。這些數(shù)據(jù)可以作為輔助信息直接或間接參與生產(chǎn)。由此預(yù)見(jiàn),通過(guò)本文方法下載拼接的Google影像在測(cè)繪生產(chǎn)尤其是將來(lái)的境外測(cè)繪生產(chǎn)任務(wù)中具有巨大的應(yīng)用潛力。