views:

174

answers:

1

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.

+1  A: 

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