我正在寻找一种方法来使用 Google Maps API 基于 IP 地址获取用户的当前位置(城市)。
类似于http://freegeoip.net/json但仅使用 Google Maps API 的东西。这可能吗?
我正在寻找一种方法来使用 Google Maps API 基于 IP 地址获取用户的当前位置(城市)。
类似于http://freegeoip.net/json但仅使用 Google Maps API 的东西。这可能吗?
Google 已经将位置数据附加到进入 GAE 的所有请求中(请参阅go、java、php和python的请求标头文档)。您应该对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
看起来 Google 不赞成使用 IP 到位置的映射:
https://developers.google.com/maps/articles/geolocation?hl=en
那篇文章鼓励使用 W3C 地理定位 API。我有点怀疑,但看起来几乎每个主流浏览器都已经支持地理定位 API:
这是一个脚本,它将使用 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 文档。