Google otomatik tamamlama sonuçlarını yalnızca Şehir ve Ülke ile sınırlama


198

Arama kutum için önerilen sonuçları döndürmek için google otomatik tamamlama yerleri javascript kullanıyorum, ihtiyacım olan şey yalnızca şehri ve ülkeyi girilen karakterlerle ilgili olarak göstermektir, ancak google api ihtiyacım olmayan genel yerler sonuçları verecek, bu nasıl sonucu yalnızca şehri ve ülkeyi gösterecek şekilde sınırlamak.

Aşağıdaki örneği kullanıyorum:

<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>

Yanıtlar:


374

Ülke kısıtlamasını deneyebilirsiniz

function initialize() {

 var options = {
  types: ['(cities)'],
  componentRestrictions: {country: "us"}
 };

 var input = document.getElementById('searchTextField');
 var autocomplete = new google.maps.places.Autocomplete(input, options);
}

Daha fazla bilgi:

ISO 3166-1 alfa-2 , sonuçları belirli gruplarla sınırlandırmak için kullanılabilir. Şu anda ülkeye göre filtrelemek için componentRestrictions'ı kullanabilirsiniz.

Ülke, ISO 3166-1 Alpha-2 uyumlu ülke kodu olarak iki karakterli olarak geçirilmelidir.


Resmi olarak atanmış ülke kodları


Herhangi bir harita yüklemiyorsam otomatik tamamlama sorgularında kullanım sınırı olup olmadığını biliyor musunuz? Harita
yüklersem

4
Ağustos 2014. Yalnızca ülkeleri ve şehirleri göstermek zaten mümkün mü? Örneğin Mil yazdığımda sonuç Milano, Bergamo, İtalya olur. Sadece Milano, İtalya'ya ihtiyacım var. Tüm ülkeleri tek tek eklemek bir seçenek değildir.
erdomester

2
Birden fazla ülke belirtmek mümkün mü?
bart

2
@bart görünüşe göre mümkün değil. Bu özelliği istiyorsanız lütfen bu soruna yıldız ekleyin.
dlsso

1
Eğer türler kullanırsak: ['(şehirler)'] burada posta koduyla arama yapmamıza izin verilmez.
Mohneesh Agrawal

23

<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="https://maps.googleapis.com/maps/api/js?sensor=false&libraries=places" type="text/javascript"></script>
<script type="text/javascript">
   function initialize() {
      var input = document.getElementById('searchTextField');
      var options = {
        types: ['geocode'] //this should work !
      };
      var autocomplete = new google.maps.places.Autocomplete(input, options);
   }
   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>

var options = {
  types: ['geocode'] //this should work !
};
var autocomplete = new google.maps.places.Autocomplete(input, options);

diğer türlere gönderme: http://code.google.com/apis/maps/documentation/places/supported_types.html#table2


1
bu kodu doğrudan google'dan kontrol edin. filtreleme örneği yaptılar. code.google.com/apis/maps/documentation/javascript/…
UnLoCo

otomatik tamamlama nesnesi iki değişkeni kabul etmez, yalnızca bir değişken kabul edilebilir, bu da 'coğrafi kod'dur. Bu sorunu nasıl çözeceğimi bilmiyorum. Google dokümantasyon listesi çok fazla türde ancak hiçbiri kabul edilemez.
JohnTaa

aynı parametreler işe yarar AutocompleteServicemı?
Steven Aguilar

12

bunu dene

<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="https://maps.googleapis.com/maps/api/js?sensor=false&amp;libraries=places&region=in" 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>

http://maps.googleapis.com/maps/api/js?sensor=false&libraries=places "type =" metin / javascript "

Bunu şu şekilde değiştirin: "region = in" (in = india)

" http://maps.googleapis.com/maps/api/js?sensor=false&libraries=places®ion=in " type = "metin / javascript"


Şehirlerin listesine, eyaletlerin listesine, alanların listesine vb. İhtiyacımız var
Shadab K

Bu kabul edilen cevap olmalı. OP'nin sorduğu sonuca ulaşmanın en basit ve en hızlı yolu. ve benim için çalıştı.
user2056633

9

cevap bir ülkeden tüm şehirleri listeleme yılında Francois sonuçları verdiği. Ancak gereksinim, bir ülkedeki tüm bölgeleri (şehirler + eyaletler + diğer bölgeler vb.) Veya ülkedeki kuruluşları listelemekse, sonuçları türlerine göre filtreleyebilirsiniz.

Yalnızca ülkedeki şehirleri listele

 var options = {
  types: ['(cities)'],
  componentRestrictions: {country: "us"}
 };

Ülkedeki tüm şehirleri, eyaletleri ve bölgeleri listele

 var options = {
  types: ['(regions)'],
  componentRestrictions: {country: "us"}
 };

Ülkedeki restoranlar, mağazalar ve ofisler gibi tüm kuruluşları listeleyin

  var options = {
      types: ['establishment'],
      componentRestrictions: {country: "us"}
     };

Daha fazla bilgi ve seçenekler için:

https://developers.google.com/maps/documentation/javascript/places-autocomplete

Umarım bu birisi için yararlı olabilir


9

Temel olarak kabul edilen yanıtla aynıdır, ancak yeni tür ve birden çok ülke kısıtlamasıyla güncellenmiştir:

function initialize() {

 var options = {
  types: ['(regions)'],
  componentRestrictions: {country: ["us", "de"]}
 };

 var input = document.getElementById('searchTextField');
 var autocomplete = new google.maps.places.Autocomplete(input, options);
}

'(regions)'Bunun yerine kullanıldığında '(cities)'şehir adının yanı sıra posta kodu ile arama yapabilirsiniz.

Resmi belgelere bakın, Tablo 3: https://developers.google.com/places/supported_types


8

Google Autocomplete API ile bir süredir oynuyorum ve sonuçlarınızı yalnızca ülkelerle sınırlamak için bulabileceğim en iyi çözüm:

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
    }
  }
}

Döndürülen sonuç nesnesine bakarsanız, bir adresin farklı bölümlerini temsil eden birkaç nesne içerecek bir adres_şirketleri dizisi olduğunu görürsünüz. Bu nesnelerin her birinde, bir 'türler' dizisi içerecek ve bu 'türler' dizisi içinde, bir adresle ilişkili, ülke için bir tane de dahil olmak üzere farklı etiketleri göreceksiniz.


ABD'de yalnızca belirli eyaletlerle sınırlandırmanın, hatta belirli eyaletleri hariç tutmanın bir yolu var mı?
Martin Erlic

@santafebound Aynı şeyi yapmaya çalışıyorum (Avustralya'daki belirli bir eyalet için). Dokümantasyondan cevap 'Hayır [henüz]' gibi görünüyor, ancak responsenesneyi durdurmak ve verilerdeki diğer anahtarlarla kısıtlamak için bir yol bulmayı umuyorum .
GT.

4

Ayrıca ülkenizdeki kısıtlamalar nedeniyle haritayı yakınlaştırmanız ve ortalamanız gerekecektir!

Sadece yakınlaştırma ve merkez parametrelerini kullanın! ;)

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

  ... all other code ...

}

4

Kendime bir çözüm buldum

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

bu çözüm sadece şehri ve ülkeyi gösterir ..


Otomatik tamamlama ile tam kod listesini sağlayabilir misiniz
Volodymyr Khmil

2
<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>

Daha fazla bilgi için bu bağlantıyı ziyaret edin

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.