微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Google StreetViewService报告特定位置的错误状态

如何解决Google StreetViewService报告特定位置的错误状态

我发现StreetViewService正在为没有图像的latLng对报告状态“确定”。示例代码

let sv = new google.maps.StreetViewService();
let tokyo = {lat: 35.6895,lng: 139.6917};
sv.getPanorama({location: tokyo,radius: 250},svCheck);
function svCheck(data,status) {
  if (status === 'OK') {
    console.log("OK for "+data.location.latLng+" at ID "+data.location.pano);
  }
  else {
    console.log("STATUS NOT OK");
  }
}

代码将返回状态“ OK”,但是随后请求拉出该图像的请求使我收到“抱歉,我们在这里没有图像”消息之一。例如,使用此URL(基于上面的全景ID),代码错误地返回OK状态(您必须添加自己的API密钥才能访问此链接):

https://maps.googleapis.com/maps/api/streetview?size=640x540&pano=CAoSLEFGMVFpcFB3ZWxWT21OX196WVc2ajlGeE9qbGptTHFHc2RNRjBwRlYyamhw&key=[YOUR API KEY HERE]

我的理解是,如果后续对静态API的请求实际上返回了图像,则StreetViewService的getPanorama()应该仅返回OK状态。这是怎么回事?

解决方法

这听起来像是Street View Image API中的错误。如果我使用Street View Image Metadata API从您的示例中检查了全景ID CAoSLEFGMVFpcFB3ZWxWT21OX196WVc2ajlGeE9qbGptTHFHc2RNRjBwRlYyamhw

https://maps.googleapis.com/maps/api/streetview/metadata?pano=CAoSLEFGMVFpcFB3ZWxWT21OX196WVc2ajlGeE9qbGptTHFHc2RNRjBwRlYyamhw&key=MY_API_KEY

我收到以下答复

{
  "copyright":"© Miller Yu","date":"2018-11","location":{
    "lat":35.6894875,"lng":139.6917064
  },"pano_id":"CAoSLEFGMVFpcFB3ZWxWT21OX196WVc2ajlGeE9qbGptTHFHc2RNRjBwRlYyamhw","status":"OK"
}

这意味着全景ID有效,它存在于Google数据库中,但无法通过Street View Image API使用。

我们可以看到此全景图是由外部用户上传的,因此它不是典型的Google街景图像。我知道Google过去在业务问题上遇到过麻烦。作为参考,您可以查看Google问题跟踪器中的以下错误:

https://issuetracker.google.com/issues/35829459

https://issuetracker.google.com/issues/77676413

两者都标记为固定,但是在您的情况下看起来不正确。此时,我建议再次通过其问题跟踪器向Google报告问题。

作为解决方法,请考虑仅请求Google的户外图像。如我的示例所示,您可以在街景视图全景请求中指定source属性

function initialize() {
  let svService = new google.maps.StreetViewService();
  let tokyo = {lat: 35.6895,lng: 139.6917};

  var panoRequest = {
    location: tokyo,preference: google.maps.StreetViewPreference.NEAREST,radius: 250,source: google.maps.StreetViewSource.OUTDOOR
  };

  svService.getPanorama(panoRequest,svCheck);
  function svCheck(data,status) {
    if (status === google.maps.StreetViewStatus.OK) {
      console.log("OK for "+data.location.latLng+" at ID "+data.location.pano);
      var panorama = new google.maps.StreetViewPanorama(
          document.getElementById('street-view'),{
            pano: data.location.pano,});
    } 
    else {
      console.log("STATUS NOT OK");
    }
  }
}
html,body {
  height: 100%;
  margin: 0;
  padding: 0;
}
#street-view {
  height: 100%;
}
<div id="street-view"></div>
<script async defer
         src="https://maps.googleapis.com/maps/api/js?key=AIzaSyDztlrk_3CnzGHo7CFvLFqE_2bUKEq1JEU&callback=initialize">
    </script>

修改请求后,您将获得一个全景ID rHMU4M8-OvVuL5ALS0OlNg。如果使用元数据API进行检查

https://maps.googleapis.com/maps/api/streetview/metadata?pano=rHMU4M8-OvVuL5ALS0OlNg&key=YOUR_API_KEY

您将收到以下回复

{
  "copyright":"© Google","date":"2016-07","location":{
    "lat":35.68943918433396,"lng":139.6914496241509
 },"pano_id":"rHMU4M8-OvVuL5ALS0OlNg","status":"OK"
}

此全景图属于Google,并且可以与Street View Image API正常使用

https://maps.googleapis.com/maps/api/streetview?pano=rHMU4M8-OvVuL5ALS0OlNg&size=600x400&key=YOUR_API_KEY

enter image description here

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?