Google 街景 API 室内 panorama.setPosition() 重定向到起始位置

Google Streetview API Indoor panorama.setPosition() redirects to start position

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

我已经找到了这个问题的原因。它与用于室内街景的 starting/entrance 位置 Google 地图有关。

两个橙色圆圈描绘了进入建筑物的两个可能 starting/entrance 点。将街景小人放在这些圆圈上时,您将进入室内街景中的建筑物。

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

谢谢!

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

上的一些示例

我找到了问题的解决方案,部分感谢@LilDevil 的回答。

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

我将全景图 ID 与某个位置的纬度、经度一起存储。单击地图时,我会计算最接近单击位置的已知位置。然后我可以查找属于该位置的全景图 ID,并使用它使用 setPano() 移动到该全景图。

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