2012-10-16 10 views
12

Używam Google Maps API, aby uzyskać autouzupełnianie listy miast i krajów (bez innych szczegółów) i działa znakomicie.Pobierz tylko kraje, aby autouzupełnić z Google Maps API

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

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

Teraz chcę zrobić dokładnie to samo, ale uzyskać tylko nazwy krajów. Somthing jak zastąpienie types: ['(cities)'] z types: ['(countries)'] ...
(co starałem, ale nie działa)

Co należy zrobić, aby tylko dostać się do mojego kraje autouzupełnianie?

Odpowiedz

5

Nie ma szybkie rozwiązanie jak Google oferuje tylko dwa zbiory typu: [ '(miasta)'] i [ '(regiony)']

Nie ma [ '(kraje)'] dostępne.

Dokumentacja tutaj: https://developers.google.com/places/documentation/autocomplete#place_types

EDIT:

Mogłabyś jako alternatywnego wykorzystania plugin autouzupełniania pochodzących z tego adresu URL: http://www.geognos.com/api/en/countries/info/all.json

+0

Więc nie ma zupełnie innego sposobu na zdobycie tylko krajów? – ParPar

+0

Nie, jeśli contrain się do Google Maps API autouzupełniania – sainiuc

+0

Dziękuję bardzo – ParPar

19

Grałem około z API Google autouzupełniania na chwilę i oto najlepsze rozwiązanie, jakie mogłem znaleźć, aby ograniczyć wyniki tylko do krajów:

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

Jeśli spojrzysz na wynikowy obiekt, który został zwrócony, zobaczysz, że istnieje tablica address_components, która będzie zawierała kilka obiektów reprezentujących różne części adresu. Wewnątrz każdego z tych obiektów będzie zawierała tablicę "types", aw tej tablicy "types" zobaczysz różne etykiety powiązane z adresem, w tym jeden dla kraju.

+1

wielkim wysiłkiem, dziękuję –

+0

Jesteś mile widziany - zadowolony, to był pomocny @TareqJobayere – wmock

+1

dziękuję za to :) – user1012181

-2
<!DOCTYPE html> 
<html> 
<head> 
<link type="text/css" rel="stylesheet" href="https://fonts.googleapis.com/css?family=Roboto:300,400,500"> 
<script src="https://maps.googleapis.com/maps/api/js?v=3.exp&sensor=false&libraries=places"></script> 
</head> 
<body> 
<div id="locationField"> 
<input id="autocomplete" placeholder="Enter your address" type="text"></input> 
</div> 
<div><pre><p id="data"></p></pre></div> 
<script type="> 
var autocomplete; 
function initialize() { 
autocomplete = new google.maps.places.Autocomplete(document.getElementById('autocomplete'),{ types: ['(cities)'] }); 
google.maps.event.addListener(autocomplete, 'place_changed', function() { 
var address_components=autocomplete.getPlace().address_components; 
var city=''; 
var country=''; 
for(var j =0 ;j<address_components.length;j++) 
{ 
city =address_components[0].long_name; 
if(address_components[j].types[0]=='country') 
{ 
    country=address_components[j].long_name; 
} 
} 
document.getElementById('data').innerHTML="City Name : <b>" + city + "</b> <br/>Country Name : <b>" + country + "</b>"; 
}); 
} 
initialize(); 
</script> 
</body> 
</html>