В моем приложении 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?