2012-10-17 123 views
0

我需要使用gmap V3的地理編碼對幾個地址進行地理編碼。首先,我嘗試了只有一個,它的工作,但是當我傳遞了我在Json中的幾個地址時,它只顯示了第一個地址的座標。使用gmaps v3的地理編碼對多個地址進行地理編碼

我試過這段代碼:

$(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); 
     } 
    }); 
} 

然後它並沒有給我的錯誤,但它ahows我11倍相同的座標...

+0

您是否在一次調用中傳遞多個地址?也許你正在達到任何API限制。錯誤代碼/消息是否返回? – Philip

+0

不,我在一個循環中進行了多個呼叫,在每個代碼中我傳遞了一個地址 – Migua

+0

我認爲您已達到使用限制。 API響應的外觀如何,HTTP狀態碼是什麼? – Philip

回答

0

兩年前,谷歌已經推出了相當嚴格的政策到其地圖API。 (V3準確地說,的政策 - 仍然活躍 - V2是柔和。)地址解析API是特別嚴格:

的谷歌地理編碼API的使用受每2500個 地理位置查詢請求限制天。 [...]此外,我們強制實施請求速率限制以防止濫用服務。 [...] 注意:地理編碼API只能與Google地圖一起使用;禁止在地圖上顯示地理編碼結果。

https://developers.google.com/maps/documentation/geocoding/#Limits

但是谷歌已經與建議網頁如何處理是:

https://developers.google.com/maps/articles/geocodestrat

一種策略顯然是緩存,作爲一個部分也有提及。另一個正在等待下一個請求。

也許你應該改變APIs,如果你必須做很多請求並且買不起商業軟件包。我已經取得了很好的OSM API經驗:http://wiki.openstreetmap.org/wiki/Nominatim

至少反向地理編碼器對我來說工作得很好。您可以使用jQuery的ajax()函數發出請求,並可以執行您自己的錯誤處理。儘管OSM具有非常柔和的速率限制,但由於高服務器負載等原因,某些請求可能會失敗。