我正在寻找一种方法,使用Google Maps API根据IP地址获取用户的当前位置(城市)。
与http://freegeoip.net/json类似,但仅使用Google Maps API。这可能吗?
答案 0 :(得分:20)
Google已将位置数据附加到所有进入GAE的请求中(请参阅go,java,php和python的请求标题文档。您应该对X-AppEngine-Country
,X-AppEngine-Region
,X-AppEngine-City
和X-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:
答案 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。