Как геокодировать большое количество адресов? - PullRequest
1 голос
/ 04 апреля 2010

Мне нужно геокодировать, то есть перевести уличный адрес в широту, долготу для ~ 8000 уличных адресов. Я использую механизмы геокодирования Yahoo и Google на http://www.gpsvisualizer.com/geocoder/, и обнаружил, что для большого количества адресов эти механизмы (один из них или оба) либо не могут выполнять геокодирование (то есть возврат широты = 0, долготы = 0 ) или вернуть неправильные координаты (в том числе случаи, когда Yahoo и Google дают разные результаты).

Как лучше всего решить эту проблему? Какой двигатель (обычно) более точный? Буду признателен за любые мысли, предложения, идеи от людей, которые ранее имели опыт работы с такого рода задачами.

Ответы [ 2 ]

3 голосов
/ 04 апреля 2010

При выполнении большого количества запросов к службе геокодирования 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);
  }
}
0 голосов
/ 08 декабря 2010

вы можете использовать

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

для автономного пакетного геокодирования

...