Google Maps API v3 - геолокация на основе IP

Кто-нибудь смог получить геолокацию на основе IP-адреса человека, используя Google Maps API v3 JavaScript?

Мне кажется, что даже предоставленный Google пример не работает.

http://gmaps-samples-v3.googlecode.com/svn/trunk/commonloader/clientlocation.html

Вопрос

  • Этот пример работает для кого-то?

  • Как получить геолокацию на основе IP-адреса человека, используя Google Maps API v3?

Ответ 1

Q1: Он работает отсюда и, вероятно, из многих других мест. Однако обратите внимание, что геолокация с IP-адресов не является очень надежной наукой. Вы получите местоположение своего интернет-провайдера, который может быть довольно далеко, и, кроме того, базы данных IP-to-location не всегда соответствуют последним изменениям, поэтому у вас могут не быть данных для определенного IP-адреса адрес - это, вероятно, то, что происходит в вашем случае.

MaxMind, которая предлагает популярную базу данных IP-to-location, опубликовала некоторые статистические данные о своей базе данных:

Q2: Единственный способ получить геолокацию с IP-адреса через API Google Maps v3 - используя тот же метод, который используется в пример, который вы предоставили. Однако, если вы обнаружите, что любая другая база данных геолокации, такая как MaxMind GeoLite City, более точна для вашей страны, вы можете захотеть сделать геолокацию от IP-адрес самостоятельно, вместо делегирования его на Карты Google.

Ответ 2

Веб-API Google Maps, похоже, не предлагает службу геолокации IP-адресов (предоставленный пример предлагает использовать стандарт W3C Geolocation, который обычно требует действия от пользователя).

Однако! Google API геолокации Google, обычно используемый на мобильных клиентах, может использоваться из Интернета и возвращает широту и долготу на основе запрашивающего IP-адреса клиента адрес.

Вот пример быстрого jQuery, который демонстрирует его использование:

  $.ajax({
    url: 'https://www.googleapis.com/geolocation/v1/geolocate?key=YOUR-API-KEY',
    data: JSON.stringify({ "considerIp": "true" }),
    type: 'POST',
    contentType: 'application/json',
    success: function(data) {
      if(data.location) {
        alert(data.location.lat + ', ' + data.location.lng);
      } else {
        alert('not found');
      }
    }
  });

Здесь эквивалент curl:

curl -H "Content-Type: application/json" -X POST -d '{"considerIp": true}' https://www.googleapis.com/geolocation/v1/geolocate?key=YOUR-API-KEY

Не забудьте поменять реальный ключ API в приведенных выше примерах и на включить API геолокации для вашего проекта API Google.