将小数点坐标转换为度,分和&秒数由c#

时间:2010-07-06 15:25:56

标签: c# coordinates

有没有人知道简单的短代码来转换它而不使用额外的库?

4 个答案:

答案 0 :(得分:5)

像这样:

double coord = 59.345235;
int sec = (int)Math.Round(coord * 3600);
int deg = sec / 3600;
sec = Math.Abs(sec % 3600);
int min = sec / 60;
sec %= 60;

编辑:添加了一个Abs调用,以便它也适用于负角度。

答案 1 :(得分:3)

你可以使用时间跨度:(棘手但有效)

   double coord = 123.312312;   
   var ts = TimeSpan.FromHours(Math.Abs(coord))
   int degrees = Math.Sign(coord) * Math.Floor(ts.TotalHours);
   int minutes = ts.Minutes;
   int seconds = ts.Seconds;

答案 2 :(得分:2)

我从你的问题推断你想要从笛卡儿坐标转换到极坐标。

如果是这种情况,您需要的基本公式是:

  

r =√(x2 + y2)

     

θ= atan(y / x)

其中r是距离,θ是x = 0(关于原点)的角度

这有帮助吗?

答案 3 :(得分:2)

我想出了以下内容。它正确处理负坐标(南纬或西经)并返回未被分为几分钟或几秒的余数(以度为单位)。

public static double ConvertDecimalToDegMinSec(double value, out int deg, out int min, out int sec)
{
    deg = (int)value;
    value = Math.Abs(value - deg);
    min = (int)(value * 60);
    value = value - (double)min / 60;
    sec = (int)(value * 3600);
    value = value - (double)sec / 3600;
    return value;
}