Как мне автоматически найти местоположение пользователя?

В настоящее время я работаю над сайтом со списком выставок. Я собираюсь отобразить информацию о местоположении для пользователя, отсортированную по-разному.

Я знаю, что могу спросить пользователя, где он находится, когда он впервые входит на сайт, но я заметил, что многие сайты имеют встроенную возможность для автоматического определения местоположения (пример см. Last.fm «События: списки концертов в вашем площадь").

Как они это делают? В настоящее время я создаю свой сайт на Ruby on Rails.

Ответов (5)

Возможно, вы захотите взглянуть на решение MaxMind GeoLite для определения местоположения IP. Решение с открытым исходным кодом.

Вот ссылка на документацию по соответствующему API Карт Google:

http://code.google.com/apis/ajax/documentation/#ClientLocation

Он показывает пример того, как его использовать:

/**
 * Set the currentState_ and currentCountry_ properties based on the client's
 * current location (when available and in the US), or to the defaults.
 */
InTheNews.prototype.setDefaultLocation_ = function() {
  this.currentState_ = this.options_.startingState;
  if (google.loader.ClientLocation &&
      google.loader.ClientLocation.address.country_code == "US" &&
      google.loader.ClientLocation.address.region) {

    // geo locate was successful and user is in the United States. range
    // check the region so that we can safely use it when selecting a
    // state level polygon overlay
    var state = google.loader.ClientLocation.address.region.toUpperCase();
    if (InTheNews.stateNames[state]) {
      this.currentState_ = state;
    }
  }
  this.currentCountry_ = "US";
}

И сообщает, что вы от этого получите:

При заполнении google.loader.ClientLocationобъект заполняется со следующими свойствами гранулярности городского уровня:

  • ClientLocation.latitude - предоставляет широту низкого разрешения, связанную с IP-адресом клиента

  • ClientLocation.longitude - предоставляет долготу низкого разрешения, связанную с IP-адресом клиента

  • ClientLocation.address.city - предоставляет название города, связанного с IP-адресом клиента

  • ClientLocation.address.country - предоставляет название страны, связанной с IP-адресом клиента

  • ClientLocation.address.country_code - предоставляет имя кода страны ISO 3166-1, связанного с IP-адресом клиента.

  • ClientLocation.address.region - предоставляет название региона для конкретной страны, связанного с IP-адресом клиента.

Обычно они используют разрешение IP по IP-таблицам. ip2nation может дать некоторое представление

Есть новый способ, на самом деле это лучший способ найти географическое местоположение, потому что браузер изначально поддерживает W3C API для геолокации ... Вам следует проверить GeoMereLaal .

http://humbuckercode.co.uk/licks/gems/geoip/ - это простой драгоценный камень, использующий бесплатные или платные библиотеки Maxminds.

Простая настройка, обновление схемы не требуется.