Je cherche un moyen de connaître l'emplacement actuel de l'utilisateur (ville) en fonction de son adresse IP à l'aide des API Google Maps.
Quelque chose de semblable à http://freegeoip.net/json mais uniquement à l'aide des API Google Maps. Est-ce possible?
Google ajoute déjà les données de localisation à toutes les requêtes entrant dans GAE (voir la documentation de l'en-tête de requête pour go , Java , php et python ). Vous devriez être intéressé X-AppEngine-Country
, X-AppEngine-Region
, X-AppEngine-City
et X-AppEngine-CityLatLong
en-têtes.
Un exemple ressemble à ceci:
X-AppEngine-Country:US
X-AppEngine-Region:ca
X-AppEngine-City:norwalk
X-AppEngine-CityLatLong:33.902237,-118.081733
Il semble que Google s'oppose activement à l'utilisation du mappage IP vers emplacement:
https://developers.google.com/maps/articles/geolocation?hl=fr
Cet article encourage l'utilisation de l'API de géolocalisation du W3C. J'étais un peu sceptique, mais il semble que presque tous les principaux navigateurs prennent déjà en charge l'API de géolocalisation:
Voici un script qui utilisera l'API Google pour acquérir le code postal de l'utilisateur et renseigner un champ de saisie.
function postalCodeLookup(input) {
var head= document.getElementsByTagName('head')[0],
script= document.createElement('script');
script.src= '//maps.googleapis.com/maps/api/js?sensor=false';
head.appendChild(script);
script.onload = function() {
if (navigator.geolocation) {
var a = input,
fallback = setTimeout(function () {
fail('10 seconds expired');
}, 10000);
navigator.geolocation.getCurrentPosition(function (pos) {
clearTimeout(fallback);
var point = new google.maps.LatLng(pos.coords.latitude, pos.coords.longitude);
new google.maps.Geocoder().geocode({'latLng': point}, function (res, status) {
if (status == google.maps.GeocoderStatus.OK && typeof res[0] !== 'undefined') {
var Zip = res[0].formatted_address.match(/,\s\w{2}\s(\d{5})/);
if (Zip) {
a.value = Zip[1];
} else fail('Unable to look-up postal code');
} else {
fail('Unable to look-up geolocation');
}
});
}, function (err) {
fail(err.message);
});
} else {
alert('Unable to find your location.');
}
function fail(err) {
console.log('err', err);
a.value('Try Again.');
}
};
}
Vous pouvez ajuster en conséquence pour acquérir des informations différentes. Pour plus d'informations, consultez le documentation de Google Maps API .