【问题标题】:Android Google Map InfoWindow anchor point after marker rotation标记旋转后的Android Google Map InfoWindow锚点
【发布时间】:2015-10-05 07:46:03
【问题描述】:

如何在标记旋转到始终位于顶部中间后重置标记的 InfoWindows 锚点?问题是锚点随着标记旋转。

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?

【问题讨论】:

    标签: android google-maps


    【解决方案1】:
    var angle = 130.0; // rotation angle
    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);
    

    解释:

    如果我们假设地图标记是圆形(最适合旋转目的),并且我们知道 InfoWindow 锚点 (B) 可以设置为从 0.0,0.0(左上角)到 1,1 的任何相对坐标点(右下)我们可以使用 SIN 和 COS 公式通过给定的旋转度数找到圆线上的任何点。

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

    将它们用于我们得到的 Android 标记坐标:

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

    1. 我们发现正弦从正旋转角度(负值)转换 为弧度(度 * PI/180);
    2. 乘以圆半径(0.5)得到X轴上的距离;
    3. 向右移动半径 (+0.5) 以位于形状的中间(在 X 轴上);

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

    1. 从转换为正的旋转角度(负值)查找余弦 弧度(度数 * PI/180);
    2. 乘以圆半径(0.5)得到Y轴上的距离;
    3. 向上移动半径 (-0.5) 以位于形状顶部(在 Y 轴上);
    4. 将值设为正值(带 - 号),因为标记坐标系在 Y 轴向下具有正值;

    【讨论】:

    • 一些解释会很好
    • 可变角度是什么意思?如何达到 130.0 这样的特定值?
    • 当marker.setFlat(True);如何处理信息窗口旋转?
    • 你能告诉我为什么你在得到cos和sin的时候否定了角度吗?我真的很困惑,想进一步了解这一点。
    • @Madhan,这只是一个例子。特定角度是您要旋转标记的值。
    猜你喜欢
    • 2014-07-18
    • 1970-01-01
    • 1970-01-01
    • 2021-08-08
    • 1970-01-01
    • 1970-01-01
    • 2012-09-15
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多