有没有人知道简单的短代码来转换它而不使用额外的库?
答案 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;
}