Android - GPS-Koordinaten auf einer benutzerdefinierten Karte zeichnen

Ich habe eine Aktivität in meiner App, bei der Bilder als Karten verwendet werden. Wenn das Bild auf Google Maps "rasterausgerichtet" ist, kann ich die Benutzer-GPS auf dem Bildschirm in ein x und ein y verwandeln, wenn ich die oberen linken und unteren rechten Ecken der Karte verwende, die ich von Google Maps online erhalte. Wenn die Karte jedoch nicht "gitterausgerichtet" ist und einen Winkel aufweist, der über den von mir berechneten Werten liegt, wird die Position des Benutzers vom Bildschirm entfernt. Offensichtlich fehlt mir der Teil, wie man mit dem Winkel der Karte umgeht. Wenn also jemand etwas Licht in diese Richtung bringen könnte, wäre dies sehr hilfreich.

Ich weiß, ich müsste den Winkel im Bogenmaß berechnen und etwas umrechnen, aber ich habe keine Ahnung, wo ich anfangen soll. Dies ist, was ich benutze, um ein x und ein y auf eine Leinwand zu zeichnen.

public double[] getPositionGPS(Location upperLeft, Location lowerRight, Location current){

    try{

        double hypotenuse = upperLeft.distanceTo(current);
        double bearing = upperLeft.bearingTo(current);
        double currentDistanceY = Math.cos(bearing * Math.PI / OneEightyDeg) * hypotenuse;
        //                           "percentage to mark the position"
        double totalHypotenuse = upperLeft.distanceTo(lowerRight);
        double totalDistanceY = totalHypotenuse * Math.cos(upperLeft.bearingTo(lowerRight) * Math.PI / OneEightyDeg);
        double currentPixelY = currentDistanceY / totalDistanceY * ImageSizeH;

        double hypotenuse2 = upperLeft.distanceTo(current);
        double bearing2 = upperLeft.bearingTo(current);
        double currentDistanceX = Math.sin(bearing2 * Math.PI / OneEightyDeg) * hypotenuse2;
        //                           "percentage to mark the position"
        double totalHypotenuse2 = upperLeft.distanceTo(lowerRight);
        double totalDistanceX = totalHypotenuse2 * Math.sin(upperLeft.bearingTo(lowerRight) * Math.PI / OneEightyDeg);
        double currentPixelX = currentDistanceX / totalDistanceX * ImageSizeW;

        return new double[]{currentPixelX, currentPixelY};

    }catch(Exception e){

        e.printStackTrace();
        return new double[]{0,0};

    }

Antworten auf die Frage(5)

Ihre Antwort auf die Frage