我正在尝试为 osmdroid 实现我自己的地图叠加层(但我认为它与谷歌地图叠加层非常相似)。
我想要做的是画一个平面,根据方位旋转它并画一个速度矢量(在飞行方向上飞机前面的线,显示它很快会在哪里)。
这个想法是我在“面向北方”的画布上绘制飞机(等等),然后根据飞行方向旋转它并将它与覆盖画布“合并”(我尝试直接绘制到覆盖画布,但在旋转时,它也在旋转地图)。
我创建了一个 Overlay 的子类并覆盖了 onDraw 方法,如下所示:
@Override
protected void draw(Canvas c, MapView mapView, boolean shadow) {
if (location != null) {
Point locPoint = new Point();
GeoPoint locGeoPoint = new GeoPoint(location);
final Projection pj = mapView.getProjection();
pj.toMapPixels(locGeoPoint, locPoint);
this.drawPlane(c, locPoint, location.getBearing());
}
}
private void drawPlane(Canvas cs, Point ctr, float bearing) {
Paint paint = new Paint();
paint.setColor(Color.RED);
paint.setAntiAlias(true);
Bitmap planeBM = Bitmap.createBitmap(cs.getWidth(), cs.getHeight(), Bitmap.Config.ARGB_8888);
planeBM.setDensity(cs.getDensity());
Canvas c = new Canvas(planeBM);
Rect r = new Rect();
//Point center = new Point(cs.getWidth() / 2, cs.getHeight() /2);
Point center = new Point(0, 0);
// Draw fuselage
r.left = center.x - PLANE_WIDTH / 2;
r.right = r.left + PLANE_WIDTH;
r.top = center.y - PLANE_SIZE / 3;
r.bottom = r.top + PLANE_SIZE;
c.drawRect(r, paint);
// Draw wing (REMOVED)
// Draw stabilizer (REMOVED)
// TODO Draw Speed vector
// "Merging" canvas
Matrix merge = new Matrix(cs.getMatrix());
//merge.setTranslate(0, 0);
//merge.setRotate(bearing, center.x, center.y);
cs.drawBitmap(planeBM, merge, paint);
cs.save();
}
基本上我的飞机从不显示。
我认为这与初始画布中具有较大值的矩阵有关(我假设这些是地理坐标)。
但这一切似乎都是一致的(平面位置具有较大的值以及与矩阵一致)。
我尝试了很多事情:
- 从实际平面位置绘制(大值):没有帮助;
- 使用覆盖画布矩阵设置我的新画布矩阵:没有帮助;
- 与新的“空”矩阵合并:没有帮助;-...
我知道我的图像包含平面(至少如果我从 0,0 或新的画布中心绘制,因为我将它保存到 SD 以检查...