当我在最大半径50米范围内获得标记的全景图时,有时它会找不到全景图,但如果我设置了大约60米半径的标记,那么它就会起作用。
所以我想自动再次提出半径+10米的街道数据请求,如果在100米以下找不到任何东西,则完全停止。
我知道如何在程序性JS中使用for或while循环它,但我不知道OOP JS所以我不确定在何处/如何根据函数响应再次触发请求。
基本上代码看起来像
marker1.addListener('click', function(event) {
popup1.open(map, marker1);
sv.getPanorama({location: event.latLng, radius: 50}, processSVData);
});
...
function processSVData(data, status) {
if (status === google.maps.StreetViewStatus.OK) {
panorama.setPano(data.location.pano);
panorama.setPov({
heading: 270,
pitch: 0
});
panorama.setVisible(true);
} else if (status === google.maps.StreetViewStatus.ZERO_RESULTS) {
alert(status + " need to retry with radius +10 merters but how?");
} else {
alert(status + " cant do nothing about it bye");
}
}
此处的完整示例标记 B 在标记 A 时没有50米的街景数据。 JSFiddle
答案 0 :(得分:0)
如果此API存在查询限制,我还没有达到。我实现了一个递归函数。尝试类似:
marker1.addListener('click', function(event) {
popup1.open(map, marker1);
processSVData(event.latLng, 50); // first try 50 meters
});
function processSVData(loc,rad) {
sv.getPanorama({location:loc, radius:rad}, function(data,status){
if (status===google.maps.StreetViewStatus.ZERO_RESULTS) {
processSVData(loc,rad+10); // increment by 10 meters
} else if (status===google.maps.StreetViewStatus.OK) {
// Success!
panorama.setPano(data.location.pano);
panorama.setPov({
heading: 270,
pitch: 0
});
panorama.setVisible(true);
} else {
// Failure
alert(status + " cant do nothing about it bye");
}
});
}