Every day is wonderful

分享与创新 并大胆的去尝试新鲜事物。。。。

度分秒与度的相互转换C#

度分秒与度相互转换的原理

角度之间一律采用六十进制。度是大单位,秒是小单位,从大化小就乘以60,从小到大就除以60。
1°=60′=3600″
1′=(1/60)°
1″=(1/60)’=(1/3600)°
105°47′24″=105°+47*(1/60)°+24*(1/3600)°=105.79°
105.79°=105°+0.79*60′=105°+47.4′=105°+47′+0.4*60″=105°47′24″

/// <summary>
/// 度分秒转度
/// </summary>
/// <param name="DMS">°′″</param>
/// <returns></returns>
static public double DMSToDDD(string DMS)
{
    const double num = 60;
    double D = 0;
    double M = 0;
    double S = 0;
    GetDMS(DMS, out D, out M, out S);
    double DDD = 0;
    DDD += Convert.ToDouble(D);
    DDD += (M / num);
    DDD += (S / (num * num));
    return DDD;
}
/// <summary>
/// 度转度分秒
/// </summary>
/// <param name="DDD"></param>
/// <returns></returns>
static public string DDDToDMS(double DDD)
{
    const double num = 60;
    int D = (int)DDD;
    double tmp = (DDD - D) * num;
    int M = (int)tmp;
    double S = (tmp - M) * num;
    string DMS = "" + D + "°" + M + "′" + S + "″";
    return DMS;
}
/// <summary>
/// 度分秒分离取值
/// </summary>
/// <param name="DMS">度分秒</param>
/// <param name="D">度</param>
/// <param name="M">分</param>
/// <param name="S">秒</param>
static public void GetDMS(string DMS, out double D, out double M, out double S)
{
    D = 0;
    M = 0;
    S = 0;
    int d = DMS.IndexOf('°');         
    if (d < 0)
    {
        D = 0;
    }
    else
    {
        string degree = DMS.Substring(0, d);
        D = Convert.ToDouble(degree);
    }
    int m = DMS.IndexOf('′');        
    if (m < 0)
    {
        M = 0;
    }
    else
    {
        string minute = DMS.Substring(d + 1, m - d - 1);
        M = Convert.ToDouble(minute);
    }
    int s = DMS.IndexOf('″');          
    if (s < 0)
    {
        S = 0;
    }
    else
    {
        if (m == -1)
        {
            if (d == -1)
            {
                string second = DMS.Substring(m + 1, s - m - 1);
                S = Convert.ToDouble(second);
            }
            else
            {
                string second = DMS.Substring(d + 1, s - d - 1);
                S = Convert.ToDouble(second);
            }
        }
        else
        {
            string second = DMS.Substring(m + 1, s - m - 1);
            S = Convert.ToDouble(second);
        }
    }
}
点赞

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注