无法将纬度/长度转换为DMS并返回

时间:2015-04-23 02:25:17

标签: c gcc

我写了两个函数来从其组件Degrees,Minutes和Seconds来回转换纬度和经度。就decToDMS()的方法而言,数学似乎没关系,只是我的正/负迹象在我的分钟和秒上都没有。

对于DMStoDec,我在计算中几乎没有关闭,我不太清楚错误在哪里。以下是两个代码示例:

int DMStoDec(double *deg, int degrees, int minutes, double seconds) {
    //test for invalid inputs
    if (deg == NULL) {
        return 1;
    }
    if (*deg < -180 || *deg > 180) {
        return 1;
    }
    // Formula is degrees = degrees + minutes/60 + seconds/3600;
    double m;
    double s;
    double d;   
    d = (double) degrees;
    m = (double) minutes / 60;
    s = (double) seconds / 3600;

    *deg = d + m + s;
    printf("DMS to Dec is %lf\n", *deg);

    return 0;
}

int decToDMSint *degrees, int *minutes, double *seconds, double deg) {
    if (degrees == NULL || minutes == NULL || seconds == NULL) {
        return 1;
    }
    if (deg < -180 || deg > 180) {
        return 1;
    }
    *degrees = deg;
    deg = deg - trunc(deg);
    // multiply the decimal by 60;
    deg *= 60;
    *minutes = deg;
    // Drop the integer
    deg = deg - trunc(deg);
    deg *= 60;
    *seconds = deg;

    return 0;
}

1 个答案:

答案 0 :(得分:1)

怎么样:

*degrees = deg;
deg = deg - trunc(deg);

// minutes and seconds are >= 0
if (deg < 0)
    deg *= -1;

// multiply the decimal by 60
deg *= 60;
*minutes = deg;
// Drop the integer
deg = deg - trunc(deg);
deg *= 60;
*seconds = deg;