Я пытаюсь реализовать собственное наложение карты для osmdroid (но я предполагаю, что оно довольно похоже на наложение карты Google).
То, что я пытаюсь сделать, это нарисовать плоскость, повернуть ее в соответствии с азимутоми нарисуйте вектор скорости (линия впереди плоскости в направлении полета, которая показывает, где она скоро будет).
Идея состоит в том, что я рисую плоскость (и все) на холсте "лицом к северу",затем поверните его в соответствии с направлением полета и «объедините» его с наложенным холстом (я пробовал рисовать непосредственно на наложенном холсте, но при повороте он также вращал карту).
Я создал подкласс 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, чтобы проверить ...