2016-10-04 2 views
-1

Я загрузкой файла CSV и получая поле адреса в переменной $ адрес, но когда я прохожу $ адрес в Google Maps, его показывает мне ошибку,Google карты не удалось открыть поток ошибок

file_get_contents(http://maps.googleapis.com/maps/api/geocode/json?address=9340+Middle+River+Street%A0%2COxford%2CMS%2C38655): failed to open stream: HTTP request failed! HTTP/1.0 400 Bad Request. 

Я искал для ее решения, я нашел, что для кодирования только адрес, но его также не работает для меня ...

КОД

if (!empty($address)) { 
     $geo = file_get_contents('http://maps.googleapis.com/maps/api/geocode/json?address=' . urlencode($address)); 
     $geo = json_decode($geo, true); 
     if ($geo['status'] = 'OK') { 
      if (!empty($geo['results'][0])) { 
       $latitude = $geo['results'][0]['geometry']['location']['lat']; 
       $longitude = $geo['results'][0]['geometry']['location']['lng']; 
      } 
      $mapdata['latitude'] = $latitude; 
      $mapdata['longitude'] = $longitude; 
      return $mapdata; 
     } else { 
      $mapdata['latitude'] = ""; 
      $mapdata['longitude'] = ""; 
      return $mapdata; 
     } 
    } 

Ошибка находится на линии

$geo = file_get_contents('http://maps.googleapis.com/maps/api/geocode/json?address=' . urlencode($address)); 

Пропустил что-нибудь. Любая помощь очень ценится .. Спасибо

ответ

1

вам нужно использовать Google API ключ функции

function getLatLong($address){ 
    if(!empty($address)){ 
    //Formatted address 
    $formattedAddr = str_replace(' ','+',$address); 
    //Send request and receive json data by address 
    $geocodeFromAddr = file_get_contents('http://maps.googleapis.com/maps/api/geocode/json?address='.$formattedAddr.'&sensor=false'); 
    $output = json_decode($geocodeFromAddr); 
    //Get latitude and longitute from json data 
    $data['latitude'] = $output->results[0]->geometry->location->lat; 
    $data['longitude'] = $output->results[0]->geometry->location->lng; 
    //Return latitude and longitude of the given address 
    if(!empty($data)){ 
     return $data; 
    }else{ 
     return false; 
    } 
}else{ 
    return false; 
} 
} 

Использование getLatLong(), как в следующем.

$address = 'White House, Pennsylvania Avenue Northwest, Washington, DC, United States'; 
$latLong = getLatLong($address); 
$latitude = $latLong['latitude']?$latLong['latitude']:'Not found'; 
$longitude = $latLong['longitude']?$latLong['longitude']:'Not found'; 

Чтобы указать ключ API Google в вашем запросе, включите его как значение параметра ключа.

$geocodeFromAddr = file_get_contents('http://maps.googleapis.com/maps/api/geocode/json?address='.$formattedAddr.'&sensor=true_or_false&key=GoogleAPIKey'); 

Надеюсь, это поможет вам.

1

Похоже, проблема связана с вашим набором данных. Часть url, которая кодируется как %A0 по urlencode($address), является специальным неразрывным символом пробела, а не регулярным пространством.

Смотрите здесь для получения дополнительной информации о различиях: Difference between "+" and "%A0" - urlencoding?

%A0 символа не принимаются в этом контексте, но вы можете сделать быстрый str_replace() на результате urlencode() заменить все эти специальные символы пробела с символы +, которые могли бы привести к регулярным пробелам.

$geo = file_get_contents('http://maps.googleapis.com/maps/api/geocode/json?address=' . str_replace('%A0', '+', urlencode($address))); 
Смежные вопросы