2013-07-11 2 views
0

У меня есть этот php для захвата данных с серверов Google о конкретной геолокации.Проблема с google maps API обратное геокодирование - почтовый код возвращает только 2 (префикс)

<?php 
if ($_GET['latitude'] AND $_GET['longitude']) { 
    $lat = $_GET['latitude']; 
    $lng = $_GET['longitude']; 
    echo json_encode(reverse_geocode($lat,$lng)); 
} 
?> 


<?php 
//Get STATE from Google GeoData 
function reverse_geocode($lat,$lng) { 
    $url = "http://maps.googleapis.com/maps/api/geocode/json?latlng=$lat,$lng&sensor=false"; 
    $result = file_get_contents("$url"); 
    $json = json_decode($result); 
    foreach ($json->results as $result) { 
     foreach($result->address_components as $addressPart) { 
      //print_r($addressPart); 
      if((in_array('locality', $addressPart->types)) && (in_array('political', $addressPart->types))) { 
       $city = $addressPart->long_name; 
      } 
      else if((in_array('administrative_area_level_1', $addressPart->types)) && (in_array('political', $addressPart->types))) { 
       $state = $addressPart->long_name; 
      } 
      else if((in_array('country', $addressPart->types)) && (in_array('political', $addressPart->types))) { 
       $country = $addressPart->long_name; 
      } 
      else if(in_array('route', $addressPart->types)) { 
       $street = $addressPart->long_name; 
      } 
      else if(in_array('street_number', $addressPart->types)) { 
       $street_number = $addressPart->long_name; 
      } 
      else if(in_array('postal_code', $addressPart->types)) { 
       $postal_code = $addressPart->long_name; 
      } 
     } 
    } 

    //return $address; 
    return array('country' => $country, 'state' => $state, 'city' => $city, 'street' => $street_number . " " . $street, 'zip' => $postal_code); 
    //print_r($json); 
} 
?> 

Для ?latitude=49.260441796677014&longitude=-123.12049284766846

Это возвращает:

{"country":"Canada","state":"British Columbia","city":"Vancouver","street":"706-750 West 12th Avenue","zip":"V5Z"} 

Обратите внимание на молнии, это 3 буквы префикса почтовый индекс, а не реальный почтовый индекс. Почему это происходит? В оригинальных данных json мне показалось, что у меня полный почтовый индекс. Раскомментируйте print_r($addressPart);, чтобы узнать, о чем я говорю.

ответ

2

$addressPart где postal_code был взят из содержит тип postal_code, но когда вы проверяете ответ вы увидите, что он также содержит тип postal_code_prefix .... и вот что вы получили. Пропустить $addressPart, если типы содержат postal_code_prefix

else if(in_array('postal_code', $addressPart->types) 
     && !in_array('postal_code_prefix', $addressPart->types)){ 
    //.... 
} 

 Смежные вопросы

  • Нет связанных вопросов^_^