Php 地理编码不';我现在不工作了
我有一个内部站点,它使用php查看我的msql客户数据库。查找未填写lat和lng字段的客户。抓取邮政编码和地理编码,将lat和lng发布回我的数据库,并在地图上标出客户。这是由cron作业每天执行一次。使用GoogleAPI的v.2,这一点很好。从三月或四月起,它就停止了。我猜是因为第三节 Jist my jl_jobscoordinates.cron.php文件在数据库中搜索,查找空lat和lng字段的所有邮政编码。然后从我的geocode.class.php调用一个名为doGeocode的函数,该函数使用xml将结果放在一起,并保存lat和lng。在geocodeclass中,它指的是一个m_url,它是保存在我的配置文件中的googleapi url。我已将此url更新为新的v.3 url,即。我的地图已经备份并运行了,只是没有任何东西可以进行地理编码 我将粘贴两个文件jl_jobscooedinates.cron.php和geocode.class.php。我已经注释掉了用于处理旧url的地理代码中的旧xml 我的cron的结果是它没有得到坐标。e、 g.-[3-2013]谷歌找不到此邮政编码:[COO041]测试公司名称,牛津郡OX26 4SS jl_jobcoordinates.cron.phpPhp 地理编码不';我现在不工作了,php,xml-parsing,geocoding,Php,Xml Parsing,Geocoding,我有一个内部站点,它使用php查看我的msql客户数据库。查找未填写lat和lng字段的客户。抓取邮政编码和地理编码,将lat和lng发布回我的数据库,并在地图上标出客户。这是由cron作业每天执行一次。使用GoogleAPI的v.2,这一点很好。从三月或四月起,它就停止了。我猜是因为第三节 Jist my jl_jobscoordinates.cron.php文件在数据库中搜索,查找空lat和lng字段的所有邮政编码。然后从我的geocode.class.php调用一个名为doGeocode的
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);
}
require_once(“../includes/config.php”);
需要一次(_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));
需要一次(_PATH_JMS./classes/emails.class.php”);
需要一次(_PATH_JMS./classes/geocode.class.php);
需要一次(_PATH_JMS./services/actiontrail.ds.php”);
require_once(_PATH_JMS./services/jobsdue.ds.php”);
//-----------------------------------------------------
//主对象实例-初始化我们需要的
//-----------------------------------------------------
$DB=新的DB();
$Security=新安全性($DB->i\u DB\u conn);
$Lib=newlib();
$Session=新会话();
$ActionTrail=newactiontrail($DB,$Session,$Security);
$JobsDue=newjobsdue($DB、$Session、$Security、$ActionTrail);
$Geocode=新的地理编码($Session,$Security);
$Emails=新电子邮件($DB、$Session、$Security);
//-----------------------------------------------------
//另存为有效的系统用户
//-----------------------------------------------------
$Session->save('USR\u AUTH','u CRON\u USER\u NAME);
$Session->save('USR\u PASS','u CRON\u USER\u PASS');
$Session->save('USR_已使用,'1');
$Session->save('CONS',$Session->get('USR_AUTH'));
//-----------------------------------------------------
//要忽略的邮政编码-我们无法对其进行地理编码
//-----------------------------------------------------
$m_ignore=数组(“IRL”、“爱尔兰”、“爱尔兰”、“ITA”、“美国”、“BEL”、“EGY”、“GER”、“FR”、“FRA”、“HOL”、“POL”);
//-----------------------------------------------------
//获得今年和明年所有顾问的工作
//-----------------------------------------------------
$mY=(整数)日期(“Y”);
//-----------------------------------------------------
//查找不带lat和lng的t卡
//-----------------------------------------------------
$m_errors=array();
对于($y=$mY;$ygetAllJobsDue(“%”,$mM,$y,“%”,NULL,NULL,FALSE);/*不要错过作业,因为我们将从1月1日开始*/
//echo“
mJobs=”.$mJobs;
foreach($mJobs作为$row)
{
$m_postcode=$Lib->Lib_str_clean(trim($row->postcode));//这将循环遍历每个记录并获取邮政编码。m_postcodes是找到的邮政编码
echo“
m_postcode=”.$m_postcode;
if($row->latlngexists==1)| |(in_数组($m_postcode,$m_ignore))| |(in_数组($row->card_id,$m_ignore))|(strlen($m_postcode)lib_ispostcode($m_postcode)){
$m_坐标=$Geocode->doGeocode($m_邮政编码);
echo“
m_坐标=”.$m_坐标;//未显示任何内容
如果($m_坐标!=NULL){
$DB->setGeoTCard($row->card_id,$m_坐标['lat'],$m_坐标['lng']);
}否则{
$m_err_desc=sprintf(“[%s-%s]谷歌找不到此邮政编码”,$mM,$y);
$m_错误=数组(
“err_desc”=>m_err_desc,
“错误代码”=>$row->客户端代码,
“err_comp”=>$row->title,
“err_depo”=>$row->description,
“err_post”=>m_邮政编码
);
$m_errors[]=$m_error;
$m_ignore[]=$row->card_id;
}
睡眠(地理编码暂停);
}否则{
$m_err_desc=sprintf([%s-%s]邮政编码无效,请检查“,$mM,$y);
$m_错误=数组(
“err_desc”=>m_err_desc,
“错误代码”=>$row->客户端代码,
“err_comp”=>$row->title,
“err_depo”=>$row->description,
“err_post”=>m_邮政编码
);
$m_errors[]=$m_error;
$m_ignore[]=$row->card_id;
}
}
}
}
如果(计数($m_错误)>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;
}
}
class地理编码{
private$m_session=NULL;
私有$m_security=NULL;
私人$m_会话_用户;
私人$m_会议通行证;
私有$m_密钥=_GMAP_密钥;
私有$m_url=_GMAP_url;
private$m_res=Array();
公共函数构造($p_会话,$p_安全性)
{
$this->m_session=$p_session;
$this->m_security=$p_security;
$this->m_session\u user=$this->m_session->get('USR_AUTH');
$this->m_session_pass=$this->m_session->get('USR_pass');
如果($this->m\u security->doLogin($this->m\u session\u user,$this->m\u session\u pass)m\u url,$p\u postcode,$this->m\u key),0,TRUE);//旧
/**
* 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);
}
}