2013-05-21 2 views
0

msql 고객 데이터베이스를 검색하는 데 php를 사용하는 내부 사이트가 있습니다. 위도와 경도가없는 고객을 찾으십시오. 포스트 코드를 잡고 내 데이터베이스에 위도와 경도를 게시하고 고객을지도에 그려보십시오. 이것은 cron 작업에 의해 하루에 한 번 수행됩니다. 이것은 구글 API의 v.2를 사용하여 잘 작동했습니다. 3 월이나 4 월 이후로 멈 췄어. 나는 v.3 때문에 추측하고있다.지오 코딩이 작동하지 않습니다. V3가 작동 중입니다.

Jist 내 jl_jobscoordinates.cron.php 파일은 빈 lat 및 lng 필드에 대한 모든 우편 코드를 수집하는 데이터베이스를 검색합니다. 그런 다음 geGode.class.php에서 doGeocode라는 함수를 호출합니다. doGeocode는 xml을 사용하여 togther를 저장하고 결과를 찾고 lat와 lng를 저장합니다. geocodeclass 안에는 내 설정 파일에 저장된 googleapi url 인 m_url을 참조합니다. 나는이 URL을 새로운 v.3 URL 인 http://maps.googleapis.com/maps/api/geocode/xml?address=%s&sensor=false으로 업데이트했습니다. 내지도가 백업되어 실행 중이며 아무 것도 지오 코딩하지 않습니다.

jl_jobscooedinates.cron.php와 geocode.class.php의 두 파일을 붙여 넣습니다. 이전 URL로 작업하는 데 사용 된 지오 코드의 이전 xml을 주석 처리했습니다.

내 cron의 결과는 좌표를 가져 오지 못한다는 것입니다. 예 : - [3-2013] 구글이 우편 번호를 찾을 수 없습니다 : [COO041] 테스트 회사 명, 옥 OX26 4SS

jl_jobcoordinates.cron.php

require_once("../includes/config.php");  
require_once(_PATH_JMS."/classes/session.class.php"); 
require_once(_PATH_JMS."/classes/db.class.php"); 
require_once(_PATH_JMS."/classes/lib.class.php"); 
require_once(_PATH_JMS."/classes/security.class.php"); 
require_once(_PATH_JMS."/classes/emails.class.php"); 
require_once(_PATH_JMS."/classes/geocode.class.php"); 

require_once(_PATH_JMS."/services/actiontrail.ds.php"); 
require_once(_PATH_JMS."/services/jobsdue.ds.php"); 

//----------------------------------------------------- 
// Main Object Instances - Initialize what we require  
//----------------------------------------------------- 

$DB    = new DB(); 
$Security  = new Security($DB->i_db_conn); 
$Lib   = new Lib(); 
$Session  = new Session(); 
$ActionTrail = new ActionTrail($DB, $Session, $Security); 
$JobsDue  = new JobsDue($DB, $Session, $Security, $ActionTrail); 
$Geocode  = new Geocode($Session, $Security); 
$Emails   = new Emails($DB, $Session, $Security); 

//----------------------------------------------------- 
// Save as a valid system user 
//----------------------------------------------------- 

$Session->save('USR_AUTH',_CRON_USER_NAME); 
$Session->save('USR_PASS',_CRON_USER_PASS); 
$Session->save('USR_IS_EMPLOYED', '1'); 
$Session->save('CONS',$Session->get('USR_AUTH')); 

//----------------------------------------------------- 
// Postcodes to Ignore - we cannot geocode these 
//----------------------------------------------------- 

$m_ignore = array("IRL","IRELAND","IRE","ITA","USA","BEL","EGY","GER","FR","FRA","HOL","POL"); 

//----------------------------------------------------- 
// Get Jobs Due for all consultants for this year and next 
//----------------------------------------------------- 

$mY = (int) date("Y"); 

//----------------------------------------------------- 
// Find t-cards without lat & lng 
//----------------------------------------------------- 

$m_errors = array(); 





for ($y=$mY;$y<=$mY+1;$y++) 
{ 
    for ($i=1;$i<=12;$i++) 
    { 
     $mM = (int) $i; 
     //echo "<br> mM =".$mM ." i =".$i; 
     $mJobs = $JobsDue->getAllJobsDue('%',$mM,$y,'%',NULL,NULL,FALSE); /* DON'T GET MISSED JOBS AS WE WILL START FROM JAN */ 
     //echo "<br>mJobs =".$mJobs; 
     foreach ($mJobs as $row) 
     { 
      $m_postcode = $Lib->lib_str_clean(trim($row->postcode)); //this loops through each of the records and gets the post codes. m_postcodes are the postcodes found 
      echo "<br>m_postcode =".$m_postcode; 
      if (($row->latlngexists == 1)||(in_array($m_postcode,$m_ignore))||(in_array($row->card_id,$m_ignore))||(strlen($m_postcode)<=0)) continue; 
      if ($Lib->lib_ispostcode($m_postcode)) { 
       $m_coordinates = $Geocode->doGeocode($m_postcode); 
       echo "<br>m_coords =".$m_coordinates;//nothing displayed 
       if ($m_coordinates != NULL) { 
        $DB->setGeoTCard($row->card_id,$m_coordinates['lat'],$m_coordinates['lng']); 
       } else { 
        $m_err_desc = sprintf("[%s-%s] Google could not find this Postcode",$mM,$y); 

        $m_error = array(
         "err_desc" => $m_err_desc, 
         "err_code" => $row->client_code, 
         "err_comp" => $row->title, 
         "err_depo" => $row->description, 
         "err_post" => $m_postcode 
        ); 
        $m_errors[] = $m_error; 
        $m_ignore[] = $row->card_id; 
       } 
       sleep(_GEOCODE_PAUSE); 
      } else { 
       $m_err_desc = sprintf("[%s-%s] Postcode is invalid please check",$mM,$y); 
       $m_error = array(
        "err_desc" => $m_err_desc, 
        "err_code" => $row->client_code, 
        "err_comp" => $row->title, 
        "err_depo" => $row->description, 
        "err_post" => $m_postcode 
       ); 
       $m_errors[] = $m_error; 
       $m_ignore[] = $row->card_id; 
      } 
     } 
    } 
} 
if (count($m_errors) > 0) { 
    $Emails->doGeocodeErrNotify($m_errors); 
} 

geocode.class.php

class Geocode { 

private $m_session = NULL; 
private $m_security = NULL; 

private $m_session_user; 
private $m_session_pass; 

private $m_key = _GMAP_KEY; 
private $m_url = _GMAP_URL; 
private $m_res = Array(); 

public function __construct($p_session,$p_security) 
{ 
    $this->m_session = $p_session; 
    $this->m_security = $p_security; 

    $this->m_session_user = $this->m_session->get('USR_AUTH'); 
    $this->m_session_pass = $this->m_session->get('USR_PASS'); 

    if ($this->m_security->doLogin($this->m_session_user,$this->m_session_pass) <= 0) 
    { 
     return NULL; 
     die; 
    } 
} 

public function doGeocode($p_postcode) 
{ 
    try { 
    // //$xml = new SimpleXMLElement(sprintf($this->m_url,$p_postcode,$this->m_key),0,TRUE); //OLD FOR V.2 
     $xml = new SimpleXMLElement(sprintf($this->m_url,$p_postcode),0,TRUE); 

    } catch (Exception $e) { 
     echo sprintf('Caught exception: %s', $e->getMessage()); 
     return NULL; 
     die; 
    } 
    $st = $xml->Response->Status->code; 
    if (strcmp($st, "200") == 0) 
    { 
     $co = $xml->Response->Placemark->Point->coordinates; 
     $cs = preg_split("/[\s]*[,][\s]*/", $co); 

     $this->m_res = Array(
       "lng" => $cs[0], 
       "lat" => $cs[1], 
       "alt" => $cs[2] 
      ); 
     return $this->m_res; 
    } else { 
     return NULL; 
    } 
} 

}

나는 누군가가 나를 도와 줄 수 있다면 정말 appriciate 것입니다. 내 구성 파일과 센서에 대해 제대로 설정되지 않은 현재 xml의 새 URL과 관련이있는 것으로 추측하고 있습니까?

답변

0

내 지오 코드 물건은 여전히 ​​잘 작동합니다. 개인용 API 키를 사용하는 것을 잊지 마세요.

/** 
* Geocode postcode to get long/lat used when adding suppliers and sites 
* @param - $postcode - string - Input post code to geocode 
* @return - $lat,$long - array - array containing latitude coords 
*/ 
function geocode($postcode) { 
    $postcode = urlencode(trim($postcode)); // post code to look up in this case status however can easily be retrieved from a database or a form post 
    //$request_url = "http://maps.googleapis.com/maps/api/geocode/xml?address=".$postcode."&sensor=false"; // the request URL you'll send to google to get back your XML feed 
    define("MAPS_HOST", "maps.google.co.uk"); 
    define("KEY", "YOUR API KEY HERE"); 
    $base_url = "http://" . MAPS_HOST . "/maps/geo?output=xml" . "&key=" . KEY; 
    $request_url = $base_url . "&q=" . $postcode; 
    $xml = simplexml_load_file($request_url); 
    $status = $xml->Response->Status->code; 
    if (strcmp($status, "200") == 0) { 
     // Successful geocode 
     $geocode_pending = false; 
     $coordinates = $xml->Response->Placemark->Point->coordinates; 
     $coordinatesSplit = explode(",", $coordinates); 
     // Format: Longitude, Latitude, Altitude 
     return array("lat"=>$coordinatesSplit[1],"long"=>$coordinatesSplit[0]); 
    } else { 
     return array("lat"=>0,"long"=>0); 
    } 
} 
관련 문제