Рисуйте плитки локально с помощью OSMDroid Tilesource - PullRequest
0 голосов
/ 27 июня 2018

Как вы рисуете (во время выполнения) плитки OSMDroid. Я пытаюсь сгенерировать (простое) наложение погоды на само устройство из данных. Хотя наложения было бы достаточно, и я понимаю, что MapsForge может быть одной из таких возможностей для создания векторных плиток, данные, которые я пытаюсь нарисовать, очень просты, и я подумал, что это может быть излишним?

Я попытался реализовать универсальный BitmapTileSourceBase и переписать метод getDrawable (), чтобы вернуть растровое изображение, но, похоже, это не срабатывает и заканчивается пустыми листами.

public class DrawnTiles extends BitmapTileSourceBase {
public DrawnTiles(String aName) {
    super(aName, 1, 6, 256, ".png");
}

@Override
public synchronized  Drawable getDrawable(final String aFilePath) {
    //Make the bad tile easy to spot
    Bitmap bitmap = Bitmap.createBitmap(256, 256, Bitmap.Config.RGB_565);
    bitmap.eraseColor(Color.YELLOW);

    return new BitmapDrawable(bitmap);
}
}

Ценю любой совет или предпочтительное решение. Конечные плитки будут нарисованы в соответствии с их границами, поэтому способ доступа к этому методу будет идеальным. Не стоит беспокоиться о кешировании, поскольку данные будут меняться довольно часто.

1 Ответ

0 голосов
/ 29 июня 2018

Хотя это и не прямой ответ на первоначальный вопрос, следующее решает мою проблему и может решить другие.

Генерация плиток может потребоваться для глобального решения, однако пользовательское наложение OSMDroid, похоже, удовлетворяет моим требованиям. Функции поддержки для преобразования между пикселями и широтой / долготой.

public class CustomOverlay extends org.osmdroid.views.overlay.Overlay {
    @Override
    public void draw(Canvas canvas, MapView map, boolean shadow) {
        if (!isEnabled()) return;
        if (shadow) {
            //draw a shadow if needed, otherwise return
            return;
        }

        /*
        This will go from pixel x,y to lat/lon
        GeoPoint iGeoPoint = (GeoPoint) projection.fromPixels(x,y);

        This will go from lat/lon to pixel x,y
        projection.toPixels(geoPoint, pt);

        To project pixels should give you the canvas coordinates
        projection.toProjectedPixels(...)
         */

        final Projection pj = map.getProjection();
        canvas.save();
        Paint paint = new Paint();
        canvas.drawCircle(pj.getScreenCenterX(),pj.getScreenCenterY(),40,paint);
        canvas.restore();
}
...