用于定位的Google API,基于用户IP地址

时间:2013-07-01 10:19:34

标签: google-app-engine google-maps geolocation

我正在寻找一种方法,使用Google Maps API根据IP地址获取用户的当前位置(城市)。

http://freegeoip.net/json类似,但仅使用Google Maps API。这可能吗?

3 个答案:

答案 0 :(得分:20)

Google已将位置数据附加到所有进入GAE的请求中(请参阅gojavaphppython的请求标题文档。您应该对X-AppEngine-CountryX-AppEngine-RegionX-AppEngine-CityX-AppEngine-CityLatLong标题感兴趣。

示例如下:

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

答案 1 :(得分:11)

谷歌似乎对使用IP到位置的映射表示不满:

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

该文章鼓励使用W3C地理定位API。我有点怀疑,但看起来几乎所有主流浏览器都支持地理定位API:

http://caniuse.com/geolocation

答案 2 :(得分:3)

Here's a script将使用Google API获取用户邮政编码并填充输入字段。

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

您可以相应调整以获取不同的信息。有关详细信息,请查看Google Maps API documentation