我需要進行地理編碼,即將街道地址轉換爲約8,000個街道地址的緯度,經度。我在http://www.gpsvisualizer.com/geocoder/上使用了雅虎和Google地理編碼引擎,並發現對於大量地址,這些引擎(其中一個或兩者)無法執行地理編碼(即返回緯度= 0,經度= 0),或返回錯誤的座標(包括雅虎和Google給出不同結果的情況)。如何對大量地址進行地理編碼?
解決此問題的最佳方法是什麼?哪個引擎(通常)更精確?我很感激來自曾經有過這種任務經驗的人的任何想法,建議和想法。
我需要進行地理編碼,即將街道地址轉換爲約8,000個街道地址的緯度,經度。我在http://www.gpsvisualizer.com/geocoder/上使用了雅虎和Google地理編碼引擎,並發現對於大量地址,這些引擎(其中一個或兩者)無法執行地理編碼(即返回緯度= 0,經度= 0),或返回錯誤的座標(包括雅虎和Google給出不同結果的情況)。如何對大量地址進行地理編碼?
解決此問題的最佳方法是什麼?哪個引擎(通常)更精確?我很感激來自曾經有過這種任務經驗的人的任何想法,建議和想法。
向Google地理編碼服務發送大量請求時,您需要在響應開始失敗時限制請求。在這裏給你一個更好的主意是我寫的一個Drupal(PHP)模塊的片段。
function gmap_api_geocode($address) {
$delay = 0;
$api_key = keys_get_key('gmap_api');
while(TRUE) {
$response = drupal_http_request('http://maps.google.com/maps/geo?q='. drupal_urlencode($address) .'&output=csv&sensor=false&oe=utf8&key='. $api_key);
switch($response->code) {
case 200: //OK
$data = explode(',', $response->data);
return array(
'latitude' => $data[2],
'longitude' => $data[3],
);
// Adopted from http://code.google.com/apis/maps/articles/phpsqlgeocode.html
case 620: //Too many requests
$delay += 100000;
break;
default:
return FALSE;
}
usleep($delay);
}
}