Как в MATLAB перевести координаты из формата «градусы-минуты» в градусы.

В прошлый раз мы с вами переводили долготы из формата [0 360] в формат [-180 180]. Сегодня мы разберёмся ещё с одной проблемой, которая периодически встречается в работе океанолога да и вообще любого географа. 

Широты и долготы принято измерять в градусах, в одном градусе 60 минут, а в одной минуте 60 секунд, секунды обычно записывают уже десятичной дробью, что намного удобнее. А ещё удобнее взять и сразу записать всё просто в градусах, а десятичной дробью записывать всё что меньше градуса и никаких минут и секунд.

Т.е. вместо 20°30' записывать 20.5°, или вместо 40°59'59'' записывать 40.9997°. Если вы не штурман, а датасайнтист, то в большинстве случаев так намного удобнее. Однако данные иногда приходят нам с координатами, записанными в разных форматах. Конечно, с пересчётом из одного формата в другой справится даже школьник, однако в MATLAB эти лишние телодвижения никчему, так как есть родная функция, которая сделает всё за вас. Вернее говоря, это несколько функций. Первая, dm2degrees переводит координаты из формата "градусы-минуты" в градлусы. Для её работы необходимо иметь матрицу, состоящую из двух столбцов, в первом столбце указаны градусы (только целые числа), во втором минуты (можно с десятыми долями), например:

lat = [50 34; 51 45.3; 53 21.89]

lat =

   50.0000   34.0000
   51.0000   45.3000
   53.0000   21.8900

В итоге, скормив эту матрицу функции dm2degrees, вы получите:

dm2degrees(lat)

ans =

   50.5667
   51.7550
   53.3648

Конечно, если у вас данные записаны не в одной переменной, а в двух разных, то проблем тоже не возникнет:

lat_d = [50; 51; 53]

lat_d =

    50
    51
    53

lat_m = [34; 45.3; 21.89]

lat_m =

   34.0000
   45.3000
   21.8900

dm2degrees([lat_d lat_m])

ans =

   50.5667
   51.7550
   53.3648

Если ваши данные представлены в формате "градусы - минуты - секунды", то вам нужна будет другая функция dms2degrees. Работает она практически также, только на вход ей нужна теперь матрица состоящая из трёх столбцов (градусы, минуты, секунды). Грубо говоря, вам нужно будет записать dm2degrees([lat_d, lat_m, lat_s]).

Есть и обратные функции degrees2dm и degrees2dms, которые конвертируют всё обратную сторону.

 telegram

Чтобы не пропустить новые материалы с рецептами по работе с океанологическими данными, подпишитесь на канал в Telegram: https://t.me/koldunovaleksey