0

特定の場所を指す矢印の付いたImageViewを備えたMapViewがあります。私は、ImageViewを回転させ、getOrientation()を使用してコンパスの方位(方向)を計算し、geoField.getDeclination()を使用して方位を計算し、myLocation.bearingTo(finalDestiny)を使用して方位を計算することでポインティングを行っています。

アルゴリズムは完全に機能します。矢印が目的の場所を正確に指しているようになります。唯一の問題は、getOrientation()を有効にするには、enableCompass()が必要であるということです。そうでない場合、NaNが返されます。同時に、enableCompass()はMapViewにデフォルトのグーグルコンパスを描画しますが、これは表示したくありません。

どうすればいいですか?センサーを使用してこの方位を「手動で」計算できるので、enableCompass()を使用する必要はありませんか?

4

2 に答える 2

2

MyLocationOverlayを拡張するクラスを実装し、コードなしでdrawCompass()をオーバーライドする必要があります。私はそれを試して、完全に機能します。アクティビティでは、enableCompass()はコンパスを描画しません。

public class CustomMyLocation extends MyLocationOverlay {
//...


    @Override
    protected void drawCompass(Canvas canvas, float bearing) {
    }
}
于 2012-09-27T03:04:14.460 に答える
1

方位は手動で計算できます。2つの場所の間の方位は次のように計算できます。

float bearing = mLoc.bearingTo(mLocTarget);
if(bearing<0){
bearing+=360;
}

通常のコンパス方位は、センサーを使用して計算できます。

float newDirection=0;
if(mSensors!=null)
newDirection=-mSensors[0];
if((newDirection-mCurDirection)> 180)
newDirection-=360;
else if((mCurDirection-newDirection)> 180)
newDirection+=360;
于 2012-09-11T06:47:56.310 に答える