2012-10-16 14 views
12

Sto utilizzando l'API di Google Maps per ottenere l'elenco completo di città e paesi (senza altri dettagli) e funziona in modo eccellente.Ottieni solo paesi per il completamento automatico dall'API di Google Maps

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

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

Ora voglio fare esattamente la stessa cosa ma ottenere solo nomi di paesi. Somthing come la sostituzione types: ['(cities)'] con types: ['(countries)'] ...
(quello che ho provato, ma non ha funzionato)

Cosa devo fare per ottenere solo i paesi nel mio completamento automatico?

risposta

5

Non esiste una soluzione veloce come Google offre solo due collezioni tipo: [ '(città)'] e [ '(regioni)']

Non c'è [ '(paesi)'] disponibili.

documentazione qui: https://developers.google.com/places/documentation/autocomplete#place_types

EDIT:

Si potrebbe come uso alternativo un plugin di completamento automatico provengono da questo URL: http://www.geognos.com/api/en/countries/info/all.json

+0

Quindi non esiste un modo completamente diverso per ottenere solo Paesi? – ParPar

+0

Non se vieni contro l'API di Google Maps Completamento automatico – sainiuc

+0

Grazie mille – ParPar

19

Ho giocato in giro con l'API di Google completamento automatico per un po 'ed ecco la soluzione migliore che potrei trovare per limitare i risultati ai soli paesi:

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

Se si guarda l'oggetto risultato restituito, si vedrà che c'è un array address_components che conterrà diversi oggetti che rappresentano parti diverse di un indirizzo. All'interno di ciascuno di questi oggetti, conterrà una matrice 'tipi' e all'interno di questa matrice 'tipi', vedrai le diverse etichette associate a un indirizzo, incluso uno per il paese.

+1

grande sforzo, grazie –

+0

Prego, contento che questo sia stato utile @TareqJobayere – wmock

+1

Grazie mille per questo :) – 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> 
Problemi correlati