Я довольно новичок в JSON, и я пытаюсь получить широту и долготу геокодированного города из API Карт Google, используя curl. Функция, которую я использую:
function geocode($city){ $cityclean = str_replace (" ", "+", $city); $details_url = "http://maps.googleapis.com/maps/api/geocode/json?address=" . $cityclean . "&sensor=false"; $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, $details_url); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); $geoloc = json_decode(curl_exec($ch), true); $step1 = $geoloc['results']; $step2 = $step1['geometry']; $coords = $step2['location']; print $coords['lat']; print $coords['lng']; }
Цель всего этого – вывести значения lat и lng из массива Results -> Geometry -> Location следующего JSON:
{ "status": "OK", "results": [ { "types": [ "locality", "political" ], "formatted_address": "Westminster, London, UK", "address_components": [ { "long_name": "London", "short_name": "London", "types": [ "locality", "political" ] }, { "long_name": "Westminster", "short_name": "Westminster", "types": [ "administrative_area_level_3", "political" ] }, { "long_name": "Greater London", "short_name": "Greater London", "types": [ "administrative_area_level_2", "political" ] }, { "long_name": "England", "short_name": "England", "types": [ "administrative_area_level_1", "political" ] }, { "long_name": "United Kingdom", "short_name": "GB", "types": [ "country", "political" ] } ], "geometry": { "location": { "lat": 51.5001524, "lng": -0.1262362 }, "location_type": "APPROXIMATE", "viewport": { "southwest": { "lat": 51.3493528, "lng": -0.3783580 }, "northeast": { "lat": 51.7040647, "lng": 0.1502295 } }, "bounds": { "southwest": { "lat": 51.3493528, "lng": -0.3783580 }, "northeast": { "lat": 51.7040647, "lng": 0.1502295 } } } } ] }
Однако он ничего не печатает. Я знаю, что функция успешно извлекает JSON из Google и выводит ее на мой сервер, так как я сделал заявление на печать для значения «status», и он вернул «OK». Кажется, проблема заключается в том, что я пытаюсь глубже погрузиться в JSON.
Извините, если это простая проблема, но, как я уже сказал, я новичок в этом, и теперь это сводит меня с ума.
Большое спасибо! 🙂
Обратите внимание, что, по-видимому, results
содержат массив (содержащий здесь только один элемент) результатов; и geometry
– это один элемент внутри одного результата.
Здесь вы можете видеть, что содержимое результатов ограничено символом []
что указывает на его массив.
Итак, вы должны сначала получить первый результат: $geoloc['results'][0]
Внутри вас будет геометрия: $geoloc['results'][0]['geometry']
Это позволит вам получить широту и долготу:
var_dump($geoloc['results'][0]['geometry']['location']['lat']); var_dump($geoloc['results'][0]['geometry']['location']['lng']);
Я полагаю, что в зависимости от адреса, который вы искали, у вас иногда будет несколько элементов в массиве results
.
Вам просто нужно это:
$fullurl = "http://maps.googleapis.com/maps/api/geocode/json?address=1600+Amphitheatre+Parkway,+Mountain+View,+CA&sensor=true"; $string .= file_get_contents($fullurl); // get json content $json_a = json_decode($string, true); //json decoder echo $json_a['results'][0]['geometry']['location']['lat']; // get lat for json echo $json_a['results'][0]['geometry']['location']['lng']; // get ing for json