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?
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 :)
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
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);
});
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);
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)
}
})
}
Vous aurez besoin d'un service Reverse Geocoder .