我需要进行地理编码,即将街道地址转换为纬度,经度为~8,000个街道地址。我在http://www.gpsvisualizer.com/geocoder/使用Yahoo和Google地理编码引擎,发现对于大量地址,这些引擎(其中一个或两个)都无法执行地理编码(即返回纬度= 0,经度= 0 ),或返回错误的坐标(包括雅虎和谷歌给出不同结果的情况)。
处理此问题的最佳方法是什么?哪个引擎(通常)更准确?我很感激那些以前有过这种任务经验的人的想法,建议和想法。
答案 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)