本發(fā)明涉及街景地圖、電子地圖學、攝影測量、GIS、Web服務(wù)、計算機圖形學等領(lǐng)域,其目的是在現(xiàn)有街景地圖資源的基礎(chǔ)上,實現(xiàn)街景地圖中目標物實際地理位置的直接量測。具體涉及Http請求、笛卡爾坐標系下的空間直線確定、前方交匯等內(nèi)容。
背景技術(shù):
街景地圖是一種實景地圖服務(wù)。為用戶提供城市、街道或其他環(huán)境提供水平方向360°及垂直方向180°的街道全景,用戶可以通過該服務(wù)獲得如臨其境的地圖瀏覽體驗。通過街景,只要坐在電腦前就可以真實的看到街道上的高清景象。它是一種運用多路攝像機對真實場景進行多角度環(huán)視圖像采集之后,再利用計算機進行后期融合處理,并加載播放程序來完成的一種三維虛擬展示技術(shù)。
近年來,隨著互聯(lián)網(wǎng)技術(shù)的飛速發(fā)展,三維全景、虛擬游覽等各種以全景圖像信息為基礎(chǔ)的應(yīng)用服務(wù),越來越多地進入了人們的日常生活。街景地圖實現(xiàn)了二維三維相結(jié)合的虛擬現(xiàn)實場景,給使用者能夠帶來身臨其境的觀感。
目前,國外的Google公司,國內(nèi)的百度、騰訊等信息技術(shù)和互聯(lián)網(wǎng)公司,均推出了面向城市街景的地圖服務(wù)。但是,這些街景地圖主要用于展覽展示,嚴重浪費了街景圖像中蘊含的大量信息。與傳統(tǒng)的二維地圖相比,街景地圖無法實現(xiàn)對街景圖像中地物的定位、量測,極大地限制了街景技術(shù)的廣泛應(yīng)用。
針對目前街景地圖僅可用于展覽展示的不足,本發(fā)明提出基于現(xiàn)有街景地圖的二維量測算法,實現(xiàn)對街景圖像中地物的實際地理坐標的快速獲取。
技術(shù)實現(xiàn)要素:
本發(fā)明旨在解決現(xiàn)有街景地圖無法獲取街景圖片中目標物的實際地理位置問題。在街景地圖為用戶提供更加真實準確、更富有畫面細節(jié)的地圖服務(wù)的基礎(chǔ)上,本發(fā)明可以實現(xiàn)街景地圖中目標物實際地理位置的量測,使街景地圖中特有的豐富信息得到利用,拓展街景在實際生產(chǎn)生活中的應(yīng)用。
為實現(xiàn)上述技術(shù)目的,本發(fā)明采用如下技術(shù)方案:
基于街景地圖的目標物地理位置的二維量測算方法,包括如下步驟:
1)在街景地圖中,選定兩個視角范圍內(nèi)包含待測算目標物的視點;
2)獲取所選兩個視點的經(jīng)緯度;
3)在選取的兩個視點處分別添加可拖動標記點,分別拖動兩個標記點至標記點對應(yīng)的視點下目標物所在位置;其中,兩個標記點拖動后的位置在兩個視點下均位于目標物的同一點;如在視點1下拖至目標物的A點,在視點2下同樣要拖至目標物的A點;
4)獲取拖動后標記點的經(jīng)緯度;
5)根據(jù)兩視點及拖動后標記點的經(jīng)緯度,在笛卡爾坐標系下構(gòu)建兩條非平行的空間直線;
6)求出兩條空間直線交點的經(jīng)緯度,即為目標物的真實經(jīng)緯度。
本發(fā)明的方法中,所述步驟1)包括,選定兩個視點后,調(diào)整該視點下的視角及視野范圍,將目標物調(diào)整到街景地圖的合適位置;
進一步的,可通過旋轉(zhuǎn)、放大或縮小街景影像,將目標物調(diào)整到街景地圖的合適位置;
具體為,通過旋轉(zhuǎn)調(diào)整街景影像,使目標物大致位于屏幕中央,并且目標物整體清晰的位于視野范圍內(nèi),無障礙物遮擋;
通過放大或縮小街景影像調(diào)整目標物在視野范圍內(nèi)的顯示尺寸,使得目標物不至于太小而看不清,也不至于過大而超出屏幕范圍。
其中,所述視點是指,拍攝該街景圖像時相機所在地理位置,以經(jīng)緯度表示。不同視點是指拍攝街景圖片時相機的地理位置不同。
視點下目標物的經(jīng)緯度非目標物的真實經(jīng)緯度,是視點到目標物構(gòu)成的射線上的某一不確定點的經(jīng)緯度。根據(jù)已知視點的經(jīng)緯度及視點下目標物的經(jīng)緯度,在笛卡爾坐標系下,可以確定出一條空間直線。兩個不同的視點則構(gòu)建出兩條不同的空間直線;
所述步驟3)中,兩個標記點拖動至目標物中心點的位置。
所述步驟2)、步驟4)中,經(jīng)緯度從標記點所在視點下的拍攝參數(shù)中獲取。
本發(fā)明的算法可以概括為:在街景地圖中,首先選定一個目標物,根據(jù)目標物選擇兩個合適的視點;分別獲取兩個視點的經(jīng)緯度,在兩個視點所在位置分別添加一個可拖動的標記點,將此標記點拖動至相應(yīng)視點下街景地圖中目標物所在位置,獲取移動后的標記點的地理坐標,即該視點下目標物的經(jīng)緯度;根據(jù)已知視點的經(jīng)緯度及視點下目標物的經(jīng)緯度,在笛卡爾坐標系下,確定兩條空間直線,前方交匯,求出交點,該交點即為目標物的實際地理空間中的經(jīng)緯度。
本發(fā)明有效的利用了現(xiàn)有的街景資源,實現(xiàn)了街景地圖中地物的地理位置的直接獲取,有利于現(xiàn)有街景資源在智慧城市、智能交通等方面的進一步應(yīng)用。
附圖說明
圖1是本發(fā)明方法的流程圖;
圖2是本發(fā)明方法中由兩視點及目標物的位置確定的兩條空間直線前方交匯示意圖。
具體實施方式
下面結(jié)合附圖和實施例作進一步詳細說明。
實施例1
本實施例以Google公司的街景地圖為例,對本發(fā)明的技術(shù)方案作進一步描述。如圖1所示,本發(fā)明的流程包括如下步驟:
步驟1:在Google街景地圖中,對于一個待測算目標物,選擇兩個視角范圍內(nèi)包含待測算目標物的合適視點;
步驟2:獲取街景地圖中選取的兩個視點的經(jīng)緯度;
步驟3:在選取的兩個視點位置處添加可拖動標記點,分別將兩個標記點拖動至標記點對應(yīng)的視點下目標物所在位置;
步驟4:獲取拖動后標記點的經(jīng)緯度;
步驟5:根據(jù)兩視點及兩視點下目標物的經(jīng)緯度,在笛卡爾坐標系下構(gòu)建兩條非平行的空間直線;由兩視點及目標物的位置確定的兩條空間直線前方交匯示意圖如圖2所示;
步驟6:求出兩條直線交點,交點的經(jīng)緯度即為目標物的真實經(jīng)緯度。
具體實施步驟如下:
步驟1:首先選擇一個特定的目標物,對于該目標物選擇Google街景地圖中兩個不同的合適的視點,并分別在這兩個視點下將目標物調(diào)整到街景地圖的合適位置;
所述視點是指,拍攝該街景圖像時相機所在地理位置,以經(jīng)緯度表示。不同視點是指拍攝街景圖片時相機的地理位置不同。合適的視點是指,相機在該位置所拍攝的街景影像,經(jīng)過旋轉(zhuǎn)調(diào)整,可以清晰地看到目標物整體,無障礙物遮擋。
所述目標物調(diào)整到街景地圖合適位置是指通過旋轉(zhuǎn)調(diào)整街景影像,使目標物大致位于屏幕中央,放大或縮小影像,使得目標物不至于太小而看不清,也不至于過大而超出屏幕范圍。
步驟2:根據(jù)Google街景地圖相關(guān)服務(wù)分別獲取兩個街景視點的經(jīng)緯度;街景地圖的拍攝參數(shù)中即包含視點的經(jīng)緯度信息,其他街景地圖可采用相應(yī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:根據(jù)獲得的視點經(jīng)緯度,在街景地圖的視點位置添加一個可拖動的標記點,將標記點移動至該視點下目標物所在位置;實現(xiàn)的代碼具體如下:
//在視點位置添加可拖動的標記點
var marker = new google.maps.Marker({
position: panorama.getPosition(), //標記點位置為視點經(jīng)緯度
draggable: true,//可拖動
animation: google.maps.Animation.DROP
});
其中,marker為添加的標記點,設(shè)置marker為可拖動標記點;
步驟4:根據(jù)Google街景地圖相關(guān)服務(wù)獲取兩視點下拖動后的標記點的經(jīng)緯度;
//獲取拖動過的標記點的位置
var latM=marker.getPosition().lat();
var lngM=marker.getPosition().lng();
其中,latM為拖動后的標記點緯度,lngM為拖動后標記點的經(jīng)度;
步驟5:視點下目標物的經(jīng)緯度非目標物的真實經(jīng)緯度,是視點到目標物構(gòu)成的射線上的某一不確定點的經(jīng)緯度。根據(jù)已知視點的經(jīng)緯度及視點下目標物的經(jīng)緯度,在笛卡爾坐標系下,可以確定出一條空間直線。兩個不同的視點則構(gòu)建出兩條不同的空間直線,具體代碼如下:
//k1,k2分別為兩條空間直線的斜率
var k1 = (lngM1 - lng1)/(latM1 - lat1);
var k2 =(lngM2 - lng2)/(latM2 - lat2);
//b1,b2別為兩條空間直線的截距
var b1 = lat1 - k1*lng1;
var b2 = lat2 - k2*lng2;
步驟6:根據(jù)兩條直線方程,前方交匯,求出交點,該交點的經(jīng)緯度值即為目標物的實際地理位置,具體代碼如下:
//兩投影直線的交點,即目標物的地理位置
var lngT = (b2 - b1)/(k1 - k2);
var latT = y0 * k1 + b1;
其中,lngT為目標物的經(jīng)度,latT為目標物的緯度。