1

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

处理这个问题的最佳方法是什么?哪个引擎(通常)更准确?我将不胜感激以前有过此类任务经验的人的任何想法、建议和想法。

4

2 回答 2

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);
  }
}
于 2010-04-04T05:05:37.000 回答
0

您可以使用

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

用于离线批量地理编码

于 2010-12-08T19:49:15.330 回答