2016-10-04 42 views
-1

我上傳CSV文件,並在$地址變量中獲得地址字段,但是當我通過$地址谷歌地圖,它顯示我的錯誤,谷歌地圖未能打開流錯誤

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. 

我搜索它的解決方案,我發現一個只編碼地址,但它也沒有工作對我來說...

CODE

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

你需要使用谷歌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'; 

要在您的請求中指定Google API密鑰,請將其作爲關鍵參數的值。

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

我希望這會幫助你。

1

看起來問題在於你的數據集。由urlencode($address)編碼爲%A0的網址部分是一種特殊的不間斷空格字符,而非常規空格。

看到這裏的區別的詳細信息: Difference between "+" and "%A0" - urlencoding?

%A0字符在此方面不接受,但你可以對urlencode()結果做一個快速的str_replace(),以取代所有這些特殊的空格字符標準空格產生的+符號。

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