在 C 中从 DMS 转换为 Lat Long

标签 c

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

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

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

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

最佳答案

所以您的坐标似乎以 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);

Try it online!

关于在 C 中从 DMS 转换为 Lat Long,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58070274/

相关文章:

c - 有没有办法用逻辑移位或加/减来表示按位异或?

c - 如何将数组放入 int 但使用 scanf

c - 为了提高缓存命中率,我该如何修改程序

用VC++编译C程序[2005]

c - 如何使用 libxml2 在 C 编程语言中使用模式文件验证 xml 文件

c - 如何在arduino中保存字符串列表?

c - 二维数组中的 Free()

c - 在 Windows 或 Linux 上为 Raspberry Pi 构建 C 可执行文件

c - C 编程中指针如何与函数一起使用?

c++ - 尝试使用 time.h 库计算两个日期之间的差异