Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Google's Geocoder returns wrong country, ignoring the region hint

I'm using Google's Geocoder to find lat lng coordinates for a given address.

    var geocoder = new google.maps.Geocoder();     geocoder.geocode(     {         'address':  address,         'region':   'uk'     }, function(results, status) {         if(status == google.maps.GeocoderStatus.OK) {             lat: results[0].geometry.location.lat(),             lng: results[0].geometry.location.lng()     }); 

address variable is taken from an input field.

I want to search locations only in UK. I thought that specifying 'region': 'uk' should be enough but it's not. When I type in "Boston" it's finding Boston in US and I wanted the one in UK.

How to restrict Geocoder to return locations only from one country or maybe from a certain lat lng range?

Thanks

like image 980
6bytes Avatar asked Apr 15 '10 16:04

6bytes


2 Answers

The following code will get the first matching address in the UK without the need to modify the address.

  var geocoder = new google.maps.Geocoder();   geocoder.geocode(   {     'address':  address,     'region':   'uk'   }, function(results, status) {     if(status == google.maps.GeocoderStatus.OK) {         for (var i=0; i<results.length; i++) {             for (var j=0; j<results[i].address_components.length; j++) {                if ($.inArray("country", results[i].address_components[j].types) >= 0) {                     if (results[i].address_components[j].short_name == "GB") {                         return_address = results[i].formatted_address;                         return_lat = results[i].geometry.location.lat();                         return_lng = results[i].geometry.location.lng();                         ...                         return;                     }                 }             }         }     }); 
like image 85
Ivo Bosticky Avatar answered Oct 20 '22 22:10

Ivo Bosticky


Use componentRestrictions attribute:

geocoder.geocode({'address': request.term, componentRestrictions: {country: 'GB'}} 
like image 35
Yenya Avatar answered Oct 20 '22 22:10

Yenya