Пересчёт угловых размеров из десятичного представления в обычное (градусы-минуты-секунды) и обратно

В статьях посвящённых работе с GPS в Android (ссылки в конце статьи) было упомянуто о необходимости пересчёта получаемых значений географических координат и пояснены причины, вследствие которых это необходимо.

Рассмотрим алгоритмы пересчёта угловых размеров на примере Delphi и Java.

Пересчёт угловых размеров на Delphi

Допустим есть некоторое угловое значение 25,756897°. Приведём его к привычному представлению «градусы-минуты-секунды».

Для этого воспользуемся универсальным способом конвертации, который вытекает из самого определения данных единиц измерения.

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

Сам пересчёт легко реализуется посредством стандартных функций Delphi.

Обратное преобразование выполняется ещё проще:

Работу с угловыми величинами лучше всего оформить в виде класса. Ниже приведён пример его возможной реализации.

В данном примере при изменении исходного десятичного значения или одной из составляющих представления «градусы-минуты-секунды» производится автоматический пересчёт всех связанных величин.

Далее приведена программа, которая наглядно демонстрирует работу данного класса.

И её скриншот:

Скриншот пересчёта угловых значений

Пересчёт угловых размеров на Java

В случае Java конкретный алгоритм зависит от используемой платформы.

Android SDK

При использовании Android SDK совершать никаких особых действий не требуется.

Пересчёт уже реализован в виде метода convert класса Location.

Его первый параметр – значение широты или долготы, а второй параметр – формат представления данных. Значение FORMAT_SECONDS соответствует представлению «градусы-минуты-секунды».

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

Если данный способ по каким-либо причинам не подходит можно воспользоваться способом, приведённым для Delphi транслированным на Java (см. ниже).

Java SE

В Java также можно использовать и универсальный способ пересчёта. Если программа пишется не для Android или возможности класса Location не обеспечивают нужный функционал.

В качестве примера возможной реализации перепишем на Java тот класс для работы с угловыми величинами, который был ранее приведён для Delphi.

 

Данный класс реализует тот же самый функционал, но на языке программирования Java. Ниже приведён пример его использования.

Величины углов

Как известно из курса геометрии длина полной окружности составляет 360°. И, как известно из курса географии значение широты не может превышать 90°, а долготы 180°.

Аналогично градус состоит из 60 минут, а минута из 60 секунд

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

Например, в технике часто встречаются угловые значения больше 360°. В частности 720° цикл двигателя внутреннего сгорания.

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

Ссылки:

  1. Стрелец Coder. Работаем с GPS в Android на Delphi
  2. Стрелец Coder. Работаем с GPS в Android на Java

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *