3

使用新版本的 mapsforge 0.5.1,地图可以通过 onSensorChanged 事件正常旋转。我在 onLocationChanged 事件的 GPS 点添加了一个自定义 GPS 位置标记。当地图旋转时,标记也会旋转以指向设备标题,就像在谷歌地图中使用标记的绘制方法中的以下代码一样。

android.graphics.Canvas androidCanvas = AndroidGraphicFactory.getCanvas(canvas);
androidCanvas.save();
Float px = (float) canvas.getWidth()/2;
Float py = (float) canvas.getHeight()/2;
androidCanvas.rotate(degree, px, py);
canvas.drawBitmap(bitmap, left, top);
androidCanvas.restore();

在此处输入图像描述

但是,当拖动地图时,标记的位置会偏离 GPS 位置的前一个点。

在此处输入图像描述

如何计算 px 和 py 值以将标记保持在地图上 GPS 位置的精确点,即使地图正在旋转并且标记指向设备航向。

4

1 回答 1

1

我知道它有点旧,但对于未来的研究,我找到了一个解决方案:

  • 首先扩展 mapsforge Marker 并覆盖它的 draw() 方法
  • 从 Marker 复制粘贴 draw 方法的内容
  • 然后在最后一个条件中添加以下内容:

替换这个:

if(canvasRectangle.intersects(bitmapRectangle)) {
    canvas.drawBitmap(bitmap, left, top);
}

有了这个 :

if(canvasRectangle.intersects(bitmapRectangle)) {
    // Rotate the marker based on bearing for example (or whatever angle you want)
    android.graphics.Canvas androidCanvas = AndroidGraphicFactory.getCanvas(canvas);
    androidCanvas.save();

    float px = (right + left) / 2f;
    float py = (bottom + top) / 2f;

    androidCanvas.rotate(bearing, px, py);
    canvas.drawBitmap(bitmap, left, top);
    androidCanvas.restore();
}

在我的情况下,“轴承”是我的类扩展标记的成员变量,我在代码中的两个不同位置(gps 位置)设置了它。您可以将其替换为适合您需要的任何角度。

于 2016-04-14T09:50:16.860 回答