2017-02-27 9 views
0

Ich verwende Google Autocomplete und möchte den Ländercode (GB, IE, FR usw.) von dem auf der Website eingegebenen Standort abrufen.Google Maps API Ländercode abrufen

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(); 

    }); 

    }; 

leider hier die

place.address_components [1] .short_name;

gibt das lokale Gebiet zurück, in dem sich diese Stadt/Stadt befindet.

Wie kann ich den Ländercode bekommen?

Vielen Dank für Ihre Eingabe in dieser Angelegenheit sehr geschätzt ;-)

Antwort

0

Weitere Details Place Autocomplete von Google sehen

Fiddle Demo

JS-Code:

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

Vielen Dank für Deep 3015. Vielleicht können Sie etwas Licht darauf werfen? Ich habe ein paar mehr Dinge aus meinem ersten Skript ausprobiert, und ich bekomme nicht das gleiche Ergebnis, wenn ich document.getElementById ("country_from") verwende. Value = place.address_components [2] .short_name; oder document.getElementById ("country_from"). Value = place.address_components [3] .short_name; Es scheint, als ob die Zahl in eckigen Klammern einen anderen Wert, z.B. London: [1] Greater London [2] England [3] GB ist perfekt. Aber wenn ich dies auf eine irische Stadt anwende, wird das gleiche Niveau [3] nichts zurückgeben. Würdest du wissen warum? Danke – FusionDesign

+0

Das 'Autocomplete' Ergebnis variiert während der Eingabe. Wenn Sie die Ausgabe für verschiedene Eingaben sehen möchten. Sie können 'console.log (JSON.stringify (autocomplete.getPlace()))'. In diesem Protokoll können Sie Variable Ergebnis (Position in Json Zeichenfolge) für Ländervorkommen zu sehen. Auf diese Weise können wir die genaue Reihenfolge der Ereignisse nicht genau vorhersagen. In meinem Code habe ich 'if (addressObj.types [j] === 'country')' verwendet, um sicherzustellen, dass das Ergebnis dem Landtyp entspricht. Hoffe, das gibt genug Erklärung –

0

Danke Deep 3015. Ich habe Ihre Lösung verwendet und es hat funktioniert! Fantastische ...

Hinweis für andere Benutzer, die in der gleichen Ausgabe stoßen könnten:

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

Abgesehen davon arbeiten 100% jetzt. Nochmals vielen Dank für Ihre Hilfe [thumbs up]

+0

mein Beispiel war als 'innerHTML' zu zeigen, um Element zu überspannen. Gut du hast es ;-) –