nearby - Uso de PHP(curl) para extraer datos de JSON(API de Google Maps)
google maps api search (2)
Soy bastante nuevo en JSON, y estoy tratando de obtener la latitud y la longitud de una ciudad geocodificada a partir de la API de Google Maps usando curl. La función que estoy usando es:
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''];
}
El objetivo de todo eso es extraer los valores de lat y lng de la matriz Resultados -> Geometría -> Ubicación del siguiente 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
}
}
}
} ]
}
Sin embargo, no imprime nada. Sé que la función recupera con éxito el JSON de Google y lo trae a mi servidor, ya que hice una declaración de impresión para el valor de "estado" y me devolvió "OK". El problema parece ser cuando intento profundizar en el JSON.
Lo siento si es un problema sencillo, pero como dije, soy nuevo en esto y ahora me estoy volviendo loco.
¡Muchas gracias! :)
Solo necesitas esto:
$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
Tenga en cuenta que parece que los results
contienen una matriz (con solo un elemento en ella, aquí) de resultados; y la geometry
es un elemento dentro de un resultado.
Aquí, puede ver que el contenido de los resultados está delimitado por []
, lo que indica que es una matriz.
Entonces, primero debes acceder al primer resultado: $geoloc[''results''][0]
Dentro de la cual tendrá la geometría: $geoloc[''results''][0][''geometry'']
Lo que te permitirá obtener la latitud y longitud:
var_dump($geoloc[''results''][0][''geometry''][''location''][''lat'']);
var_dump($geoloc[''results''][0][''geometry''][''location''][''lng'']);
Supongo que, dependiendo de la dirección que haya buscado, a veces tendrá más de un elemento en la matriz de results
.