本發(fā)明涉及街景地圖、電子地圖學、攝影測量、GIS、Web服務、計算機圖形學等領域,其目的是在現(xiàn)有街景地圖資源的基礎上,實現(xiàn)街景地圖中目標物實際地理位置的直接量測。具體涉及Http請求、極坐標系下的空間直線確定、前方交匯等內(nèi)容。
背景技術(shù):
街景地圖是一種實景地圖服務。為用戶提供城市、街道或其他環(huán)境的提供水平方向360°及垂直方向180°的街道全景,讓使用者能檢視所選城市地面上街道不同位置及其兩旁的景物。它是一種運用多路攝像機對真實場景進行多角度環(huán)視圖像采集之后,再利用計算機進行后期融合處理,并加載播放程序來完成的一種三維虛擬展示技術(shù)。
近年來,隨著互聯(lián)網(wǎng)技術(shù)的飛速發(fā)展,三維全景、虛擬游覽等各種以全景圖像信息為基礎的應用服務,越來越多地進入了人們的日常生活。街景地圖實現(xiàn)了二維三維相結(jié)合的虛擬現(xiàn)實場景,給使用者能夠帶來身臨其境的觀感。
目前,國外的Google公司,國內(nèi)的百度、騰訊等信息技術(shù)和互聯(lián)網(wǎng)公司,均推出了面向城市街景的地圖服務。但是,這些街景地圖主要用于展覽展示,嚴重浪費了街景圖像中蘊含的大量信息。與傳統(tǒng)的二維地圖相比,街景地圖無法實現(xiàn)對街景圖像中地物的定位、量測,極大地限制了全景技術(shù)的廣泛應用。
針對目前街景地圖僅可用于展覽展示的不足,本發(fā)明提出基于現(xiàn)有街景地圖的三維量測算法,實現(xiàn)對街景圖像中地物的實際地理坐標及高度的快速獲取。
技術(shù)實現(xiàn)要素:
本發(fā)明旨在解決現(xiàn)有街景地圖無法實現(xiàn)對街景圖片中目標物的實際地理位置、高度等信息獲取的問題。在街景地圖為用戶提供更加真實準確、更富有畫面細節(jié)的地圖服務的基礎上,本發(fā)明可以實現(xiàn)街景地圖中目標物實際地理位置、高度的量測,使街景地圖中特有的豐富信息得到利用,拓展街景在實際生產(chǎn)生活中的應用。
為實現(xiàn)上述技術(shù)目的,本發(fā)明采用如下技術(shù)方案:
一種基于街景地圖的目標物地理位置的三維量測算方法,包括如下步驟:
步驟1:在街景地圖中,選定兩個視角范圍內(nèi)包含待測算的目標物的視點;
步驟2:獲取所選兩個視點的經(jīng)緯度;
步驟3:在每個視點下,將目標物底部、頂部分別依次調(diào)整到街景地圖的中心位置;
具體為,在每個視點下,將目標物底部、頂部上的一點分別依次調(diào)整到街景地圖的中心位置,頂部、底部上各自選擇的一點的連線位于同一條豎直線上;
步驟4:獲取步驟3中目標物各狀態(tài)下視點的視角參數(shù),包括水平角和俯仰角;
所述水平角是指拍攝相機的攝像頭的羅盤航向。可接受值的范圍是0至360°(兩個值都表示北方,90°表示東方,180°表示南方)。
所述俯仰角是指拍攝相機的攝像頭相對于Street View車輛的向上或向下角度。正值表示攝像頭呈向上角度(90°表示垂直向上);而負值表示攝像頭呈向下角度(-90°表示垂直向下)。
步驟5:根據(jù)兩視點及視點到目標物底部的水平角,在極坐標系下構(gòu)建兩條非平行的空間直線;
步驟6:求出兩條空間直線交點,交點的經(jīng)緯度即為目標物底部在水平面的投影位置,即為目標物的實際地理位置;
步驟7:根據(jù)所選兩視點中任一視點經(jīng)緯度與目標物底部經(jīng)緯度求出視點距目標物底部在水平面上的距離,根據(jù)視點到目標物底部與頂部的俯仰角,分別求出目標物底部與頂部距視點的相對高度;
步驟8:目標物頂部距視點的相對高度減去目標物底部距視點的相對高度得到目標物的實際高度。
本發(fā)明的方法,所述步驟1還包括,選定兩個視點后,調(diào)整該視點下的視角及視野范圍,將目標物調(diào)整到街景地圖的合適位置。
所述視點是指,拍攝該街景圖像時相機所在地理位置,以經(jīng)緯度表示。不同視點是指拍攝街景圖片時相機的地理位置不同。
進一步的,所述步驟1中,通過旋轉(zhuǎn)街景圖像,將目標物調(diào)整到街景地圖的合適位置;具體為,通過旋轉(zhuǎn)調(diào)整街景影像,使目標物整體清晰的位于視野范圍內(nèi),無障礙物遮擋。
本發(fā)明的方法,所述步驟2中,經(jīng)緯度從視點的拍攝參數(shù)中獲取;
本發(fā)明的方法,所述步驟3中,在所選的兩個視點下分別將目標物底部、頂部調(diào)整到街景地圖的中心位置;
所述街景地圖的中心位置是指,在街景地圖顯示窗口中,水平方向的中心線及豎直方向的中心線的交點位置。
本發(fā)明的算法可以概括為:在街景地圖中,首先選定一個目標物,根據(jù)目標物選擇兩個合適的視點;在每個視點下,將目標物底部/頂部調(diào)整到街景地圖的中心位置,獲取視點到目標物底部/頂部的視角參數(shù);根據(jù)視點經(jīng)緯度及視點到目標物底部的視角確定兩條空間直線,求出兩直線的交點,該交點的經(jīng)緯度即為目標物在實際地理空間中的經(jīng)緯度;由視點經(jīng)緯度與得到的目標物的經(jīng)緯度求出視點及目標物在水平面上的距離,再根據(jù)視點到目標物頂部與底部的俯仰角求出視點與目標物頂部、底部的相對高度,兩相對高度差即為目標物的實際高度。
本發(fā)明還提供了實現(xiàn)上述方法所采用的裝置,包括:
用于在街景地圖中,選定兩個視角范圍內(nèi)包含待測算的目標物的視點的裝置;
用于獲取所選兩個視點的經(jīng)緯度的裝置;
用于在每個視點下,將目標物底部、頂部上的一點分別依次調(diào)整到街景地圖的中心位置的裝置;
用于獲取目標物調(diào)整后各狀態(tài)下視點的視角參數(shù),包括水平角和俯仰角的裝置;
用于根據(jù)根據(jù)兩視點及視點到目標物底部的水平角,在極坐標系下構(gòu)建兩條非平行的空間直線的裝置;
用于求解兩條空間直線交點經(jīng)緯度的裝置;
用于根據(jù)所選兩視點中任一視點經(jīng)緯度與目標物底部經(jīng)緯度求出視點距目標物底部在水平面上的距離,根據(jù)視點到目標物底部與頂部的俯仰角,分別求出目標物底部與頂部距視點的相對高度的裝置;
用于將目標物頂部距視點的相對高度減去目標物底部距視點的相對高度的裝置。
本發(fā)明的上述裝置中,所述用于在街景地圖中,選定兩個視角范圍內(nèi)包含待測算的目標物的視點的裝置,包括在選定兩個視點后,調(diào)整該視點下的視角及視野范圍,將目標物調(diào)整到街景地圖的合適位置的裝置。
優(yōu)選的,設有通過旋轉(zhuǎn)街景圖像,將目標物調(diào)整到街景地圖的合適位置的裝置;
具體為,通過旋轉(zhuǎn)調(diào)整街景影像,使目標物整體清晰的位于視野范圍內(nèi),無障礙物遮擋的裝置。
所述用于獲取所選兩個視點的經(jīng)緯度的裝置,包括從視點的拍攝參數(shù)中獲取其經(jīng)緯度的裝置。
所述用于在每個視點下,將目標物底部、頂部上的一點分別依次調(diào)整到街景地圖的中心位置的裝置,包括在每個視點下,將目標物底部或頂部上的一點分別依次調(diào)整到街景地圖的中心位置,所述一點選擇目標物底部或頂部的中心點或角點的裝置。
本發(fā)明有效的利用了現(xiàn)有的街景資源,實現(xiàn)了街景地圖中地物的地理位置的直接獲取以及地物的實際高度的量測,有利于現(xiàn)有街景資源在智慧城市、智能交通等方面的進一步應用。
附圖說明
圖1是本發(fā)明方法的流程圖;
圖2是本發(fā)明目標物地理位置求解示意圖;
圖3是本發(fā)明目標物實際高度求解示意圖。
具體實施方式
下面結(jié)合附圖和實施例作進一步詳細說明。
實施例1
本實施例以Google公司的街景地圖為例,對本發(fā)明方法的技術(shù)方案作進一步描述。如圖1所示,本發(fā)明的流程包括如下步驟:
步驟1:在Google街景地圖中,對于一個待測算目標物,選擇兩個視角范圍內(nèi)包含待測算目標物的合適視點;
步驟2:獲取街景地圖中選取的兩個視點的經(jīng)緯度;
步驟3:在每個視點下,將目標物底部、頂部分別調(diào)整到街景地圖的中心位置;
步驟4:獲取步驟3中目標物各狀態(tài)下視點的視角參數(shù),包括水平角和俯仰角;
步驟5:根據(jù)兩視點及視點到目標物底部的水平角,在極坐標系下構(gòu)建兩條空間直線;
步驟6:求出兩條空間直線交點,交點的經(jīng)緯度即為目標物底部在水平面的投影位置,即為目標物的實際地理位置。
步驟7:根據(jù)所選兩視點中任一視點經(jīng)緯度與目標物底部經(jīng)緯度求出視點距目標物底部在水平面上的距離,根據(jù)視點到目標物底部與頂部的俯仰角,分別求出目標物底部與頂部距視點的相對高度;
步驟8:目標物頂部距視點的相對高度減去目標物底部距視點的相對高度得到目標物的實際高度。
具體實施步驟如下:
步驟1:首先選擇一個特定的目標物,對于該目標物選擇街景地圖中兩個不同的合適的視點;
所述視點是指,拍攝該街景圖像時相機所在地理位置,以經(jīng)緯度表示。不同視點是指拍攝街景圖片時相機的地理位置不同。本實施例中,通過旋轉(zhuǎn)街景圖像,將目標物調(diào)整到街景地圖的合適位置;具體為,通過旋轉(zhuǎn)調(diào)整街景影像,使目標物整體清晰的位于視野范圍內(nèi),無障礙物遮擋。
步驟2:根據(jù)Google街景地圖相關(guān)服務分別獲取兩個街景視點的經(jīng)緯度;街景地圖的拍攝參數(shù)中即包含視點的經(jīng)緯度信息,其他街景地圖可采用相應方式獲取視點的經(jīng)緯度信息。
視點的經(jīng)緯度根據(jù)Google Street View API可以獲得,具體代碼如下:
//獲取視點的經(jīng)緯度
var lat = panorama.getPosition().lat();
var lng = panorama.getPosition().lng();
其中,lat為視點的緯度,lng為視點的經(jīng)度;
步驟3:在上述兩個視點下分別將目標物底部、頂部上的一點調(diào)整到街景地圖的中心位置;為便于調(diào)整,選擇頂部或底部的角點/中心點;頂部、底部上各自選擇的一點連線,要位于同一條豎直線上,如一個長方體的目標物,若頂部選擇了頂面上的左前方的角點,底部同樣要選擇底面上左前方的角點。
所述街景地圖的中心位置是指,在街景地圖顯示窗口中,水平方向的中心線及豎直方向的中心線的交點位置。
步驟4:獲取步驟3中各狀態(tài)的視角參數(shù),包括水平角和俯仰角;
所述水平角是指拍攝相機的攝像頭的羅盤航向??山邮苤档姆秶?至360°(兩個值都表示北方,90°表示東方,180°表示南方)。
所述俯仰角是指拍攝相機的攝像頭相對于Street View車輛的向上或向下角度。正值表示攝像頭呈向上角度(90°表示垂直向上);而負值表示攝像頭呈向下角度(-90°表示垂直向下)。
實現(xiàn)的代碼具體如下:
//獲取當前視角的水平角
var heading = panorama.getPov().heading;
//獲取當前視角的俯仰角
var pitch = panorama.getPov().pitch;
步驟5:已知視點的經(jīng)緯度及視點到目標物底部的水平角,根據(jù)極坐標系,可以確定出一條空間直線。兩個不同的視點則構(gòu)建出兩條不同的空間直線,具體代碼如下:
//k1,k2分別為兩條空間直線的斜率
var k1 = 1/Math.tan(heading1/180*Math.PI);
var k2 = 1/Math.tan(heading2/180*Math.PI);
//b1,b2分別為兩條空間直線的截距
var b1 = lat1 - k1*lng1;
var b2 = lat2 - k2*lng2;
步驟6:如圖2所示,根據(jù)兩條直線方程,求出交點,該交點的經(jīng)緯度值為目標物底部在水平面的投影位置,即為目標物的實際地理位置,具體代碼如下:
//兩直線的交點,即目標物的地理位置
var lngT = (b2 - b1)/(k1 - k2);
var latT = y0 * k1 + b1;
其中,latT為交點的緯度,lngT為交點的經(jīng)度;
步驟7:如圖3所示,由視點經(jīng)緯度及目標物底部的經(jīng)緯度求出視點與目標物底部在水平面上的距離。根據(jù)視點到目標物底部與頂部的俯仰角,分別求出目標物底部與頂部距視點的相對高度。具體代碼如下:
//根據(jù)視點及目標物底部經(jīng)緯度求出兩點間的距離
var xyDistance = GetDistance(latT,lngT,lat,lng);
function GetDistance( lat1, lng1, lat2, lng2)
{
var radLat1 = rad(lat1);
var radLat2 = rad(lat2);
var a = radLat1 - radLat2;
var b = rad(lng1) - rad(lng2);
var s = 2 * Math.asin(Math.sqrt(Math.pow(Math.sin(a/2),2) +
Math.cos(radLat1)*Math.cos(radLat2)*Math.pow(Math.sin(b/2),2)));
s = s * EARTH_RADIUS;//地球半徑
s = Math.round(s * 10000) / 10;
return s;
}
//根據(jù)pitch角及目標物與視點的水平距離求目標物與視點的相對高度
var z1 = xyDistance * Math.tan(pitchBottom/180*Math.PI);
var z2 = xyDistance * Math.tan(pitchTop/180*Math.PI);
步驟8:目標物頂部距視點的相對高度減去目標物底部距視點的相對高度得到目標物的實際高度。具體代碼如下:
//目標物頂部與視點的相對高度減去目標物底部與視點的相對高度,得出目標物的實際高度
var height = z2-z1;
height即為計算出的目標物的實際高度。
實施例2
本實施例具體說明本發(fā)明裝置的具體技術(shù)方案。
如圖1,一種基于街景地圖的目標物地理位置的三維量測算裝置,包括:
用于在街景地圖中,選定兩個視角范圍內(nèi)包含待測算的目標物的視點的裝置,包括在選定兩個視點后,調(diào)整該視點下的視角及視野范圍,將目標物調(diào)整到街景地圖的合適位置的裝置。優(yōu)選為通過旋轉(zhuǎn)街景圖像,將目標物調(diào)整到街景地圖的合適位置的裝置;具體為,通過旋轉(zhuǎn)調(diào)整街景影像,使目標物整體清晰的位于視野范圍內(nèi),無障礙物遮擋的裝置。
用于獲取所選兩個視點的經(jīng)緯度的裝置,包括從視點的拍攝參數(shù)中獲取其經(jīng)緯度的裝置;
用于在每個視點下,將目標物底部、頂部上的一點分別依次調(diào)整到街景地圖的中心位置的裝置,包括在每個視點下,將目標物底部或頂部上的一點分別依次調(diào)整到街景地圖的中心位置,所述一點選擇目標物底部或頂部的中心點或角點的裝置;
用于獲取目標物調(diào)整后各狀態(tài)下視點的視角參數(shù),包括水平角和俯仰角的裝置;
用于根據(jù)根據(jù)兩視點及視點到目標物底部的水平角,在極坐標系下構(gòu)建兩條非平行的空間直線的裝置;
用于求解兩條空間直線交點經(jīng)緯度的裝置,如圖2所示;
用于根據(jù)所選兩視點中任一視點經(jīng)緯度與目標物底部經(jīng)緯度求出視點距目標物底部在水平面上的距離,根據(jù)視點到目標物底部與頂部的俯仰角,分別求出目標物底部與頂部距視點的相對高度的裝置,如圖3所示;
用于將目標物頂部距視點的相對高度減去目標物底部距視點的相對高度的裝置。