43

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

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

4

3 回答 3

23

Google 已经将位置数据附加到进入 GAE 的所有请求中(请参阅gojavaphppython的请求标头文档)。您应该对X-AppEngine-Country,X-AppEngine-Region和headersX-AppEngine-City感兴趣。X-AppEngine-CityLatLong

一个示例如下所示:

X-AppEngine-Country:US
X-AppEngine-Region:ca
X-AppEngine-City:norwalk
X-AppEngine-CityLatLong:33.902237,-118.081733
于 2013-07-01T10:36:16.333 回答
11

看起来 Google 不赞成使用 IP 到位置的映射:

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

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

http://caniuse.com/geolocation

于 2013-10-21T16:22:37.007 回答
4

这是一个脚本,它将使用 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 文档

于 2015-02-25T07:06:32.610 回答