2

I'm building a website that uses geolocation in HTML5 to provide a service specific to the region in which the user is. Here is what I have been doing: I use the Javascript in this SO question to get country and administrative region names. Then I search the country and region names in a database and it returns location-specific data that I can display.

Here is the script:

<script src="https://maps.googleapis.com/maps/api/js?sensor=false"></script>
<script>
    var region = "";
    var country = "";
    function getLocation()
    {
        if (navigator.geolocation)
          {
              navigator.geolocation.getCurrentPosition(showPosition,noGeolocation);
          } else {
              ...
          }
    }
    function showPosition(position)
    {
        var geocoder = new google.maps.Geocoder();
        var latlong = new google.maps.LatLng(position.coords.latitude,position.coords.longitude);
        geocoder.geocode({'latLng': latlong}, function(results, status) {
              if (status == google.maps.GeocoderStatus.OK) {
                  if (results[0]) {
                    for (var i = 0; i < results[0].address_components.length; i++)
                    {
                        var longname = results[0].address_components[i].long_name;
                        var type = results[0].address_components[i].types;
                        if (type.indexOf("administrative_area_level_1") != -1)
                        {
                            region = longname;
                        }
                        if (type.indexOf("country") != -1)
                        {
                            country = longname;
                        }
                      }
              }
        });
    }
    function noGeolocation()
    {
        ...
    }

    getLocation();
</script>

This script is working fine. I had no problem with it, until I used an OS and browser set to a different languages. The script then returned the country and region names in that language. Of course, I couldnt find any match in my database.

So, the question(s) is (are): is there a way to get language-independent country and region codes from google reverse geolocation? or is there a way to always get it in english? am I better off using IP geolocation then? or should I use a totally different method?

Thanks for the help.

Community
  • 1
  • 1
Julien Spronck
  • 15,069
  • 4
  • 47
  • 55

2 Answers2

1

You should use the short_name value for the country, which is the two-digit country code. These are ISO standard codes and should be the basis for your database lookup, not the localized country name.

Mike Brant
  • 70,514
  • 10
  • 99
  • 103
1

Another options, which has ISO codes for administrative regions, is MaxMind's GeoIP2 JavaScript API:

http://dev.maxmind.com/geoip/geoip2/javascript/

It uses W3C geolocation when available and falls back on MaxMind's IP geolocation database otherwise. The free version requires attribution somewhere on your site.

Greg Oschwald
  • 1,716
  • 2
  • 11
  • 14