开发者

How to geocode a large number of addresses?

I need to geocode, i.e. translate street address to latitude,longitude for ~8,000 street addresses. I am using both Yahoo and Google geocoding engines at http://www.gpsvisualizer.com/geocoder/, and found out that for a large number of addresses those engines (one of开发者_运维技巧 them or both) either could not perform geocoding (i.e.return latitude=0,longitude=0), or return the wrong coordinates (incl. cases when Yahoo and Google give different results).

What is the best way to handle this problem? Which engine is (usually) more accurate? I would appreciate any thoughts, suggestions, ideas from people who had previous experience with this kind of task.


When doing a large number of requests to Google geocoding service you need to throttle the requests as responses start failing. To give you a better idea here is a snippet from a Drupal (PHP) module that I wrote.

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);
  }
}


you can use

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

for offline batch geocoding

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜