经纬度格式转换

公式:

    public float DuFenMiaoToDu(float d, float f, float m)
    {
    	//度分秒 -> 度
        f = f + m / 60;
        d = d + f / 60;
        return d;
    }
    
    public float DuToDuFen_fen(float d)
    {
    	//度 -> 度分
        float f = (d - Mathf.Floor(d)) * 60;
        return f;
    }
    
    public float FenToFenMiao_miao(float f)
    {
    	//分 -> 分秒
        float m = (f - Mathf.Floor(f)) * 60;
        return m;
    }

实际使用情况

float 有效数字位数 6
double 有效数字位数 16
经纬度数字位数 8~9

因此数据录入需要用Double,但平时用float 会较方便(Mathf)。
因此决定一般用度分秒的分来运算,如下:

	public float DuToFen(double d, double line)	//line指经纬线
    {
        float f = (float)(60 * (d - line));
        return f;
    }

eg1. d = 116.307629, line = 116
f = 60 * 0.307629 = 18.4577

eg2. d = 113.947906, line = 114
f = 60 * -0.052094 = -3.1256

更新:

public string GetStringLongitude(double value)
{
    float du = Mathf.Floor((float)value);
    double f = 60 * (value - du);
    float fen = Mathf.Floor((float)f);
    double m = 60 * (f - fen);
    float miao = Mathf.Floor((float)m);

    string str = du + "°" + fen + "' " + miao + "\" E";
    return str;
}
public string GetStringLatitude(double value)
{
    float du = Mathf.Floor((float)value);
    double f = 60 * (value - du);
    float fen = Mathf.Floor((float)f);
    double m = 60 * (f - fen);
    float miao = Mathf.Floor((float)m);

    string str = du + "°" + fen + "' " + miao + "\" N";
    return str;
}

参考资料

经纬度格式转换工具

你可能感兴趣的:(C#学习,U3D)