我有一个坐标对的输入文件(比如说 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);
关于在 C 中从 DMS 转换为 Lat Long,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58070274/