L'analyse address_components dans Google Maps lors de la saisie semi-automatique sélectionnez
J'ai le code suivant pour analyser les country
lorsque la liste de saisie semi-automatique est sélectionné:
$('#spot_address').autocomplete({
//This bit uses the geocoder to fetch address values
source: function(request, response) {
geocoder.geocode( {'address': request.term }, function(results, status) {
//Get address_components
for (var i = 0; i < results[0].address_components.length; i++)
{
var addr = results[0].address_components[i];
var getCountry;
if (addr.types[0] == 'country')
getCountry = addr.long_name;
}
response($.map(results, function(item) {
return {
label: item.formatted_address,
value: item.formatted_address,
latitude: item.geometry.location.lat(),
longitude: item.geometry.location.lng(),
country: getCountry
}
}));
})
},
//This bit is executed upon selection of an address
select: function(event, ui) {
//Get values
$('#spot_country').val(ui.item.country);
$('#spot_lat').val(ui.item.latitude);
$('#spot_lng').val(ui.item.longitude);
var location = new google.maps.LatLng(ui.item.latitude, ui.item.longitude);
marker.setPosition(location);
map.setCenter(location);
},
//Changes the current marker when autocomplete dropdown list is focused
focus: function(event, ui) {
var location = new google.maps.LatLng(ui.item.latitude, ui.item.longitude);
marker.setPosition(location);
map.setCenter(location);
}
});
Cependant, le code ci-dessus ne fonctionne pas, et lorsque le pays est analysée, seul le premier résultat de la saisie semi-automatique est analysée n'importe quoi, ce qui est important avec le tableau results[0]
, car il ne récupère que le premier résultat.
J'ai essayé de le déplacer à l' select
fonction, mais ui
dans select
ne contient formatted_address
, longitude
et latitude
, mais pas le address_components
.
Que dois-je faire pour envoyer le bon country
lors de la saisie semi-automatique de l'élément de liste sélectionné?
Merci beaucoup.
OriginalL'auteur Victor | 2011-11-10
Vous devez vous connecter pour publier un commentaire.
Solution générale:
Maintenant votre
components
ressemble à ceci:Que vous pouvez requête comme ceci:
Putain, c'est bon.
+1, simple mais utile dans la plupart des cas. Notez que certaines informations peuvent être perdues dans le processus (par exemple, lorsque vous avez deux composants de types de ['pays', 'politique'] et ['lieu', 'politique'], la politique est écrasée)
Simple et génial
Grand fragment de code. Vais certainement utiliser à nouveau. Est-il un nom pour ce modèle?
OriginalL'auteur William Entriken
Je suis ici pour répondre à ma propre question. Ci-dessous l'intégralité du code qui fonctionne:
OriginalL'auteur Victor
D'élaborer sur @Complète Décent de réponse ici une version pour lodash:
OriginalL'auteur ChrisRich
Dans un AngularJS contrôleur, il pourrait être comme ceci:
OriginalL'auteur LeoLozes
Cela a fonctionné pour moi, en AngularJS;
OriginalL'auteur Noel McKeown
Je pense que vous devez diviser votre réponse gestionnaire dans une nouvelle fonction.
Déplacer à l'extérieur de l' .fonction d'auto-complétion:
OriginalL'auteur duncan
Ici est la même fonction que le Plein Décent, mais écrit pour AngularJS:
OriginalL'auteur roNn23
J'ai été en utilisant l'approche suivante:
OriginalL'auteur stephen.hanson
Pays est toujours en dernier dans la gamme qui est retourné à partir de Geocoder.
Voici ma solution -
Espère que cette aide.
OriginalL'auteur user3795286
Voici ma solution en caractères d'imprimerie
Utilisation:
OriginalL'auteur Alex Cheremisin