【问题标题】:Google StreetViewService Reports Incorrect Status for Specific LocationGoogle StreetViewService 报告特定位置的错误状态
【发布时间】:2020-08-18 02:31:21
【问题描述】:

我发现 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——基于上面的 pano ID——代码错误地返回 OK 状态(您必须通过自己的 API 密钥添加才能访问此链接):

https://maps.googleapis.com/maps/api/streetview?size=640x540&pano=CAoSLEFGMVFpcFB3ZWxWT21OX196WVc2ajlGeE9qbGptTHFHc2RNRjBwRlYyamhw&key=[YOUR此处的 API 密钥]

我的理解是,StreetViewService 的 getPanorama() 只有在对静态 API 的后续请求实际上会返回图像时才会返回状态 OK。这是怎么回事?

【问题讨论】:

  • 总是很高兴看到用户提出问题,得到答案,但不提供任何反馈。
  • 我去尝试答案,但忘了回来投票。固定。
  • 如果它解决了您的问题,那么您应该接受它。

标签: google-maps google-street-view google-street-view-static-api


【解决方案1】:

这听起来像是 Street View Image API 中的一个错误。如果我使用街景图像元数据 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"
}

这意味着 pano id 是有效的,它存在于 Google 数据库中,但不能通过 Street View Image API 获得。

我们可以看到这张全景图是由外部用户上传的,所以它不是典型的谷歌街景图像。我知道 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&amp;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&amp;size=600x400&amp;key=YOUR_API_KEY

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-02-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-11-06
    • 1970-01-01
    相关资源
    最近更新 更多