2013-06-12 1 views
2

Мне нужно получить: адрес улицы, нацию и, возможно, регион, начиная с массива координат.Получение нации и адрес улицы с Google Maps api v3 обратное геокодирование

Я использую эту функцию:

$url = "http://maps.googleapis.com/maps/api/geocode/json?latlng=$lat,$long&sensor=false"; 

$curl = curl_init(); 
curl_setopt($curl, CURLOPT_URL, $url); 
curl_setopt($curl, CURLOPT_HEADER, false); 
curl_setopt($curl, CURLOPT_FOLLOWLOCATION, true); 
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true); 
curl_setopt($curl, CURLOPT_ENCODING, ""); 
$curlData = curl_exec($curl); 
curl_close($curl); 

$data = json_decode($curlData); 

$address = $data->results[0]->address_components[1]->long_name.', '.$data->results[0]->address_components[0]->long_name; 
$country = $data->results[0]->address_components[5]->long_name; 
$nation = $data->results[0]->address_components[6]->long_name; 

Этот скрипт сам работает и я вернусь результаты, но я заметил, что ценности не в том же месте каждый раз, (я думаю, в зависимости от имеющегося результата), поэтому я получил неправильные значения. Хо, я могу это исправить?

Вот два примера моего выхода, на одном месте:

http://urbanfiles.linkmesrl.com/files/uploads/test_address_1.php

http://urbanfiles.linkmesrl.com/files/uploads/test_address_2.php

Любое предложение, чтобы получить правильное значение для моих результатов?

ответ

1

Вы можете прокручивать компоненты адреса и выбирать тип из массива «типы».

<?php 
foreach($data->results[0]->address_components as $address_component){ 
    if(in_array('country', $address_component->types)){ 
     $country = $address_component->long_name; 
     continue; 
    } elseif(in_array('route', $address_component->types)) { 
     $address = $address_component->long_name; 
     continue; 
    } 
    // etc... 
} 
+0

Работает Как очарование! Просто добавлен 's' после результата и введите Спасибо! – teone