Подтвердить что ты не робот

Google API для местоположения на основе IP-адреса пользователя

Я ищу APi, который мог бы вернуть обратно текущее местоположение пользователя (город) на основе этого IP-адреса. Искал его и нашел

http://freegeoip.net/json

Но мой клиент - это большой поклонник Google и настаивает только на любом доступном API Google, может ли кто-то помочь мне в этом.

4b9b3361

Ответ 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>