我需要使用gmap V3的地理编码对几个地址进行地理编码。首先我尝试了只有一个并且它有效,但是当我在Json中传递了几个地址时,它只显示了第一个地址的坐标。
我试过这段代码:
$(document).ready(function() {
getcoords(datos);
});
function getcoords(datos){
Locgoogle = new google.maps.Geocoder();
var dataJson = eval(datos);
for(i=0;i<10;i++){
var dir=dataJson[i].dir ;
var id=dataJson[i].id ;
alert(dir);
setTimeout(function() {GoogleCall(dir,id)}, 30000);
}
}
function GoogleCall(dir, id) {
Locgoogle.geocode({
address: dir
}, function(results,status) {
if (status == google.maps.GeocoderStatus.OK) {
var lat1 = results[0].geometry.location.lat();
var lng1 = results[0].geometry.location.lng();
$("#testDiv").append("latitudeGoogle:" + lat1 + "<p>longitudeGoogle:" + lng1 + "</p>");
} else {
alert("Geocode was not successful for the following reason: " + status);
}
});
}
然后它不会给我错误,但它让我看到相同坐标的11倍......
答案 0 :(得分:0)
两年前,Google已对其Maps API引入了相当严格的政策。 (准确地说,V3的政策 - 仍然活跃 - V2更软。)地理编码API特别严格:
使用Google地理编码API的查询限制为2,500 每天的地理位置请求。 [...]此外,我们强制执行请求速率限制以防止滥用服务。 [...] 注意:地理编码API只能与Google地图结合使用;禁止在地图上显示地理编码结果。
https://developers.google.com/maps/documentation/geocoding/#Limits
然而,Google有一个网页,其中包含如何处理该问题的建议:https://developers.google.com/maps/articles/geocodestrat
一种策略显然是缓存,如一节中所述。另一个是等到下一个请求。
如果你不得不做这么多的请求并且买不起商业套餐,也许你应该改变API。我在OSM API方面取得了很好的经验:http://wiki.openstreetmap.org/wiki/Nominatim
至少反向Geocoder对我来说非常好。您可以使用jQuery的ajax()
函数发出请求,并可以自己进行适当的错误处理。尽管OSM具有非常软的速率限制,但是一些请求可能由于高服务器负载等而失败。