【问题标题】:Google Streetview API Indoor panorama.setPosition() redirects to start position谷歌街景 API 室内全景.setPosition() 重定向到起始位置
【发布时间】:2015-11-28 12:39:03
【问题描述】:

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

我已经找到了这个问题的原因。它与 Google 地图用于 Streetview Indoor 的起始/入口位置有关。

两个橙色圆圈描绘了进入建筑物的两个可能的起点/入口点。将街景小人放在这些圆圈上时,您将进入 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 问题,甚至是预期的行为。

谢谢!

【问题讨论】:

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


    【解决方案1】:

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

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

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

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

    【讨论】:

      【解决方案2】:

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

      【讨论】:

      • 我尝试了你的建议,但使用 getPanorama() 我得到了相同的结果。鉴于我确信有可用全景图的任何坐标,这将始终返回两个起始位置之一。但是,您确实帮助我朝着正确的方向找到了解决方案。我在下面提供了我的解决方案作为答案。虽然它确实感觉有点像黑客......
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多