2013-10-22 5 views
0

우리 회사는 주소 목록을 지오 코딩하기 위해 전임자가 개발 한 기능을 사용하고 있습니다. 그러나 지난 주부터 반환 된 결과는 몇 미터가 아니라 수십 또는 수백 킬로미터로 부정확합니다.Yahoo BOSS Placefinder 부정확 한 결과

Yahoo! BOSS API를 PlaceFinder와 함께 사용하기로 결정했습니다. 여기에 함수는 다음과 같습니다

function geocode_yahoo($address,$city,$state,$country) { 
    $url = "http://yboss.yahooapis.com/geo/placefinder"; 
    $cc_key = "***masked for security reason ***"; 
    $cc_secret = "***masked for security reason ***";  
    $consumer = new OAuthConsumer($cc_key, $cc_secret); 
    $address = array($address, $city, $state, $country); 
    $address = array_filter($address); 
    $args = array(); 
    $args["q"] = rawurlencode(implode(' ', $address)); 
    $args["flags"] = "CJ"; 
    $request = OAuthRequest::from_consumer_and_token($consumer, NULL,"GET", $url,$args); 
    $request->sign_request(new OAuthSignatureMethod_HMAC_SHA1(), $consumer, NULL); 
    $url = sprintf("%s?%s", $url, OAuthUtil::build_http_query($args)); 
    $ch = curl_init($url); 
    $headers = array($request->to_header()); 
    curl_setopt($ch,CURLOPT_ENCODING , "gzip"); 
    curl_setopt($ch, CURLOPT_HTTPHEADER, $headers); 
    curl_setopt($ch, CURLOPT_URL, $url); 
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE); 
    $rsp = curl_exec($ch); 
    if ($rsp != '') { 
     $data = json_decode($rsp); 
     if ($data && $data->bossresponse->responsecode == '200' && intval($data->bossresponse->placefinder->count)>0) { 
      return (object) array('lat'=>$data->bossresponse->placefinder->results[0]->latitude, 'lng'=>$data->bossresponse->placefinder->results[0]->longitude); 
     } 
    } 
return false; 

}

모든 주소는 캐나다인 사용하고, 우리는 제대로 클래스의 Oauth를 사용하고 있습니다. 지난 주부터 반환 된 결과는 의미가 없습니다. 예를 들어

, 내가 주소를 입력하면 그리피스 도로, 밴더 후프, BC, 캐나다, 나는 야후 BOSS에서 다음 복귀 한 5275 : 당신이 볼 수 있듯이

5275 Griffith Road, Vanderhoof, BC, CANADA 

{"bossresponse":{"responsecode":"200","placefinder":{"start":"0","count":"8","request":"flags=CJ&locale=CA&q=5275%2520Griffith%2520Road%252C%2520Vanderhoof%252C%2520BC%252C%2520CANADA","results": 

[{"quality":"59","latitude":"-36.71462","longitude":"139.989586","offsetlat":"-36.714619","offsetlon":"139.989578","radius":"64700"}, 
{"quality":"59","latitude":"47.5714","longitude":"8.115335","offsetlat":"47.5714","offsetlon":"8.11533","radius":"2100"}, 
{"quality":"59","latitude":"51.667509","longitude":"5.375125","offsetlat":"51.667511","offsetlon":"5.37512","radius":"3900"}, 
{"quality":"59","latitude":"-30.832686","longitude":"-66.089954","offsetlat":"-30.832689","offsetlon":"-66.089951","radius":"30000"}, 
{"quality":"59","latitude":"45.965999","longitude":"14.02893","offsetlat":"45.966","offsetlon":"14.11538","radius":"13000"}, 
{"quality":"59","latitude":"-32.82341","longitude":"28.05365","offsetlat":"-32.82341","offsetlon":"28.05365","radius":"11200"}, 
{"quality":"59","latitude":"33.824049","longitude":"35.677601","offsetlat":"33.824051","offsetlon":"35.677601","radius":"1000"}, 
{"quality":"39","latitude":"54.014011","longitude":"-124.012894","offsetlat":"54.014011","offsetlon":"-124.012894","radius":"9600"}]}}} 

은, 야후 BOSS 뭔가 발견을 (코드 200) 품질 결과가 59 이하로 낮습니다. 사실 그들은 모두 잘못되었습니다 : 주소는 브리티시 컬럼비아에 있지만 일부 결과는 멕시코에서 결과를 얻고 있습니다. 가장 가까운 결과가 마지막 결과이며 39의 결과를 얻습니다. 정확한 도시를 얻지 만 정확하게는 정확하지 않습니다. 유효하지 않은 결과 만있는 것은 아니며 같은 결과를 보이는 수십 개의 다른 주소입니다.

나는 우편 번호를 입력하려했지만 locale = CA로 검색을 제한하고 주소 형식을 변경했지만 아무 것도 결과를 향상시킬 수 없습니다. $ args [ "q"]에서 $ args [ "location"]로 변수를 변경하려고 시도했지만 결과에는 차이가 없습니다. 우리 열쇠를 모두 확인했는데 모든 것이 정상적인 것처럼 보입니다. 최근에 API의 변경 사항이 발생하면 Yahoo BOSS 사이트를 조회했습니다. BOSS와 관련된 야후 그룹에게 아무 대답도 요청하지 않았습니다. 어떤 도움이라도 환영받을 수있을만큼 나는 절망적이다!

+0

나는 야후 사람들에게 소리 지르고 싶다. 입력 요구 사항이 크게 바뀌지 않는 한, 귀하의 코드에는 야후에게 mexican B.C. 구애. –

+0

그래, 나는 이미 그들에게 대답을 썼다. 한 동료가 rawurlencode를 제거하라고 제안했으며 많은 결과를 개선했습니다. 그러나 나는 여전히 약 10 %의 지오 로케이션 품질을 60 % 이하로 얻고있다. – user2908750

답변

0

이제는 Yahoo BOSS API에서 불필요한 rawurlencode에서 문제가 발생했습니다. 그들은 우리에게 대답하지는 못했지만 API의 일부 변경으로 인해이 인코딩이 쓸모 없게되었다고 생각됩니다.