Вычислить время по широте / долготе? - PullRequest
1 голос
/ 08 января 2011

Вот сделка.У меня есть широта / долгота набора местоположения.Мне нужно выяснить, какое сейчас время в этом месте.Вот как я получал это раньше:

NSDateFormatter *theFormatter = [[NSDateFormatter alloc] init];
[theFormatter setDateFormat:@"h:mm a"];
NSDate *todaysdate = [NSDate date];
NSString *todaysDate = [theFormatter stringFromDate:todaysdate];
[theFormatter release];

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

Заранее спасибо.

Ответы [ 5 ]

2 голосов
/ 08 января 2011

К сожалению, часовые пояса (и время в целом) никогда не были такими простыми, как хотелось бы.

Для простого приближения вы можете следовать предложению Джер. Долгота колеблется от -180 до 180 градусов, 24 часа в сутки, поэтому вы получаете 15 градусов долготы на часовой пояс. Центрируйте эти часовые пояса по долготе 0 градусов, чтобы значение UTC составляло от -7,5 до 7,5, UTC + 1 - от 7,5 до 22,5, UTC-1 - от -7,5 до -22,5 и т. Д. Тогда у вас будет очень упрощенная и неправильная модель использования часовых поясов.

Посмотрите на эту карту часовых поясов .

  • Часовые пояса не очень хорошо упорядочены; области в UTC-1 соседствуют с областями в UTC-3.
  • UTC-9.5, UTC-4.5, UTC + 3.5, UTC + 5.75 и UTC + 13 являются действительными часовыми поясами и активно используются.

Как только вы разобрались, вы можете начать думать о летнем времени.

1 голос
/ 18 июня 2012

Это не тривиальная проблема - но она не без решения. Такие сервисы, как Geonames и WeatherBug, очень ограничены и / или дороги, поэтому не начинайте разрабатывать что-либо до того, как вы полностью поймете их условия обслуживания.

Вот шаги, которые я выполнил для своего приложения для iPhone на базе Appcelerator:

  1. Найдите список координат, которые описывают все часовые пояса как многоугольники, и считайте их в таблицу SQLite.
  2. Сделайте наилучшее предположение о том, в каком часовом поясе пользователь находится (или ищет), исходя из долготы. Это будет несколько зон.
  3. Извлеките полигоны каждого часового пояса с наиболее точным предположением из базы данных и запустите каждый из них с помощью алгоритма поиска точки в полигоне. Тот, который возвращает истину, является правильным часовым поясом.

Если вы не беспокоитесь о переходе на летнее время, все готово, в противном случае у вас возникнет путаница. Ландшафт DST совершенно нелогичен и часто меняется. Лучшее, что я мог сделать, - это воспользоваться Google «Правилами перехода на летнее время» (начните искать здесь: Источники данных о часовом поясе и летнем времени ) и быть готовым к тому, чтобы составить список работ, который вы можете настроить. использовать для расчета. Мой все еще не работает идеально после многих настроек.

1 голос
/ 08 января 2011

Нет, вам придется написать один. Так как точки широты и долготы хорошо известны, а часовые пояса также хорошо известны (хотя периодически меняются), все, что вам нужно сделать, это отобразить, где поля lat / long находятся в заданных часовых поясах, и рассчитать, в какой из них находится текущая позиция из этих коробок. Как только вы узнаете, в каком ящике вы находитесь, у вас будет достаточно информации, чтобы выяснить, какое у вас время.

0 голосов
/ 30 октября 2013

Для этого я написал небольшой класс Java с данными, встроенными в код.Это может быть легко переведено на ObjectiveC.База данных встроена в сам код.Точность до 22 км.

https://sites.google.com/a/edval.biz/www/mapping-lat-lng-s-to-timezones

0 голосов
/ 08 января 2011

Используйте этот дамп данных и импортируйте его в свою программу.Затем найдите страну, в которой существует ваш lat / long, и его часовой пояс.Затем вы можете рассчитать, сколько времени в определенном лат / долг.

Geonames

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