web-dev-qa-db-fra.com

Comment trouver le pays d'un utilisateur à l'aide de la géolocalisation HTML5?

Je connais bien la géolocalisation HTML5 pour renvoyer les coordonnées approximatives de l'emplacement de l'utilisateur.

Cependant, comment puis-je retourner le nom du pays dans lequel se trouvent leurs coordonnées?

30
Curt
    var geocoder = new google.maps.Geocoder();
    geocoder.geocode({'latLng': <YOURLATLNGRESPONSEFROMGEO>}, function(results, status) {
            if (status == google.maps.GeocoderStatus.OK) {
                if (results[0]) {
                    var loc = getCountry(results);
                }
            }
        });

    function getCountry(results)
    {
        for (var i = 0; i < results[0].address_components.length; i++)
        {
        var shortname = results[0].address_components[i].short_name;
        var longname = results[0].address_components[i].long_name;
        var type = results[0].address_components[i].types;
        if (type.indexOf("country") != -1)
        {
            if (!isNullOrWhitespace(shortname))
            {
                return shortname;
            }
            else
            {
                return longname;
            }
        }
    }

}

function isNullOrWhitespace(text) {
    if (text == null) {
        return true;
    }
    return text.replace(/\s/gi, '').length < 1;
}

C'est ce que j'utilise :)

29
slandau

Si vous voulez juste le pays, voici une approche beaucoup plus simple en utilisant ws.geonames.org plutôt que Google:

if (navigator.geolocation) {
    navigator.geolocation.getCurrentPosition(function(position) {
        $.getJSON('http://ws.geonames.org/countryCode', {
            lat: position.coords.latitude,
            lng: position.coords.longitude,
            type: 'JSON'
        }, function(result) {
            alert(result.countryName);
        });
    });
}​

Normalement, je dirais que l'utilisation d'un service Google signifierait une plus grande fiabilité, mais avec autant de services Google retirés récemment, c'est probablement une bonne idée de regarder d'autres solutions.


Au fait, j'ai fait quelques expériences en utilisant tous les services de géocodage gratuits que j'ai pu trouver. Il renvoie le pays et le nom du service responsable dès que l'un d'eux trouve un résultat acceptable.

N'hésitez pas à jouer avec via JSFiddle: Recherche différée du code pays via plusieurs webapis de géolocalisation

35
hippietrail

Si vous rencontrez des problèmes pour que la géolocalisation fonctionne comme je l'ai fait dans Chrome, je peux recommander cette méthode alternative (exemple avec jQuery):

$.getJSON("https://freegeoip.net/json/", function(data) {
    const countryCode = data.country_code;
    const countryName = data.country_name;
    const ip = data.ip;
    const timezone = data.time_zone;
    const latitude = data.latitude;
    const longitude = data.longitude;

    alert("Country Code: " + countryCode);
    alert("Country Name: " + countryName);
    alert("IP: " + ip); 
    alert("Time Zone: " + timezone);
    alert("Latitude: " + latitude);
    alert("Longitude: " + longitude);   
});
2
nilsi

faites attention, vous devez définir la propriété 'username' pour utiliser cette API, sinon vous obtiendrez une erreur.

setTimeout(function() {
                if (navigator.geolocation) {
                    navigator.geolocation.getCurrentPosition(function(position) {
                        $.getJSON('http://api.geonames.org/countryCode', {
                            lat : position.coords.latitude,
                            lng : position.coords.longitude,
                            type : 'JSON',
                            username : 'demo'
                        }, function(result) {
                            alert(result.countryName);
                        });
                    });
                }

            }, 1000);
1
Kirill Shur

Réponse similaire à celle de @hippietrail mais avec un autre service sans inscription.

if ( navigator.geolocation ) {
  navigator.geolocation.getCurrentPosition(function(position) {

  $.ajax('http://www.datasciencetoolkit.org/coordinates2politics/'
    + position.coords.latitude + ','
    + position.coords.longitude, {dataType: 'jsonp'})
  .done(function(data, textStatus, jqXHR) {
    if ( textStatus === 'success' ) {
      var country = data[0].politics[0].name
      alert(country)
    }
  })
}
0
fentas

Vous aurez besoin d'un service Reverse Geocoder .

0
Gabi Purcaru