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
Vous devez vous connecter pour publier un commentaire.
Vous pouvez convertir les données dans le tableau associatif et de travailler avec elle comme
Votre code est parfaitement bien, mais ne serait-il pas préférable d'utiliser un interrupteur à l'intérieur de 1 foreach au lieu de la répétition des boucles foreach? Voici comment je l'analyser exactement le même tableau :
Si vous utilisez un Code Postal pour trouver l'adresse, comme je l'ai récemment généré rue,ville, pays à l'aide de Google MAP API le code est:
Ressemble à l'emploi pour un analyseur comme JMESpath http://jmespath.org/
Compte tenu de l'éventail
Un JMESPath de:
locations[?state == 'WA'].name | sort(@) | {WashingtonCities: join(', ', @)}
rendements
Vous faudrait réécrire pour votre cas, mais vous obtenez l'idée de la puissance de cette langue. Vous pouvez utiliser
composer
pour installer un JMESPath mise en œuvre pour PHP