我之前有一个Google地理编码脚本,用于使用数据库中的本地地址提取经度和纬度。
在过去的6个月里,我已经切换了主机,显然Google已经实施了一个新的前向地理编码器。现在它只是从xml脚本调用返回url not loading error。
我已经尝试了一切来让我的代码正常运行。即使来自其他网站的样本编码也无法在我的服务器上运行。我错过了什么?可能是服务器端设置阻止它正常执行吗?
尝试#1:
$request_url = "http://maps.googleapis.com/maps/api/geocode/xml?new_forward_geocoder=true&address=1600+Amphitheatre+Parkway,+Mountain+View,+CA";
echo $request_url;
$xml = simplexml_load_file($request_url) or die("url not loading");
$status = $xml->status;
return $status;
只需返回url而不加载。我曾尝试使用和不使用new_forwad_geocoder。我也尝试过使用和不使用https。
$ request_url字符串如果您只是将其复制并粘贴到浏览器,则会返回正确的结果。
还试过这只是为了看看我是否可以获得一个文件返回。尝试2:
$request_url = "http://maps.googleapis.com/maps/api/geocode/json?new_forward_geocoder=true&address=1600+Amphitheatre+Parkway,+Mountain+View,+CA";//&sensor=true
echo $request_url."<br>";
$tmp = file_get_contents($request_url);
echo $tmp;
知道什么可能导致连接失败?
答案 0 :(得分:0)
我再也无法使用XML了,而file_get_contents调用是罪魁祸首我几乎是正面的。
我已经发布了我使用JSON / Curl(下面)工作的内容,以防任何人遇到类似问题。
最终我认为我遇到的问题与在服务器上升级到我们的Apache版本有关;和一些与file_get_contents和fopen相关的默认设置更具限制性。我虽然没有证实这一点。
此代码确实有效:
class geocoder{
static private $url = "http://maps.google.com/maps/api/geocode/json?sensor=false&address=";
static public function getLocation($address){
$url = self::$url.$address;
$resp_json = self::curl_file_get_contents($url);
$resp = json_decode($resp_json, true);
//var_dump($resp);
if($resp['status']='OK'){
//var_dump($resp['results'][0]['geometry']['location']);
//echo "<br>";
//var_dump($resp['results'][0]['geometry']['location_type']);
//echo "<br>";
//var_dump($resp['results'][0]['place_id']);
return array ($resp['results'][0]['geometry']['location'], $resp['results'][0]['geometry']['location_type'], $resp['results'][0]['place_id']);
}else{
return false;
}
}
static private function curl_file_get_contents($URL){
$c = curl_init();
curl_setopt($c, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($c, CURLOPT_URL, $URL);
$contents = curl_exec($c);
curl_close($c);
if ($contents) return $contents;
else return FALSE;
}
}
$Address = "1600 Amphitheatre Parkway, Mountain View, CA";
$Address = urlencode(trim($Address));
list ($loc, $type, $place_id) = geocoder::getLocation($Address);
//var_dump($loc);
$lat = $loc["lat"];
$lng = $loc["lng"];
echo "<br><br> Address: ".$Address;
echo "<br>Lat: ".$lat;
echo "<br>Lon: ".$lng;
echo "<br>Location: ".$type;
echo "<br>Place ID: ".$place_id;