アプリに、マップとして使用する画像があるアクティビティがあります。画像がGoogleマップに「グリッド整列」されている場合、オンラインのGoogleマップから取得したマップの左上隅と右下隅を使用すると、ユーザーのGPSを画面上のxとyに変えることができます。ただし、マップが「グリッドに整列」しておらず、数学が返す値よりも角度がある場合、ユーザーの位置が画面から外れます。明らかに、マップの角度を処理する方法の一部が欠けているので、誰かがそれを行う方法に光を当てることができれば、それは非常に役立ちます.
ラジアンで角度を計算し、何らかの変換を行う必要があることはわかっていますが、どこから始めればよいかわかりません。これは、これまでキャンバスにプロットする x と y を取得するために使用したものです。
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};
}