Obtenir la rue, la ville et le pays par géocodage inverse en utilisant google

Je vais essayer d'obtenir le $rue, $ville $et pays de chaîne à partir de google json.
Il fonctionne pour mon adresse de domicile :
http://maps.googleapis.com/maps/api/geocode/json?latlng=52.108662,6.307370&capteur=true

$url = "http://maps.googleapis.com/maps/api/geocode/json?latlng=".$lat.",".$lng."&sensor=true";
    $data = @file_get_contents($url);
    $jsondata = json_decode($data,true);
    if(is_array($jsondata) && $jsondata['status'] == "OK")
    {
          $city = $jsondata['results']['0']['address_components']['2']['long_name'];
          $country = $jsondata['results']['0']['address_components']['5']['long_name'];
          $street = $jsondata['results']['0']['address_components']['1']['long_name'];
    }

Mais pour une adresse différente avec plus de données dans les tableaux comme dans cet exemple:
http://maps.googleapis.com/maps/api/geocode/json?latlng=52.154184,6.199592&capteur=true
il ne fonctionne pas, car il n'y a plus de données dans le tableau json et il fait de la province du pays.

Comment puis-je sélectionner le type que j'ai besoin (long_name)?

  • de la rue : long_name où les "types" : [ "marche" ]
  • pour la ville : long_name où les "types" : [ "localité", "politique" ]
  • pour le pays : long_name où les "types" : [ "pays", "politique" ]

Exemple de sortie de la géocodage JSON:

{
   "results" : [
      {
         "address_components" : [
            {
               "long_name" : "89",
               "short_name" : "89",
               "types" : [ "street_number" ]
            },
            {
               "long_name" : "Wieck De",
               "short_name" : "Wieck De",
               "types" : [ "establishment" ]
            },
            {
               "long_name" : "Industrieweg",
               "short_name" : "Industrieweg",
               "types" : [ "route" ]
            },
            {
               "long_name" : "Zutphen",
               "short_name" : "Zutphen",
               "types" : [ "locality", "political" ]
            },
            {
               "long_name" : "Zutphen",
               "short_name" : "Zutphen",
               "types" : [ "administrative_area_level_2", "political" ]
            },
            {
               "long_name" : "Gelderland",
               "short_name" : "GE",
               "types" : [ "administrative_area_level_1", "political" ]
            },
            {
               "long_name" : "Nederland",
               "short_name" : "NL",
               "types" : [ "country", "political" ]
            },
            {
               "long_name" : "7202 CA",
               "short_name" : "7202 CA",
               "types" : [ "postal_code" ]
            }

Je pense que je fixe moi-même, par la présente, mon code:

//street
foreach ($jsondata["results"] as $result) {
    foreach ($result["address_components"] as $address) {
        if (in_array("route", $address["types"])) {
            $street = $address["long_name"];
        }
    }
}
//city
foreach ($jsondata["results"] as $result) {
    foreach ($result["address_components"] as $address) {
        if (in_array("locality", $address["types"])) {
            $city = $address["long_name"];
        }
    }
}
//country
foreach ($jsondata["results"] as $result) {
    foreach ($result["address_components"] as $address) {
        if (in_array("country", $address["types"])) {
            $country = $address["long_name"];
        }
    }
}

source d'informationauteur Ruben Bolink