приблизительная оценка временного смещения от GMT относительно широты и долготы - PullRequest
12 голосов
/ 29 июня 2009

Есть ли способ оценить смещение от GMT (или часового пояса) от широты / долготы? Я видел geonames, но это должно было бы работать долго, и мы не хотим полагаться на веб-сервис. Он будет использоваться для определения того, отображать ли «сегодня» или «сегодня вечером» при предоставлении информации различным пользователям, чтобы не было необходимости быть слишком точным (час или два не были бы плохими). ​​

Ответы [ 3 ]

25 голосов
/ 29 июня 2009
offset = direction * longitude * 24 / 360

где направление равно 1 для востока, -1 для запада и долгота в (-180,180)

0 голосов
/ 21 июня 2018

Если вы знаете долготу пользователей, вы полностью знаете каждый аспект времени для них (пренебрегая некоторыми небольшими ошибками, такими как специальная теория относительности и т. Д.). Среднее солнечное время - это просто разница по Гринвичу и долготе (преобразовать градусы в минуты, 1 градус = 60 минут). Вы добавляете или вычитаете на основе Востока или Запада. Среднее солнечное время в основном более точное, чем часовые пояса. Дневное и ночное время являются переменными и зависят от широты, поэтому вы используете некоторые приближения времени восхода и захода солнца по широте, дате и году. Одно это дало бы довольно точное представление о дневном и ночном времени.

0 голосов
/ 08 мая 2012

Базирование часового пояса на одной долготе является чрезвычайно неточным за пределами международных вод. Смотрите карту на этой странице:

http://askgeo.com/database/TimeZone

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

Я действительно столкнулся с этой проблемой, работая над другим проектом, и провел серьезные исследования и разработки по нему. Сначала мое исследование:

  • Во-первых, часовые пояса обычно не кодируются просто смещением от GMT (или UTC). При этом не учитывается переход на летнее время и изменения часовых поясов с годами. Вместо этого идентификаторы часовых поясов используются для обозначения географической области, в которой официальное время часов было одинаковым во всей области в течение данного периода времени (например, с 1970 года). Наиболее важной системой таких идентификаторов является «идентификатор часового пояса Олсона» (вместе эти идентификаторы и их правила смещения известны как «база данных tz»), который используется в Linux и других операционных системах Unix. Большинство языков программирования и операционных систем имеют встроенную или стороннюю поддержку идентификаторов часовых поясов Olson.

С точки зрения существующих решений для перевода широты и долготы в часовой пояс:

  • GeoNames.org имеет обширную базу данных точечных местоположений (центры городов, аэропортов, общественных зданий и т. Д.), Каждое из которых снабжено набором полезных метаданных, включая идентификатор часового пояса Олсона. И у них есть хороший API, позволяющий вам получить доступ к ним через Интернет. Проблема в том, что если точка, которую вы запрашиваете, не находится прямо над записью в их базе данных, вы можете получить результат, который находится по другую сторону границы часового пояса, или вы можете вообще не получить ответ, если ваш запрос далеко от их ближайшей точки. Веб-служба также мучительно медленная и ограничивает количество запросов, которые вы можете сделать за день, до сравнительно небольшого числа.

  • Earth Tools (http://www.earthtools.org/webservices.htm) также имеет сервис для этого, и он намного быстрее, чем GeoNames, но возвращает только смещение от GMT, а не идентификатор часового пояса, и не обрабатывает переход на летнее время Время правильно для большей части мира. Кроме того, оно, похоже, не поддерживается, поэтому я не уверен, что данные больше точны (часовые пояса меняются со временем).

После просмотра этих вариантов и поиска других возможностей безуспешно я решил создать собственное решение и выпустил его по адресу:

http://askgeo.com

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

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

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

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

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

...