Google Streetview API室内panorama.setPosition()重定向到开始位置

时间:2015-11-28 12:39:03

标签: javascript google-maps google-maps-api-3 google-street-view

我正在使用Google Maps JS API开发Google Streetview室内应用程序。我正在使用Google街景上提供的全景图片。我有时想以编程方式改变位置,例如当有人点击小地图中的位置时。但是,当我调用panorama.getPosition()时,我会自动重定向到不同的位置。我实际上可以看到position_changed事件被触发两次。

我已经找到了这个问题的原因。它与谷歌地图用于街景室内的起始/入口位置有关。

Google Maps screenshot

两个橙色圆圈描绘了进入建筑物的两个可能的起点/入口点。将街景小人放在这些圈子上时,您将进入Streetview Indoor的建筑物。

看起来当这些起点存在时,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问题甚至是预期的行为。

谢谢!

2 个答案:

答案 0 :(得分:0)

您无法将全景设置为任何坐标。您需要将getPanorama()与起始坐标和半径一起使用,以找到最近全景的坐标,然后将全景设置为那些坐标。 https://developers.google.com/maps/documentation/javascript/streetview?hl=en

上的一些示例

答案 1 :(得分:0)

我找到了解决问题的方法,部分归功于@LilDevil的答案。

某个位置的每张全景图都有一张全景ID。如果您事先知道全景ID,则可以使用setPano()将其移动到该位置。

我将全景ID与位置的lat,lng一起存储。当点击地图时,我计算最接近点击位置的已知位置。然后,我可以查找属于此位置的全景ID,并使用它来使用setPano()移动到该全景。

这似乎不是一种解决问题的非常简洁的方法,因为全景ID可能会随着时间的推移而改变(例如,当新的全景图片上传到Google Streetview时)。但是,我在文档中找不到任何不应该使用此方法的内容。文档说在处理自定义全景图片时应该使用这种方法,在我的情况下并非如此。此外,在这种特定情况下,我们可以控制何时上传新的全景图片(因为它适用于Google Indoor),因此如果发生这种情况,我可以更改存储的全景ID。