Google maps 使用半径大于50米的getPanoramaByLocation获取最近街景的最佳方法

Google maps 使用半径大于50米的getPanoramaByLocation获取最近街景的最佳方法,google-maps,google-maps-api-3,google-street-view,Google Maps,Google Maps Api 3,Google Street View,我知道半径小于50米的getPanoramaByLocation将返回最近的街景全景。但是,对于某些位置,并不总是有街景。所以我现在做的是这样的: function insider_function(locations) { var place = new google.maps.LatLng(locations[local_idx].lat,locations[local_idx].lng); sv.getPanoramaByLocation(place, 50, funct

我知道半径小于50米的getPanoramaByLocation将返回最近的街景全景。但是,对于某些位置,并不总是有街景。所以我现在做的是这样的:

function insider_function(locations) { 
    var place = new google.maps.LatLng(locations[local_idx].lat,locations[local_idx].lng);
    sv.getPanoramaByLocation(place, 50, function(data, status) { 
    if (status == google.maps.StreetViewStatus.OK) { 
         insider_function_2(locations[local_idx], data); 
    } else { 
        sv.getPanoramaByLocation(place, 100, function(data, status) { 
        if (status == google.maps.StreetViewStatus.OK) { 
            insider_function_2(locations[local_idx], data); 
        } else { 
            alert('Internal error: ' + status + locations[local_idx]); 
        } 
    }
} 
如果radius 50没有返回任何结果,我将调用radius 100。但我仍然得到一些地址的零结果警报。如果我通过一个非常大的数字,比如9999,我可能会在其他大多数位置看到一个非常远的街景

那么,获取半径大于50的最近街景全景的最佳方法是什么呢

我不知道谷歌地图是如何做到这一点的。
例如,如果我使用坐标为37.4513333,-122.1214268的“加利福尼亚州帕洛阿尔托耿路2300号”。半径为100的getPanoramaByLocation将返回零结果,但在以下位置有街景:

如果使用radius 200进行此操作,它将显示街景,您可以查看此
jsiddle链接
: 因为半径为50的地址周围没有街景数据。但是如果你提供一个更大的半径,它将显示一个街景

从您提供的谷歌地图链接()中,它不会显示“加利福尼亚州帕洛市阿尔托市耿路2300号”的街景,而是显示距离“耿路2300号”约200半径的E Bayshore路的街景

在您的情况下,如果谷歌地图没有返回任何街景数据,您可能只需要创建另一个半径更大的函数。

这方面的谷歌工程师解释了这个问题。下面是从该线程获得的两个选项

  • 使用1000(1K)的半径,这在获取最近的全景图时“大部分”都起作用。(我发现这确实很有效。)

  • 运行两个或多个搜索。从大半径开始搜索,然后向下搜索,而不是从小半径开始向上搜索。当找到半径较大的全景位置时,使用搜索点和找到的结果全景之间的距离作为下次搜索的半径值。根据工程师的意见,您“可能”只需要运行两个搜索请求


  • 所以我必须为给定位置多次调用sv.getPanoramaByLocation才能获得封闭的街景?这将延迟网站完成加载。或者你可以使用更大的半径。