алгоритм для получения часового пояса от гео-координат

Финал должен всегда использоваться для констант. Это даже полезно для недолгих переменных (в отдельном методе), когда правила для определения переменной являются сложными.

, Например:

final int foo;
if (a)
    foo = 1;
else if (b)
    foo = 2;
else if (c)
    foo = 3;
if (d)        // Compile error:  forgot the 'else'
    foo = 4;
else
    foo = -1;
11
задан Maciek Sawicki 6 December 2009 в 13:29
поделиться

4 ответа

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

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

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

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

13
ответ дан 3 December 2019 в 04:32
поделиться

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

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

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

5
ответ дан 3 December 2019 в 04:32
поделиться

Joel Neely's answer is good, but be aware this is a really tricky problem for political reasons. So for disputed areas like Kashmir or Tibet you could offend people by the decision you make.

Also, if you want to then use timezone information to compute time changes it gets even trickier, as decisions about whether Daylight saving time is used, and the date it changes can change with only 2 weeks notice. See: http://www.timeanddate.com/news/time/argentina-dst-2009-2010.html

The polygon information can be bought at http://www.worldtimeserver.com/time_zone_guide/ if you are interested. Disclaimer - I haven't bought this information, so don't know how good it is.

3
ответ дан 3 December 2019 в 04:32
поделиться

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

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

3
ответ дан 3 December 2019 в 04:32
поделиться
Другие вопросы по тегам:

Похожие вопросы: