2017-02-27 1 views
0

J'utilise la saisie semi-automatique Google et je souhaite extraire le code de pays (GB, IE, FR, etc ...) de l'emplacement indiqué sur le site.API Google Maps Récupérer le code de pays

AutocompleteDirectionsHandler.prototype.setupPlaceChangedListener = function(autocomplete, mode) { 
    var me = this; 
    autocomplete.bindTo('bounds', this.map); 
    autocomplete.addListener('place_changed', function() { 
     var place = autocomplete.getPlace(); 
    if (mode === 'ORIG') { 
     me.originPlaceId = place.place_id; 
     document.getElementById("orig_latitude").value= place.geometry.location.lat(); 
     document.getElementById("orig_longitude").value= place.geometry.location.lng(); 
     document.getElementById("country_from").value = place.address_components[1].short_name; 
    } else { 
     me.destinationPlaceId = place.place_id; 
     document.getElementById("dest_latitude").value= place.geometry.location.lat(); 
     document.getElementById("dest_longitude").value= place.geometry.location.lng(); 
     document.getElementById("country_to").value = place.address_components[2].short_name; 
    } 
    me.route(); 

    }); 

    }; 

Malheureusement ici la

place.address_components [1] .short_name;

retourne la zone locale où cette ville est située.

Comment puis-je obtenir le code du pays?

Merci à tous pour vos commentaires à ce sujet, beaucoup apprécié ;-)

Répondre

0

Pour plus de détails, voir Place Autocomplete de google

Fiddle Démo

code JS:

var input = document.getElementById('searchTextField'); 
var options = { 
    types: ['geocode'] 
}; 

var autocomplete = new google.maps.places.Autocomplete(input, options); 

google.maps.event.addListener(autocomplete, 'place_changed', function() { 
    var place = autocomplete.getPlace(); 
    for (var i = 0; i < place.address_components.length; i += 1) { 
    var addressObj = place.address_components[i]; 
    for (var j = 0; j < addressObj.types.length; j += 1) { 
     if (addressObj.types[j] === 'country') { /*outputs result if it is country*/ 
     document.getElementById('country_shortName').innerHTML = addressObj.short_name 
     } 
    } 
    } 

}); 

Html

<label for="searchTextField">Please Insert an address:</label> 
<br> 
<input id="searchTextField" type="text" size="50"> 
<p >Country Short Code: <span id="country_shortName"></span></p> 
+0

Merci pour ce Deep 3015. Peut-être que vous pouvez faire la lumière sur cela? J'ai essayé quelques autres choses de mon script initial et je n'obtiens pas le même résultat en utilisant document.getElementById ("country_from"). Value = place.address_components [2] .short_name; ou document.getElementById ("country_from"). Value = place.address_components [3] .short_name; Il semble que le nombre entre crochets renvoie une valeur différente, par ex. Londres: [1] Grand Londres [2] Angleterre [3] GB qui est parfait. Mais si je l'applique à une ville irlandaise, le même niveau [3] ne retournera rien. Savez-vous pourquoi? merci – FusionDesign

+0

Le résultat 'autocomplete' varie selon le type. Si vous voulez voir la sortie pour différentes entrées. Vous pouvez faire 'console.log (JSON.stringify (autocomplete.getPlace()))'. Dans ce journal, vous pouvez voir le résultat de la variable (position dans la chaîne JSON) pour l'occurrence du pays. Donc, le moyen d'obtenir des données exactes sur les pays nous ne pouvons pas prédire l'ordre d'apparition. Dans mon code, j'ai utilisé 'if (addressObj.types [j] === 'country')' ceci assure que le résultat est pour le type de pays. Espérons que cela donne suffisamment d'explications –

0

Merci Deep 3015. J'ai utilisé votre solution et cela a fonctionné! Fantastique ...

Note pour les autres utilisateurs qui pourraient tomber sur la même question:

I had to replace .innerHTML with .value to make it work 

En dehors de cela, le travail 100% maintenant. Merci encore pour votre aide [thumbs up]

+0

exemple de mine était de montrer comme 'innerHTML' pour étendre l'élément. Bon vous l'avez eu ;-) –