I'm fairly new to JSON, and I'm trying to get the latitude and longitude of a geocoded city from the Google Maps API using curl. The function I'm using is:
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']; }
The goal of all of that is to pull the lat and lng values from the Results -> Geometry -> Location array of the following 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 } } } } ] }
However, it doesn't print anything. I know that the function successfully retrieves the JSON from Google and brings it to my server, as I did a print statement for the 'status' value and it returned 'OK'. The problem seems to be when I try and delve deeper into the JSON.
Sorry if it's a straightforward problem, but like I said, I'm new to this and it's driving me crazy now.
Thanks a lot! :)
Note that it seems that results
contains an array (with only one item in it, here) of results ; and geometry
is one item inside one result.
Here, you can see that results' content is delimited by []
-- which indicates it's an array.
So, you have to first access the first result : $geoloc['results'][0]
Inside of which you'll have the geometry : $geoloc['results'][0]['geometry']
Which will allow you to get the latitude and longitude :
var_dump($geoloc['results'][0]['geometry']['location']['lat']); var_dump($geoloc['results'][0]['geometry']['location']['lng']);
I suppose that, depending on the address you've searched on, you will sometimes have more than one item in the results
array.
You just need this :
$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
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With