我知道半径小于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
答案 0 :(得分:2)
此thread中的Google工程师解释了此问题。以下是从该主题中获得的两个选项。
使用半径为1000(1K)的“半径”,可以“获取”最近的全景。 (我发现这确实很有效。)
运行两次或多次搜索。以较大的半径开始搜索并向下工作,而不是从小开始工作。当找到具有较大半径的全景位置时,请使用搜索点与生成的全景之间的距离作为下一次搜索的半径值。根据工程师的评论,你“可能”只需要运行两个搜索请求。
答案 1 :(得分:1)
如果您使用半径200执行此操作,它将显示街景视图,您可以查看此jsfiddle link
:http://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地图没有返回任何街景数据,您可能只会制作半径更大的其他功能。