web-dev-qa-db-fra.com

API Google pour la localisation, basée sur l'adresse IP de l'utilisateur

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?

40
Ankit

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
20
Peter Knego

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:

http://caniuse.com/geolocation

11
Jeremy Wadhams

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 .

4
davidcondrey