0

我正在使用Google Maps JS API在谷歌街景室內應用程序上工作。我正在使用Google Streetview上提供的全景圖片。我有時希望以編程方式改變位置,例如有人點擊小地圖上的位置時。但是,當我調用panorama.getPosition()時,我會自動重定向到不同的位置。我實際上可以看到兩次觸發position_changed事件。谷歌街景API室內panorama.setPosition()重定向到開始位置

我已經找到了這個問題的原因。這與谷歌地圖在Streetview室內使用的開始/入口位置有關。

Google Maps screenshot

的兩個橙色圓圈描繪了兩個可能的起點/入口點進入大樓。當將pegman放在這些圓圈上時,您將進入街景室內的建築。

看起來像這些起點存在時,Google Maps API不會讓您以編程方式將位置設置爲某個位置,而不是任何起點。它會始終將您重定向到其中一個起點。這顯然不是我想要的。

//The starting/entrance position is lat: 52.089988, lng: 5.178041 
//The position I want to go to 
var goToPosition = {lat: 52.0898852, lng: 5.1780344}; 

//Position changed EventListener 
google.maps.event.addListener(panorama, 'position_changed', function() { 
    var newPosition = panorama.getPosition(); 
    console.log('changed position to:', newPosition.lat(), newPosition.lng()); 
}); 

//Calling setPosition with goToPosition 
panorama.setPosition(goToPosition); 

//Will result in two console.logs directly printed after another: 
changed position to: 52.0898852 5.1780344 //goToPosition 
changed position to: 52.089988 5.178041 //starting position 

的console.logs表明,它看起來像的位置被後直接互相更換兩次,結束在起始位置的位置。

我想知道是否有任何其他人遇到過這個問題,以及是否有已知的解決方法。我正在聯繫將全景圖片上傳到Google的攝影師。也許這些圖片上傳到Google並進行配置的方式有所不同。我想知道這是否可以在我的應用程序代碼中解決,或者是API問題還是預期的行爲。

謝謝!

回答

0

我發現了我的問題的解決方案,部分得益於@ LilDevil的答案。

位置的每個全景圖都有一個全景圖ID。如果您事先知道全景ID,則可以使用setPano()移動到該位置。

我將全景ID連同lat,lng的位置一起存儲。當點擊地圖時,我計算離點擊位置最近的已知位置。然後,我可以查找屬於此位置的全景ID,並使用setPano()將其移至該全景圖。

這似乎不是一個非常乾淨的方式來解決問題,因爲全景ID可能隨時間而改變(例如,當新的全景圖片上傳到谷歌街景)。但是,在文檔中找不到應該使用此方法的任何內容。該文件說,處理自定義全景照片時應使用此方法,但在我的情況中並非如此。此外,在這種特定情況下,我們正在控制何時上傳新的全景圖片(因爲它適用於Google Indoor),所以如果發生這種情況,我可以更改存儲的全景圖ID。

0

你不能只將全景設置爲任何座標。你需要使用getPanorama()和你的起始座標和半徑來找到最近的全景圖的座標,然後將座標設置爲這些座標。 https://developers.google.com/maps/documentation/javascript/streetview?hl=en

+0

我試過你的建議,但使用getPanorama()我得到了相同的結果。鑑於任何我確信有全景可用的座標,這將始終返回兩個起始位置之一。但是,您確實可以幫助我找到正確的解決方案。我在下面提供了我的解決方案。儘管它確實感覺有點破爛... – Theodorus