2017-07-17 1 views
0

Ich habe dieses kleine Code-Schnipsel hier. Was ich suche ist, die aktuelle GPS-Laufrichtung (Peilung) des Benutzers zu erhalten und dann die entgegengesetzte Laufrichtung zu erhalten.Berechnen Sie das Gegenteil der aktuellen Android GPS Laufrichtung

Ich scheine hier einige wichtige Informationen zu verpassen, da der Code meistens funktioniert, wenn ich nordöstlich und westwärts laufe, aber versagt, wenn ich nach Süden gehe.

Irgendeine Idee, wie man mein Schnipsel repariert?

private static Location lastValidLocation; 

private float getOppositeGPSMovementDirection(Location lastLocation){ 

    float bearing; 
    if (!lastLocation.hasBearing){ 
     //Use bearing of the last Location with a valid bearing. 
     bearing = lastValidLocation.getBearing(); 
    }else{ 
     lastValidLocation = lastLocation; 
     bearing = lastLocation.getBearing(); 
    } 

    //Calculate backwards direction 
    int direction = (int) (bearing - 180); 
    direction = direction<0?direction*-1:direction; 

    return direction; 
} 

Antwort

1

Ihre Mathematik ist fehlerhaft. Wenn Sie bei 10 Grad sind, Ihr Gegenteil ist der 190. Ihre Mathe würde es 170. Die richtige Mathematik ist:

direction = (bearing + 180) % 360; 

Grundsätzlich Ihre Annahme, dass Sie mit -1 mehrere ein negativer Winkel kann die richtige zu bekommen Winkel ist falsch.

+0

Sie sind völlig richtig! – Markus