如何对大量地址进行地理编码?

时间:2010-04-04 04:41:44

标签: geocoding street-address

我需要进行地理编码,即将街道地址转换为纬度,经度为~8,000个街道地址。我在http://www.gpsvisualizer.com/geocoder/使用Yahoo和Google地理编码引擎,发现对于大量地址,这些引擎(其中一个或两个)都无法执行地理编码(即返回纬度= 0,经度= 0 ),或返回错误的坐标(包括雅虎和谷歌给出不同结果的情况)。

处理此问题的最佳方法是什么?哪个引擎(通常)更准确?我很感激那些以前有过这种任务经验的人的想法,建议和想法。

2 个答案:

答案 0 :(得分: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);
  }
}

答案 1 :(得分:0)

你可以使用

https://github.com/darkphnx/fetegeo/

用于离线批量地理编码