如果街道数据找到ZERO_RESULTS,Google街景JS JSv3重试请求

时间:2015-08-16 07:28:04

标签: javascript google-maps oop google-street-view google-api-v3

当我在最大半径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

1 个答案:

答案 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");
        }
    });
}