Рубиновый камень для поиска часового пояса - PullRequest
28 голосов
/ 02 декабря 2011

У меня есть местоположение (город, штат), дата и время, и я хочу преобразовать его в utc, но сначала нужно найти часовой пояс местоположения. Я провел небольшое исследование, и все, кажется, указывает либо на earthtools, либо на geonames, но оба веб-сервиса кажутся только широтой и долготой. Существует ли услуга или драгоценный камень или какой-либо другой способ найти часовой пояс на основе этого формата местоположения? или как можно преобразовать местоположение в широту и долготу?

Ответы [ 5 ]

38 голосов
/ 02 декабря 2011

Вы можете легко получить широту и долготу, используя API геокодирования карт Google .Существуют реализации ruby ​​для API, такие как GeoKit .Как только у вас есть это, вы можете использовать драгоценный камень часового пояса , чтобы легко получить часовой пояс широты и долготы.Этот драгоценный камень также позволяет легко преобразовывать время в вашем часовом поясе.

Вот пример использования GeoKit и TimeZone .

require 'geokit'
require 'timezone'

res = Geokit::Geocoders::GoogleGeocoder.geocode('140 Market St, San Francisco, CA')
timezone = Timezone::Zone.new(:latlon => res.ll)

timezone.zone
=> "America/Los_Angeles"
timezone.time Time.now
=> 2011-12-01 14:02:13 UTC
9 голосов
/ 02 декабря 2011

Для второй части вопроса см. Принятый ответ на этот вопрос:

Определение часового пояса по широте / долготе без использования веб-сервисов, таких как Geonames.org

Как указано в этом ответе, вы должны:

  • Скачать базу данных городов с geonames.org
  • преобразовать его в компактный лат / лон -> список часовых поясов
  • используйте реализацию R-Tree для эффективного поиска ближайшего города (точнее, его города). часовой пояс) до заданной координаты

Помните также, что многие штаты США принадлежат одному часовому поясу, что должно облегчить работу.

1 голос
/ 20 мая 2013

Проверьте этот драгоценный камень: https://github.com/sck-v/google_timezone

Он использует API часового пояса Google, чтобы определить часовой пояс по известным широте и долготе

1 голос
/ 02 декабря 2011

Вы можете совершать собственные звонки в службу геолокации, например, в Карты Google, чтобы перевести город, штат в широту и долготу.Есть также открытые базы данных, которые дадут вам широту и долготу для городов по всему миру.Вы можете создать модель местоположения и заполнить эту таблицу одним из них.

Вот одно место, где вы можете бесплатно загрузить данные геолокации: http://www.maxmind.com/app/geolitecity

0 голосов
/ 30 января 2013

Проверьте Gist на https://gist.github.com/4676207 для версии, которая использует API Google (https://developers.google.com/maps/documentation/timezone/). Вместе с Geocoder gem вы можете легко найти все идентификаторы часовых поясов:)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...