Поиск часового пояса по широте и долготе [закрыто]

79

Есть ли какая-нибудь библиотека (или, что еще лучше, веб-сервис), которая может преобразовывать широту / долготу в часовой пояс?

Мэтт Шеппард
источник
9
Есть ли для этого не-веб-сервисное решение? У меня есть случай использования, когда у меня есть случайное подключение к Интернету, и мне все еще нужно получать эту информацию в полевых условиях. Была бы полезна база данных о географии часовых поясов с API наверху.
Саймон Гиллби
Саймон, см .: stackoverflow.com/questions/5584602/…
fjsj
Да, для этого на сайте askgeo.com есть коммерчески доступная библиотека . Он написан на Java, потокобезопасен и очень быстр (10 000 запросов в секунду).
Джеймс Д.
1
Когда все сказано и сделано, время - это просто измерение расписания. «Часы» не относятся к местному суточному циклу, поскольку он ежегодно меняется даже для данного места. Было бы намного проще, если бы все использовали звездное время в секундах, килосекундах, мегасекундах и т. Д. KSec составляет около 17 минут, что является очень человеческим отрезком времени. День составляет примерно 86,4kSec. Это не четное число, ну и что? Ни один день не бывает такой же длины, как предыдущий, потому что вращение планеты замедляется.
Питер Вон

Ответы:

64

Я довольно глубоко изучил этот вопрос для проекта, над которым работаю. GeoNames.org и EarthTools.com - хорошие варианты для многих ситуаций, но со следующими серьезными недостатками:

  • GeoNames.org находит часовой пояс путем поиска ближайшей точки в своей базе данных, содержащей поле часового пояса. Это часто приводит к неправильному результату возле границ. Кроме того, он очень медленный, что приводит к тому, что время запроса составляет порядка пары секунд на запрос. Он также не возвращает действительный часовой пояс, если рядом с точкой запроса в их базе данных нет элемента. GeoNames также ограничивает количество запросов, которые можно делать в день, что затрудняет массовые операции.
  • EarthTools.org использует карту и может быстро возвращать запросы, но не учитывает летнее время для большинства мест и возвращает необработанное смещение, а не идентификатор часового пояса (т. Е. Они возвращают "GMT-7 "вместо" Америка / Чикаго "). Кроме того, я просто просмотрел их страницу во время подготовки этого сообщения, и Google Chrome предупредил о вредоносных программах на их сайте. Это ново для меня и может измениться, но, очевидно, вызывает беспокойство.

Эти недостатки означали, что эти существующие инструменты не подходили для моих нужд, поэтому я развернул собственное решение и опубликовал его для общего использования. Вы можете найти это здесь:

http://www.askgeo.com/

AskGeo основан на карте часовых поясов мира, поэтому он возвращает действительный часовой пояс для каждой допустимой широты и долготы. Он возвращает стандартный идентификатор часового пояса (например, «America / Los_Angeles»), используемый в Linux и большинстве других операционных систем и сред программирования. Он также возвращает текущее смещение с полным учетом перехода на летнее время.

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

Когда мы впервые запустили его, мы создали его на Google App Engine (GAE) и сделали его бесплатным для всех пользователей. Это стало возможным, потому что в то время цены GAE были очень низкими. С тех пор нагрузка на наши серверы существенно выросла, а цены на GAE сильно выросли. Сочетание обоих факторов побудило нас перейти на Amazon Web Services для хостинга и начать взимать плату за коммерческое использование, сохранив при этом бесплатную услугу для некоммерческих, некоммерческих проектов с открытым исходным кодом и исследователей. Для коммерческих пользователей мы предоставляем 1000 бесплатных запросов, чтобы потенциальные клиенты могли оценить API, чтобы убедиться, что он соответствует их потребностям. Посетите веб-сайт для получения информации о ценах и условиях.

Базовая библиотека была написана на Java, и по многочисленным просьбам мы также выпустили библиотеку по коммерческой лицензии. Полная документация по библиотеке и информация о ценах находятся на веб-сайте.

Надеюсь, это будет полезно. Это, безусловно, было полезно для проекта, над которым я работал.

Джеймс Д.
источник
Есть ли способ преобразовать идентификатор вашего часового пояса (например, «America / Los_Angeles») в .NET System.TimeZoneInfo?
Иуда Габриэль Химанго
Эта страница содержит сопоставление между идентификаторами базы данных tz (также известными как идентификаторы Olson) и идентификаторами часовых поясов Windows: unicode.org/repos/cldr-tmp/trunk/diff/supplemental/…
Джеймс Д.
Хорошая работа. Было бы хорошо, если бы можно было передать дату, чтобы получить корректировку дневного света для другого момента времени. Добавление имени часового пояса Windows было бы дополнительным бонусом.
CodeGrue
1
Планируете ли вы принять параметр обратного вызова, чтобы JSONP работал?
Джон Ниландер
8
Если я что-то не пропустил, это уже не бесплатно: API можно попробовать бесплатно, и он бесплатен для некоммерческого и личного использования. Проекты с открытым исходным кодом, студенты и частные лица могут использовать его бесплатно (в соответствии с нашими правилами использования). Любой пользователь, желающий использовать API в коммерческих целях, должен платить за доступ 200 долларов в год.
Arry
28

Взгляните на Geonames.org

Это бесплатный веб-сервис, который позволяет вам получать много информации из долгого / долгого диапазона.

Они также предоставляют бесплатный (и с открытым исходным кодом) Java-клиент для библиотеки GeoNames Webservices (также предоставляется библиотека для других языков: ruby, python, perl, lisp ...)

Вот некоторая информация, которую вы можете получить из long / lat: (полный список веб-сервисов здесь)

  • Найти ближайший адрес
  • Найти ближайший перекресток
  • Найти близлежащие улицы
  • Высота
  • Часовой пояс
Фредерик Морен
источник
1
это даст вам текущее время и смещения для летнего и стандартного времени, но у меня возникли проблемы с определением того, находится ли дата в будущем в разделе «Летнее время»,
Скотт Коуэн,
для этого, вероятно, будет более полезен Java-календарь
Фредерик Морин,
12

Часовые пояса теперь доступны через Google API

https://developers.google.com/maps/documentation/timezone/

Джон
источник
Это здорово, знаете ли вы, использую ли я Google Maps API для геокодирования, если лимит 2500 для всех запросов или 2500 для геокодирования и еще 2500 для часового пояса?
Tesla
8

API мест Yahoo предоставляет информацию о часовом поясе через обратную геолокацию.

Проверить это.

http://developer.yahoo.com/geo/placefinder/guide/requests.html

Джихо Кан
источник
Для PHP я использую unserialize (file_get_contents ()) в базовом URL с location = lat% 20long & gflags = R & flags = PT, чтобы получить массив, включающий часовой пояс.
Оуэн
1
URL-адрес запроса выглядит следующим образом: where.yahooapis.com/…
Джон Стивенс
5

Какая точность вам нужна? Почти правильно разделить долготу на 15: p

Том
источник
6
Я был довольно шутлив, когда давал этот ответ, но только когда я снова столкнулся с этим вопросом, пытаясь решить проблему сам, я понял, насколько бесполезна эта идея: upload.wikimedia.org/wikipedia/commons/e/e7 /Timezones2008.png (если вы не находитесь в международных водах)
Том
1
Я смотрю на эту карту и думаю, что предложенный вами подход на самом деле довольно неплох для грубой оценки. Мне, например, нужно что-то довольно приблизительное (пара часов - нормально), и деление долготы на 15 выглядит хорошим решением. Из карты видно, что на Земле очень мало населенных пунктов вокруг международной линии перемены дат, где деление на 15 приведет к ужасной ошибке.
МБ.
2
Получение часового пояса с политической точки зрения с помощью математики не всегда рекомендуется. Но если нужно знать, есть ли ночь или день, этот подход можно решить программно, без каких-либо веб-сервисов. Спасибо за идею.
JackPearse
Да, askgeo.com (полное раскрытие: я веду сайт). Вы можете купить библиотеку Java, которая делает это на вашем собственном сервере.
Джеймс Д.
4

Эрик Мюллер создал карты шейп-файлов для часовых поясов базы данных tz (Olson). Однако есть несколько незначительных оговорок:

  1. Используемые границы часто являются неофициальными.
  2. Она не обновляется так регулярно, как сама база данных tz, поэтому некоторые вновь сформированные или скорректированные зоны могут отсутствовать.

Однако, помимо этого, он кажется очень точным для большинства целей.

Тим Паренти
источник
4

Проект мертв: - /

Это выглядит многообещающе -

Ссылка на архив:

https://web.archive.org/web/20150503145203/http://www.earthtools.org/webservices.htm

chs
источник
1
Они предоставляют только необработанное смещение от GMT, а не идентификатор часового пояса, и они не принимают во внимание DST в большинстве стран мира, что, на мой взгляд, делает его довольно непригодным для использования.
Джеймс Д.
Они , кажется, ушли
Ligi
0

DRT Engine принимает широту, долготу и местное время и дату и возвращает смещение часового пояса. Это может быть использовано для установки часового пояса определенного места в будущем .

Жюль
источник