gpt4 book ai didi

javascript - 如果发现街道数据 ZERO_RESULTS,Google 街景 JS APIv3 重试请求

转载 作者:行者123 更新时间:2023-11-28 07:02:14 28 4
gpt4 key购买 nike

当我在 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 具有 50 米处的街景数据,而标记 A 则没有。 JSFiddle

最佳答案

假设程序中的其他地方不存在全景图查询调用太快(超出查询限制)的冲突,那么可能的解决方案是使用带有超时的函数来处理查询。

function getPanorama(args){
setTimeout(function(){
sv.getPanorama(args, function(data, status){processSVData(data, status, args);
//need to pass args to callback to properly increment
}, query_limit_delay);
}

processSVData中:

function processSVData(data, status, args){
//code
} else if (status === google.maps.StreetViewStatus.ZERO_RESULTS) {
if(args.radius < 100){
args.radius += 10; //increase radius by 10 meters
getPanorama(args);
}
}
//code
}

基本上,这 1) 调用 getPanorama 函数。一旦延迟(不超过查询限制)过去,它将返回的数据发送到回调。如果存在 ZERO_RESULTS,则前一个查询的半径增加 10,然后重复该过程。但是,如果数据显示,则处理数据并退出循环。

通过调用以下内容来发起查询:

marker1.addListener('click', function(event) {
popup1.open(map, marker1);
getPanorama({location: event.latLng, radius: 50});
});

祝您申请顺利!

关于javascript - 如果发现街道数据 ZERO_RESULTS,Google 街景 JS APIv3 重试请求,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32032824/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com