241 votes

Comment limiter les résultats de l'autocomplétion Google à la ville et au pays uniquement ?

J'utilise le javascript de google autocomplete places pour renvoyer les résultats suggérés pour ma boîte de recherche, ce dont j'ai besoin est de montrer seulement la ville et le pays liés aux caractères entrés mais l'api de google donnera beaucoup de résultats de lieux généraux dont je n'ai pas besoin, alors comment limiter le résultat pour montrer seulement la ville et le pays.

J'utilise l'exemple suivant :

<html>
<head>
<style type="text/css">
   body {
         font-family: sans-serif;
         font-size: 14px;
   }
</style>

<title>Google Maps JavaScript API v3 Example: Places Autocomplete</title>
<script src="http://maps.googleapis.com/maps/api/js?sensor=false&amp;libraries=places" type="text/javascript"></script>
<script type="text/javascript">
   function initialize() {
      var input = document.getElementById('searchTextField');
      var autocomplete = new google.maps.places.Autocomplete(input);
   }
   google.maps.event.addDomListener(window, 'load', initialize);
</script>

</head>
<body>
   <div>
      <input id="searchTextField" type="text" size="50" placeholder="Enter a location" autocomplete="on">
   </div>
</body>
</html>

9voto

Willson Mock Points 567

J'ai joué un peu avec l'API Google Autocomplete et voici la meilleure solution que j'ai trouvée pour limiter vos résultats aux seuls pays :

var autocomplete = new google.maps.places.Autocomplete(input, options);
var result = autocomplete.getPlace();
console.log(result); // take a look at this result object
console.log(result.address_components); // a result has multiple address components

for(var i = 0; i < result.address_components.length; i += 1) {
  var addressObj = result.address_components[i];
  for(var j = 0; j < addressObj.types.length; j += 1) {
    if (addressObj.types[j] === 'country') {
      console.log(addressObj.types[j]); // confirm that this is 'country'
      console.log(addressObj.long_name); // confirm that this is the country name
    }
  }
}

Si vous regardez l'objet de résultat qui est retourné, vous verrez qu'il y a un tableau address_components qui contient plusieurs objets représentant différentes parties d'une adresse. Dans chacun de ces objets, il y aura un tableau "types" et dans ce tableau "types", vous verrez les différentes étiquettes associées à une adresse, y compris une pour le pays.

0 votes

Existe-t-il un moyen de restreindre à certains États des États-Unis, ou même d'exclure certains États ?

0 votes

@santafebound J'essaie de faire la même chose (pour un état spécifique en Australie). D'après la documentation, il semblerait que la réponse soit "Pas encore", mais j'espère trouver un moyen d'intercepter les données de la base de données. response et le restreindre par d'autres clés dans les données.

7voto

Pour le pays, vous pouvez utiliser ceci :

components=country:pak

https://maps.googleapis.com/maps/api/place/autocomplete/json?&input=${text-to-search}&key=${API_KEY}&language=en&components=country:pak

6voto

Cenk YAGMUR Points 273

J'ai trouvé une solution pour moi-même

var acService = new google.maps.places.AutocompleteService();
var autocompleteItems = [];

acService.getPlacePredictions({
    types: ['(regions)']
}, function(predictions) {
    predictions.forEach(function(prediction) {
        if (prediction.types.some(function(x) {
                return x === "country" || x === "administrative_area1" || x === "locality";
            })) {
            if (prediction.terms.length < 3) {
                autocompleteItems.push(prediction);
            }
        }
    });
});

cette solution ne montre que la ville et le pays

0 votes

Pouvez-vous fournir la liste complète des codes avec autocomplétion ?

4voto

Kir Mazur Points 450

Vous devrez également zoomer et centrer la carte en raison des restrictions de votre pays !

Utilisez simplement les paramètres de zoom et de centrage ;)

function initialize() {
  var myOptions = {
    zoom: countries['us'].zoom,
    center: countries['us'].center,
    mapTypeControl: false,
    panControl: false,
    zoomControl: false,
    streetViewControl: false
  };

  ... all other code ...

}

2voto

Hina Vaja Points 109
<html>
  <head>
    <title>Example Using Google Complete API</title>   
  </head>
  <body>

<form>
   <input id="geocomplete" type="text" placeholder="Type an address/location"/>
    </form>
   <script src="http://maps.googleapis.com/maps/api/js?sensor=false&amp;libraries=places"></script>
   <script src="http://ajax.googleapis.com/ajax/libs/jquery/1.7.1/jquery.min.js"></script>

  <script src="http://ubilabs.github.io/geocomplete/jquery.geocomplete.js"></script>
  <script>
   $(function(){        
    $("#geocomplete").geocomplete();                           
   });
  </script>
 </body>
</html>

Pour plus d'informations, visitez le site ce lien

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X