使用gmaps v3的地理编码对多个地址进行地理编码

时间:2012-10-17 21:12:31

标签: google-geocoder

我需要使用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倍......

1 个答案:

答案 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具有非常软的速率限制,但是一些请求可能由于高服务器负载等而失败。