У меня есть местоположение (город, штат), дата и время, и я хочу преобразовать его в utc, но вам нужно сначала найти часовой пояс местоположения. Я провел небольшое исследование, и все, кажется, указывает на земные инструменты или геонауки, но оба веб-сервиса, по-видимому, являются широтой и долготой. Есть ли служба или драгоценный камень или любой другой способ найти часовой пояс на основе этого формата местоположения? или как можно преобразовать местоположение в широту и долготу?
Ruby gem для поиска временной зоны местоположения
Ответ 1
Вы можете легко получить широту и долготу, используя API геокодирования google maps. Для 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
Ответ 2
Во второй части вопроса см. принятый ответ на этот вопрос:
Определите часовой пояс из широты/долготы без использования веб-сервисов, таких как Geonames.org
Как указано в этом ответе, вы должны:
- Загрузите базу данных городов с сайта geonames.org
- преобразуйте его в компактный список часовых поясов lat/lon →
- используйте R-Tree для эффективного поиска ближайшего города (точнее, его часовой пояс) к заданной координате
Имейте в виду, что многие штаты США принадлежат к одному часовому поясу, что облегчает работу.
Ответ 3
Вы можете совершать собственные звонки в службу геолокации, например Google Maps, чтобы перевести город, штат на широту и долготу. Существуют также открытые семена базы данных, которые дадут вам широту и долготу для городов по всему миру. Вы можете сделать модель местоположения и засеять эту таблицу одним из них.
Вот одно место, где вы можете бесплатно загрузить данные геолокации: http://www.maxmind.com/app/geolitecity
Ответ 4
Проверьте этот драгоценный камень: https://github.com/sck-v/google_timezone
Он использует часовой пояс api для определения часового пояса по известной широте и долготе
Ответ 5
Проверьте Gist на https://gist.github.com/4676207 для версии, использующей Google API (https://developers.google.com/maps/documentation/timezone/). Вместе с Geocoder gem вы можете легко найти все идентификаторы временной зоны:)