问题描述
我发现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密钥才能访问此链接):
我的理解是,如果后续对静态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