使用镭大于50米的getPanoramaByLocation获取最近街道视图的最佳方法

时间:2015-02-05 06:14:53

标签: 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, 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]); 
        } 
    }
} 

如果半径50没有返回任何结果,我调用半径100.但是我仍然收到某个地址的ZERO_RESULT警报。如果我通过一个非常大的数字,例如9999,我可以在大多数其他位置获得一个非常远的街景,并且有一个封闭的街景。

那么获得半径大于50的最近的街景全景的最佳方法是什么。

我不确定谷歌地图是如何做到这一点的 例如,如果我使用“2300 Geng Rd,Palo Alto,CA”,其坐标为37.4513333,-122.1214268。半径为100的getPanoramaByLocation将返回ZERO结果,但是有以下街道视图: https://www.google.com/maps/place/2300+Geng+Rd,+Palo+Alto,+CA+94303/@37.4513333,-122.1214268

2 个答案:

答案 0 :(得分:2)

thread中的Google工程师解释了此问题。以下是从该主题中获得的两个选项。

  1. 使用半径为1000(1K)的“半径”,可以“获取”最近的全景。 (我发现这确实很有效。)

  2. 运行两次或多次搜索。以较大的半径开始搜索并向下工作,而不是从小开始工作。当找到具有较大半径的全景位置时,请使用搜索点与生成的全景之间的距离作为下一次搜索的半径值。根据工程师的评论,你“可能”只需要运行两个搜索请求。

答案 1 :(得分:1)

如果您使用半径200执行此操作,它将显示街景视图,您可以查看此jsfiddle linkhttp://jsfiddle.net/8ujnbh62/ 因为您的地址周围没有半径为50的街道视图数据。但是如果您提供更大的半径,它将显示街景。

通过您提供的Google地图链接(https://www.google.com/maps/place/2300+Geng+Rd,+Palo+Alto,+CA+94303/@37.4513333,-122.1214268),它不会为您提供" 2300 Geng Rd,Palo,Alto,CA"的街景视图,而是为您提供街景视图E Bayshore公路距离" 2300 Geng Rd"大约200半径。

在您的情况下,如果Google地图没有返回任何街景数据,您可能只会制作半径更大的其他功能。