2015-10-05 98 views
5

如何将标记的InfoWindows定位点重置为始终位于顶部中间?问题在于锚点随标记一起旋转。安卓谷歌地图InfoWindow标记旋转后的定位点

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公式在给定的旋转角度下找到圆线上的任意点。 A和B =半径* SIN(度)之间

enter image description here

X距离; Y与A之间的距离= B =半径* COS(度);

他们采用Android的标记坐标,我们得到:

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

  1. 我们从oposit旋转角度(负值)发现SINE转换 为弧度(度* PI/180);
  2. 乘以圆弧半径(0.5)得到X轴上的距离;
  3. 按半径(+0.5)切换到RIGHT形状的中间(在X轴上);

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

  • 从oposit旋转角(负的值)转换为 弧度(度* PI/180)查找COSINE;
  • 乘以圆弧半径(0.5)得到Y轴上的距离;
  • 按半径(-0.5)向上移动到形状的顶部(在Y轴上);
  • 使Y轴上的值为正值(带 - 符号)作为标记坐标系的正值;
  • +0

    一些解释会很好 –

    +0

    什么是可变角度?如何达到像130.0这样的特定值? – Madhan