конвертировать из DMS в Lat Long в C - PullRequest
1 голос
/ 24 сентября 2019

У меня есть входной файл (скажем, 10 строк) пар координат, каждая строка выглядит примерно так:

(1653408W, 503223N) (1651614W, 502806N)

Это латДлинные значения приведены в формате DMS.Я хочу преобразовать их в более удобный для человека формат, например: 1931259W -> 193d 12m 59s W

Я нашел способ использовать fscanf для прохождения каждой строки в файле, но я не уверен, как преобразоватьформы.

1 Ответ

2 голосов
/ 24 сентября 2019

Похоже, что ваши координаты даны в формате DDDMMSS, где DDD - это трехзначное число градусов (до), MM - это двузначное число минут, а SSчисло секунд, состоящее из двух цифр, без разделителей между ними.

Технически, «правильный» способ для анализа подобного формата состоит в том, чтобы разбить строку на части и затем преобразовать каждую часть в целое числоотдельно.Но так как вам уже удалось прочитать все значения координат в одно целое число, как если бы это было одно десятичное число, мы можем просто поработать с этим и извлечь градусы, минуты и секунды, используя простую математику:

int dddmmss = 1631259;  /* hardcoded input value for testing */

int degrees = dddmmss / 10000;        /* drop the lowest 4 digits */
int minutes = (dddmmss / 100) % 100;  /* drop the lowest 2 digits, then keep the next 2 */
int seconds = dddmmss % 100;          /* just keep the lowest 2 digits */

printf("%03d° %02d' %02d''", degrees, minutes, seconds);

Попробуйте онлайн!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...