2010-04-04 72 views
1

我需要進行地理編碼,即將街道地址轉換爲約8,000個街道地址的緯度,經度。我在http://www.gpsvisualizer.com/geocoder/上使用了雅虎和Google地理編碼引擎,並發現對於大量地址,這些引擎(其中一個或兩者)無法執行地理編碼(即返回緯度= 0,經度= 0),或返回錯誤的座標(包括雅虎和Google給出不同結果的情況)。如何對大量地址進行地理編碼?

解決此問題的最佳方法是什麼?哪個引擎(通常)更精確?我很感激來自曾經有過這種任務經驗的人的任何想法,建議和想法。

回答

3

向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); 
    } 
} 
相關問題