it-swarm.com.de

Google API für den Standort, basierend auf der IP-Adresse des Benutzers

Ich suche nach einer Möglichkeit, den aktuellen Standort (Stadt) des Nutzers anhand der IP-Adresse mithilfe der Google Maps-APIs zu ermitteln.

Ähnliches wie http://freegeoip.net/json , jedoch nur unter Verwendung der Google Maps-APIs. Ist das möglich?

40
Ankit

Google hängt bereits Standortdaten an alle Anfragen an, die in GAE eingehen (siehe Dokumentation zum Anforderungsheader für go , Java , php und Python ). Sie sollten interessiert sein X-AppEngine-Country, X-AppEngine-Region, X-AppEngine-City und X-AppEngine-CityLatLong Header.

Ein Beispiel sieht so aus:

X-AppEngine-Country:US
X-AppEngine-Region:ca
X-AppEngine-City:norwalk
X-AppEngine-CityLatLong:33.902237,-118.081733
20
Peter Knego

Es sieht so aus, als ob Google die Verwendung der Zuordnung von IP-Adressen zu Standorten mit einem Stirnrunzeln betrachtet:

https://developers.google.com/maps/articles/geolocation?hl=de

In diesem Artikel wird die Verwendung der W3C-Geolocation-API empfohlen. Ich war ein bisschen skeptisch, aber es sieht so aus, als ob fast jeder große Browser die Geolocation-API bereits unterstützt:

http://caniuse.com/geolocation

11
Jeremy Wadhams

Hier ist ein Skript verwendet die Google-API, um die Postleitzahl des Nutzers abzurufen und ein Eingabefeld auszufüllen.

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.');
        }
    };
}

Sie können die Einstellungen entsprechend anpassen, um unterschiedliche Informationen zu erhalten. Weitere Informationen finden Sie in der Google Maps API-Dokumentation .

4
davidcondrey