3 votos

Cómo calcular el cojinete entre dos puntos GPS

El siguiente devuelve 150 grados usando C# convertido desde JavaScript Cojinete de fórmulas, pero Google earth vuelve a 210 grados para los mismos valores. El código roto es GetBearing() pero también he incluido Calcular() para mostrar codificado los valores de la prueba y ParseCoordinate() para demostrar que soy la conversión de Grados-Minutos-segundos a radianes en grados decimales para GetBearing(). Son el JavaScript Teniendo fórmulas mal?

double DEG_PER_RAD = (180.0/Math.PI);
// Return Bearing (degrees)
private double GetBearing(double lat1, double lon1, double lat2, double lon2)
{
    var dLon = lon2 - lon1;
    var y = Math.Sin(dLon) * Math.Cos(lat2);
    var x = Math.Cos(lat1)*Math.Sin(lat2)-Math.Sin(lat1)*Math.Cos(lat2)*Math.Cos(dLon);
    return DEG_PER_RAD*Math.Atan2(y, x);
}
private void Calculate()
{
    var lon1 = ParseCoordinate("38 51 30.5");
    var lat1 = ParseCoordinate("78 12 33.8");
    var lon2 = ParseCoordinate("38 45 46.2");
    var lat2 = ParseCoordinate("78 16 46.0");
    var bearing = GetBearing(lat1, lon1, lat2, lon2);
    // Show bearing
    ...
}
// Convert Degree-Minute-Second to Degree.ddd
private double ParseCoordinate(string coordinate)
{
    var dms = coordinate.Split(' ');
    var rVal = 0.0;
    var i = 0;
    foreach (var s in dms)
    {
        double d;
        double.TryParse(s, out d);
        rVal += (d/(Math.Pow(60.0, i++)));
    }
    rVal /= DEG_PER_RAD;
    return rVal;
}

3voto

Tim Howland Puntos 3650

Los dos números son realmente solo espejo (360-150 = 210), por lo que tampoco especificó la longitud con el mal signo (tal vez es 38 grados Oeste) o te estás perdiendo un signo de dLon o x cálculo.

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X