ParPar
ParPar

Reputation: 7569

Get only countries to autocomplete from Google Maps API

I'm using Google Maps API to get autocomplete list of cities and countries (without other details), and it works exellent.

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

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

Now I want to do exactly the same but to get only countries names. Somthing like replacing types: ['(cities)'] with types: ['(countries)']...
(what I tried but didn't work)

What should I do in order to get only countries into my autocomplete?

Upvotes: 16

Views: 36723

Answers (4)

adnanmuttaleb
adnanmuttaleb

Reputation: 3624

This is something I have done using the python sdk, but it should be easily translated to any other sdk including JS:

import googlemaps


def country_search():
    gmaps = googlemaps.Client(key='Your-Key')

    # Country code is ISO standard, so it is easy to get country_name based on the code
    country_name, country_code = 'Bahamas', 'BS'
    
    # This limits the search for very few results
    result = gmaps.places_autocomplete(input_text=country_name, types='(regions)', components={'country': [country_code]})
    
    # There should be only one item that has type 'country' in `result`
    country = next(filter(lambda info: any(type == 'country' for type in info['types']), result))

    print(country["place_id"])

Upvotes: 0

Nitesh Chaudhari
Nitesh Chaudhari

Reputation: 1

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

Upvotes: -3

wmock
wmock

Reputation: 5492

I've been playing around with the Google Autocomplete API for a bit and here's the best solution I could find for limiting your results to only countries:

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

If you look at the result object that's returned, you'll see that there's an address_components array which will contain several objects representing different parts of an address. Within each of these objects, it will contain a 'types' array and within this 'types' array, you'll see the different labels associated with an address, including one for country.

Upvotes: 27

sainiuc
sainiuc

Reputation: 1697

There is no quick solution as Google only offers two type collections: ['(cities)'] and ['(regions)']

There is no ['(countries)'] available.

Documentation here: https://developers.google.com/places/documentation/autocomplete#place_types

EDIT:

You could as an alternative use an autocomplete plugin sourced from this url: http://www.geognos.com/api/en/countries/info/all.json

Upvotes: 11

Related Questions