Google API для местоположения на основе IP-адреса пользователя
Я ищу APi, который мог бы вернуть обратно текущее местоположение пользователя (город) на основе этого IP-адреса. Искал его и нашел
http://freegeoip.net/json
Но мой клиент - это большой поклонник Google и настаивает только на любом доступном API Google, может ли кто-то помочь мне в этом.
Ответы
Ответ 1
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
Ответ 2
Похоже, Google активно хмурится, используя сопоставление IP-to-location:
https://developers.google.com/maps/articles/geolocation?hl=en
В этой статье предлагается использовать API геолокации W3C. Я был немного скептичен, но похоже, что почти каждый крупный браузер уже поддерживает API геолокации:
http://caniuse.com/geolocation
Ответ 3
Здесь script, который будет использовать API Google для получения почтового индекса пользователей и заполнения поля ввода.
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.');
}
};
}
Вы можете соответствующим образом настроить для получения различной информации. Для получения дополнительной информации ознакомьтесь с документацией API Карт Google.
Ответ 4
<html>
<head>
<meta http-equiv="content-type" content="text/html; charset=utf-8" />
<script type="text/javascript" src="../jquery/jquery-1.4.4.min.js"></script>
<script src="http://maps.googleapis.com/maps/api/js?sensor=false" type="text/javascript"></script>
<script type="text/javascript" src="../gmap3.js"></script>
<style> .gmap3{
margin: 20px auto;
border: 1px dashed #C0C0C0;
width: 500px;
height: 250px;
}
.test1-result{
text-align:center;
}
</style>
<script type="text/javascript">
$(function(){ $('#test1').gmap3({
getgeoloc:{
callback : function(latLng){
if (latLng){
$('#test1-result').html('localised !');
$(this).gmap3({
marker:{
latLng:latLng
}
});
} else {
$('#test1-result').html('not localised !');
}
}
}
});
});
</script>