2017-01-31 15 views
0

У меня ранее был сценарий геокодирования Google, который работал для извлечения долготы и широты с использованием локальных адресов в базе данных.Url не загружает ошибку при запросах на геокодирование

За последние 6 месяцев я переключил хосты, и, судя по всему, Google внедрил новый геокодер. Теперь он просто возвращает URL-адрес, не загружая ошибку из вызова скрипта xml.

Я пробовал все, чтобы заставить мой код работать. Даже образец кода с других сайтов не будет работать на моем сервере. Что мне не хватает? Возможно, есть настройка на стороне сервера, которая блокирует это от правильного выполнения?

Попытка # 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

Я никогда не мог получить эту работу с 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;