2009-12-06 6 views
11

Я хочу написать приложение, в котором пользователь может указать любое место на карте (а не только города) и получить часовой пояс в этом месте.алгоритм получения часового пояса от геокотельных координат

Какая структура данных (приложение не будет подключаться к Интернету) и алгоритм следует использовать? Где я могу получить необходимые данные (я больше не буду более точным, чем отображение карты на 24 прямоугольника)?

Я напишу свое приложение в Java ME.

+0

См. Также [общая вики на эту тему] (http://stackoverflow.com/q/16086962/634824) –

ответ

5

Есть целый ряд веб-сервисов, которые могут сделать это для вас (например GeoNames имеет great API). Но если у вас нет подключения к Интернету, то это не то, что вы найдете непосредственно в стандартных библиотеках Java ME.

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

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

+2

Но будьте осторожны, например, места на северной Франции ближе к Лондону, чем к Париж и места в Шотландии ближе к Ставангере, чем к Эдинбургу, поэтому ближайший подход к городу не гарантирует правильного ответа. –

+0

Справа. Ключ должен был иметь только представительский город для каждой страны/часовой зоны. Например, вам не нужно шесть городов для представления Франции, всего один (например, Париж) для часового пояса, в котором он находится (Центральноевропейское время). Это увеличивает размер каждого региона Вороного и повышает вероятность правильного ответа. –

+0

Но многоугольник, содержащий Париж и остальную часть Франции, не будет в районе Вороного в Париже. Конечно, используйте многоугольное представление для каждого часового пояса (или каждой страны), но они не будут областями Вороного. –

13

Учитывая, что часовые пояса основаны на политических сущностях, а не просто на физическом вычислении лат/лон, я бы создал структуру данных, которая отображала полигоны по координатам lat/lon в политические объекты (страну и провинцию/штат), а затем отдельную структуру, которая отображает политические объекты и текущую дату на временное сокращение.

Таким образом, вы не только избежать избыточности, но также:

  1. Вы можете отобразить справочную информацию DST независимо от конкретного набора координат и
  2. Когда какая-либо страна меняет правила, когда переход на летнее время начинается и заканчивается, у вас есть одно место для обновления.

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

+0

Большое спасибо. Я думаю, что это правильное направление. Я думаю, что самый сложный элемент будет извлекать временные данные из GiS в какой-то системе и преобразовывать их в удобный формат. –

+0

Просто убедитесь, что вы разрешаете несколько часовых поясов для данного местоположения. Некоторые места в мире имеют очень нечеткие границы. – Trejkaz

3

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

И если это не сработает для вас, я бы пошел с ответом Джоэля Нили.

+3

Я рассмеялся, но это, наверное, самый безопасный ответ, так как он одинаково расстраивает всех. : D – Trejkaz

+0

, например. abs (долгота/15), поэтому для Лос-Анджелеса, который составляет -118.44, вы получите -7.88, а мы GMT-8. – Rob

3

Ответ Джоэля Нили хорош, но имейте в виду, что это очень сложная проблема по политическим причинам. Поэтому в таких спорных областях, как Кашмир или Тибет, вы можете оскорбить людей по вашему решению.

Кроме того, если вы хотите использовать информацию о часовом поясе для вычисления временных изменений, это становится еще более сложным, так как принимаются решения о том, используется ли летнее время, а дата изменения может меняться только с уведомлением в течение 2 недель. См.: http://www.timeanddate.com/news/time/argentina-dst-2009-2010.html

Информацию о многоугольнике можно приобрести по номеру http://www.worldtimeserver.com/time_zone_guide/, если вы заинтересованы.Отказ от ответственности - я не купил эту информацию, поэтому не знаю, насколько она хороша.

Смежные вопросы