Получить эскиз карты GPKG с OSMdroid - PullRequest
0 голосов
/ 13 января 2020

В моем приложении android я сканирую файлы GPKG и хочу получить уменьшенное изображение (Bitmap) карты с максимальным увеличением. Я действительно нигде ничего об этом не нахожу, и до сих пор это то, что я пробовал, используя osmdroid-геопакет .

Этот класс будет получать местоположение файла GPKG, и это должно быть возможность предоставить миниатюрное изображение (как общий вид) функций внутри него. Проблема в том, что он возвращает пустое растровое изображение, ничего не отображается

import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.Paint;

import com.company.app.R;
import com.orhanobut.logger.Logger;

import java.io.File;
import java.util.HashSet;
import java.util.List;
import java.util.Set;

import mil.nga.geopackage.GeoPackage;
import mil.nga.geopackage.GeoPackageManager;
import mil.nga.geopackage.factory.GeoPackageFactory;
import mil.nga.geopackage.features.index.FeatureIndexManager;
import mil.nga.geopackage.features.index.FeatureIndexType;
import mil.nga.geopackage.features.user.FeatureDao;
import mil.nga.geopackage.tiles.features.DefaultFeatureTiles;
import mil.nga.geopackage.tiles.features.FeatureTiles;
import mil.nga.geopackage.tiles.user.TileCursor;
import mil.nga.geopackage.tiles.user.TileDao;
import mil.nga.geopackage.tiles.user.TileRow;

public class GpkgMapReader {
    private GeoPackageManager manager;
    private GeoPackage geoPackage = null;
    private Set<GeoPackage> tileSources = new HashSet<>();
    private Context context;

    public GpkgMapReader(Context context, String location) {
        this.context = context;
        manager = GeoPackageFactory.getManager(context);

        // Import database
        File db = new File(location);
        if (manager.exists(db.getName())) {
            geoPackage = manager.open(db.getName(),false);
        } else {
            boolean imported = manager.importGeoPackageAsExternalLink(location, db.getName());
            if (imported) {
                geoPackage = manager.open(db.getName());
            }
        }
    }

    public Bitmap getThumbnail() {
        if (geoPackage != null) {
            List<String> features = geoPackage.getFeatureTables();
            List<String> tiles = geoPackage.getTileTables();

            if (tiles.size() > 0) {
                String tileTable = tiles.get(0);
                TileDao tileDao = geoPackage.getTileDao(tileTable);
                try (TileCursor tileCursor = tileDao.queryForTile(0)) {
                    tileCursor.moveToFirst();
                    TileRow tileRow = tileCursor.getRow();
                    geoPackage.close();
                    return tileRow.getTileDataBitmap();
                }
            }

            if (features.size() > 0) {
                String featureTable = features.get(0);
                FeatureDao featureDao = geoPackage.getFeatureDao(featureTable);
                FeatureIndexManager indexer = new FeatureIndexManager(context, geoPackage, featureDao);
                indexer.setIndexLocation(FeatureIndexType.GEOPACKAGE);
                int zoom = featureDao.getZoomLevel();

                FeatureTiles featureTiles = new DefaultFeatureTiles(context, featureDao);
                featureTiles.setMaxFeaturesPerTile(null);
                featureTiles.setIndexManager(indexer);
                Paint linePaint = new Paint();
                linePaint.setColor(context.getResources().getColor(R.color.colorAccent));
                Paint polyPaint = new Paint();
                polyPaint.setColor(context.getResources().getColor(R.color.colorHighlight));
                featureTiles.setLinePaint(linePaint);
                featureTiles.setPolygonFillPaint(polyPaint);

                return featureTiles.drawTileQueryAll(0, 0, 20);
            }
        }
        return null;
    }
}

Я даже не знаю, получу ли я так, как я хочу, но я действительно не могу найти другую альтернативу. Что не так с этим кодом или вы знаете какой-либо другой способ просто получить снимок функций GPKG?

...