понедельник, 31 октября 2016 г.

Форматы географических координат и их преобразования

Задача: В ПО Мобильная торговля А+ координаты хранятся в виде ГГММ.ММММ, необходимо преобразовать к формату хранения Яндекс/Google, вида ГГ.ГГГГГГ

Решение:
Хорошее описание здесь, в wiki еще одного поставщика решений для мобильной торговли.

Общие понятия о форматах координат
Единого стандарта записи нет, но существует множество вариантов, которые используются на практике. Среди них: 

  • DMS (градусы, минуты, секунды) — наиболее понятная для восприятия запись, в которой раздельно указываются градусы, минуты и секунды (последние обычно указываются с точностью до определенного знака). В этой записи чаще всего полушарие обозначается латинской буквой (N/S и W/E).
  • DD (градусы в десятичном виде) — наиболее простая в числовом выражении запись, в которой целая часть представляет градусы, а дробная (обычно 6 знаков) — все остальное. Полушария обозначаются знаком плюса или минуса (реже буквами). Такая запись менее наглядна, но зато удобна для хранения в информационных системах. Большинство бытовых GPS-устройств и картографических сервисов использует именно это формат.
  • DM, UTM, Geo-Tags и другие менее распространенные и экзотические форматы — используются в различных специализированных системах.

Формат координат в продуктах ST и А+
Как и "А+ Мобильная Торговля 2.0", в программах «ST Чикаго» и «ST Мобильная Торговля» географические координаты в БД хранятся в редко используемом сейчас формате
ГГММ.ММММ.
Где: 
ГГ — градусы; 
ММ.ММММ — минуты и десятитысячные доли минут.
Это одна из GPS-нотаций, иногда обозначаемая как GPS (Dec Min).

ПО фактически получает и использует для своих нужд «нормальный» десятичный формат (DD), в котором снимают данные большинство современных GPS-приемников (в т.ч. в смартфонах и планшетах). Однако в БД координаты записываются уже в формате ГГММ.ММММ .
В интерфейсах, как правило, используется наиболее наглядный формат DMS.

Историческая справка
Формат ГГММ.ММММ был унаследован продуктами А+ и ST от навигатора Garmin в начале 2000-х, когда КПК не имели собственных GPS-приемников.
Этот формат есть упрощенная запись формата ГГ°ММ.СС, рекомендуемый для использования в морском радиообмене. В настоящее время используется реже, чем «нормальный» десятичный формат.

Перевод между форматами
ГГММ.ММММ → ГГ.ГГГГГГ
Для перевода необходимо использовать формулу ГГ + (ММ.ММММ ÷ 60):

ГГ.ГГГГГГ → ГГММ.ММММ
Для перевода необходимо использовать формулу (ГГ × 100) + (0.ГГГГГГ × 60):

Пример для Excel:
В Microsoft® Excel можно использовать формулу: = ЦЕЛОЕ(A1)*100 + ОКРУГЛ((A1-ЦЕЛОЕ(A1))*60;4), где в ячейке A1 находится значение в формате ГГ.ГГГГГГ

Пример для 1С:

// ================================================================================================
// из формата А+ в формат яндекса/гугла (ГГММ.ММММ в ГГ.ГГГГГ)
Функция КонвертироватьКординатуИзАгентПлюс( _коорд )
 
 Градусы = Цел(_коорд / 100);
 Минуты = _коорд - Градусы * 100;
 
 Возврат Окр((Градусы+Минуты/60), 5);
 
КонецФункции


// ================================================================================================
// из формата яндекса/гугла в формат А+ (ГГ.ГГГГГ в ГГММ.ММММ)
Функция КонвертироватьКординатуВАгентПлюс( _коорд )
 
 возврат Цел(_коорд)*100 + Окр((_коорд - Цел(_коорд))*60, 4)
 
КонецФункции


Комментариев нет: