2015-10-05 10 views
5

マーカーが常に上の中央になるように回転させた後、マーカーのInfoWindowsアンカーポイントをリセットする方法はありますか?問題は、アンカーポイントがマーカーとともに回転していることです。Android Googleマップインフォメーションマーカーの回転後のアンカーポイント

static final LatLng PERTH = new LatLng(-31.90, 115.86); 
Marker marker = mMap.addMarker(new MarkerOptions() 
        .position(PERTH) 
        .anchor(0.5,0.5) 
        .rotation(90.0) 
        .infoWindowAnchor(0.5,0)); 

//Update marker with new data (position and direction angle) 
var angle = 130.0; 
marker.setPosition(new LatLng(-30.20, 113.27)); 
marker.setRotation(angle); 
marker.setInfoWindowAnchor(x,y); // how to calculate these values? 

enter image description here

答えて

10
var angle = 130.0; 
var x = Math.sin(-angle * Math.PI/180) * 0.5 + 0.5; 
var y = -(Math.cos(-angle * Math.PI/180) * 0.5 - 0.5); 
marker.setInfoWindowAnchor((float)x, (float)y); 

説明:

我々は、マップマーカーが(回転目的のために最も合理的な)円形状であると仮定した場合、我々は、情報ウィンドウのアンカーポイント(B)ができることを知っています0.0,0.0(左上)から1,1(右下)までの任意の相対座標点に設定すると、SINとCOSの公式を使用して与えられた回転度で円線上の任意の点を見つけることができます。

enter image description here

A及びB =半径* SIN(度)との間のX距離。 Y AとBの間の距離=半径* COS(度)。 Androidのマーカーのためにそれらを採用

は、我々が得る座標:ラジアンへ (度*のPI/180)に変換

var x = Math.sin(-angle * Math.PI/180) * 0.5 + 0.5;

  1. 我々はoposit回転角(負の値)からSINEを見つけます。
  2. X軸上の距離を得るために円の半径(0.5)で乗算します。
  3. 半径(+0.5)で右に移動すると、形状の中央(X軸上)になります。

var y = -(Math.cos(-angle * Math.PI/180) * 0.5 - 0.5);

  • oposit回転角(負の値)からの余弦を探す ラジアン(度*をPI/180)に変換します。
  • Y軸上の距離を得るために円の半径(0.5)で乗算します。
  • 半径(-0.5)で上に移動すると、形状の上部に移動します(Y軸上)。
  • マーカー座標系が正の値(符号付き)になるように、Y軸上に正の値を持ちます。
  • +0

    いくつかの説明は素晴らしいでしょう –

    +0

    可変アングルの意味は何ですか?どのように130.0のようなこれに特定の価値に到達するには? – Madhan

    関連する問題