将度/分/秒转换为十进制坐标

Jus*_*tin 18 c#

在我的代码的一部分,我从十进制坐标转换为度/分/秒,我使用这个:

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;
Run Code Online (Sandbox Code Playgroud)

我如何从度/分/秒转换回小数点坐标?

Byr*_*ahl 37

试试这个:

public double ConvertDegreeAngleToDouble( double degrees, double minutes, double seconds )
{
    //Decimal degrees = 
    //   whole number of degrees, 
    //   plus minutes divided by 60, 
    //   plus seconds divided by 3600

    return degrees + (minutes/60) + (seconds/3600);
}
Run Code Online (Sandbox Code Playgroud)

  • 这并没有考虑到半球. (7认同)
  • 当我试图将MinDec转换为WGS84 Datum decimal时,有一件事让我感到困惑.现在很明显,只有度数和分钟数.我的公式最终类似于:返回度+(分钟/ 60)+(秒/ 6000); (2认同)

Mat*_*att 8

为了节省其他时间,我想补充一下拜伦的答案.如果你有字符串形式的点(例如"17.21.18S"),你可以使用这个方法:

public double ConvertDegreeAngleToDouble(string point)
{
    //Example: 17.21.18S

    var multiplier = (point.Contains("S") || point.Contains("W")) ? -1 : 1; //handle south and west

    point = Regex.Replace(point, "[^0-9.]", ""); //remove the characters

    var pointArray = point.Split('.'); //split the string.

    //Decimal degrees = 
    //   whole number of degrees, 
    //   plus minutes divided by 60, 
    //   plus seconds divided by 3600

    var degrees = Double.Parse(pointArray[0]);
    var minutes = Double.Parse(pointArray[1]) / 60;
    var seconds = Double.Parse(pointArray[2]) / 3600;

    return (degrees + minutes + seconds) * multiplier;
}
Run Code Online (Sandbox Code Playgroud)