Je suis assez nouveau sur JSON et j'essaie d'obtenir la latitude et la longitude d'une ville géocodée à partir de l'API Google Maps en utilisant curl. La fonction que j'utilise est:
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'];
}
Le but de tout cela est d'extraire les valeurs lat et lng du tableau Résultats -> Géométrie -> Emplacement du JSON suivant:
{
"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
}
}
}
} ]
}
Cependant, il n'imprime rien. Je sais que la fonction récupère avec succès le JSON de Google et l'apporte à mon serveur, car j'ai fait une instruction d'impression pour la valeur "status" et elle a renvoyé "OK". Le problème semble être lorsque j'essaie d'approfondir le JSON.
Désolé si c'est un problème simple, mais comme je l'ai dit, je suis nouveau dans ce domaine et ça me rend fou maintenant.
Merci beaucoup! :)
Notez qu'il semble que results
contient un tablea (avec un seul élément, ici) de résultats ; et geometry
est un élément dans un résultat.
Ici, vous pouvez voir que le contenu des résultats est délimité par []
- qui indique qu'il s'agit d'un tableau.
Donc, vous devez d'abord accéder au premier résultat: $geoloc['results'][0]
À l'intérieur duquel vous aurez la géométrie: $geoloc['results'][0]['geometry']
Ce qui vous permettra d'obtenir la latitude et la longitude:
var_dump($geoloc['results'][0]['geometry']['location']['lat']);
var_dump($geoloc['results'][0]['geometry']['location']['lng']);
Je suppose que, selon l'adresse recherchée, vous aurez parfois plusieurs éléments dans le tableau results
.
Vous avez juste besoin de ça:
$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