首页 > 解决方案 > 在 C 中从 DMS 转换为 Lat Long

问题描述

我有一个坐标对的输入文件(比如说 10 行),每行看起来像这样:

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

这些是以 DMS 格式给出的经纬度值。我想将它们转换为更人性化的格式,例如:1931259W --> 193d 12m 59s W

我找到了一种使用 fscanf 遍历文件中每一行的方法,但我不确定如何转换表单。

标签: c

解决方案


因此,您的坐标似乎以格式给出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);

在线尝试!


推荐阅读