Странный квадрат в загруженной векторной карте в osmdroidJAVA

Программисты JAVA общаются здесь
Ответить
Anonymous
 Странный квадрат в загруженной векторной карте в osmdroid

Сообщение Anonymous »

Это квадраты, которые появляются, если я пытаюсь загрузить автономную векторную карту в osmdroid. Сначала я подумал, что это НЕ пиксельные данные типа пустых пикселей и переписал класс, отвечающий за отрисовку тайлов, покрасил их в желтый цвет, но к сожалению именно это и пожелтело. Ниже приведен код, который используется для загрузки векторной карты и переписанного мной класса библиотеки:

Код: Выделить всё

private fun setOfflineMaps(files: MutableList) {
AndroidGraphicFactory.createInstance(requireContext())
binding.map.setUseDataConnection(false)
if (files.size > 0) {
val maps = files.toTypedArray()
var theme: XmlRenderTheme? = null
try {
theme = AssetsRenderTheme(
requireContext().applicationContext.assets,
"renderthemes/",
"rendertheme-v4.xml"  //4.1 working
)
} catch (ex: java.lang.Exception) {
ex.printStackTrace()
}
fromFiles = MapsForgeTileSource2.createFromFiles(maps, theme, "rendertheme-v4")
forge = MapsForgeTileProvider2(
SimpleRegisterReceiver(context),
fromFiles, null
)

binding.map.overlayManager.tilesOverlay.setLoadingBackgroundColor(Color.TRANSPARENT)
binding.map.tileProvider = forge
//Magic trick //delet
/*fromFiles?.let {
mapController.setZoom(it.getMinimumZoomLevel())
binding.map.zoomToBoundingBox(it.getBoundsOsmdroid(), true)
}*/
}
}
Вот метод рендеринга, расположенный в классе MapsForgeTileSource2, ну, это копия MapsForgeTileSource, за исключением небольшого метода, который я добавил

Код: Выделить всё

 //The synchronized here is VERY important.  If missing, the mapDatabase read gets corrupted by multiple threads reading the file at once.
public synchronized Drawable renderTile(final long pMapTileIndex) {

Tile tile = new Tile(MapTileIndex.getX(pMapTileIndex), MapTileIndex.getY(pMapTileIndex), (byte) MapTileIndex.getZoom(pMapTileIndex), 256);
model.setFixedTileSize(256);

//You could try something like this to load a custom theme
//try{
//  jobTheme = new ExternalRenderTheme(themeFile);
//}
//catch(Exception e){
//  jobTheme = InternalRenderTheme.OSMARENDER;
//}

if (mapDatabase==null)
return null;
try {
//Draw the tile
RendererJob mapGeneratorJob = new RendererJob(tile, mapDatabase, theme, model, scale, true, false);
AndroidTileBitmap bmp = (AndroidTileBitmap) renderer.executeJob(mapGeneratorJob);
if (bmp != null) {
Bitmap bitmap = AndroidGraphicFactory.getBitmap(bmp);
Bitmap processedBitmap = removeNoDataPixels(bitmap);

return new BitmapDrawable(processedBitmap);
}
/*if (bmp != null)
return new BitmapDrawable(AndroidGraphicFactory.getBitmap(bmp));*/
} catch (Exception ex) {
Log.d(IMapView.LOGTAG, "###################### Mapsforge tile generation failed", ex);
}
return null;
}

private Bitmap removeNoDataPixels(Bitmap bitmap) {
int width = bitmap.getWidth();
int height = bitmap.getHeight();

Bitmap result = Bitmap.createBitmap(width, height, Bitmap.Config.ARGB_8888);

for (int x = 0; x < width; x++) {
for (int y = 0; y < height; y++) {
int pixel = bitmap.getPixel(x, y);

// Логируем проблемные пиксели
if (pixel == Color.WHITE || pixel == Color.BLACK || pixel == 0 || pixel == 256) {
Log.d("PIXEL_CHECK", "No Data Pixel at (" + x + "," + y + "): " + Integer.toHexString(pixel));
}

// Устанавливаем прозрачность для "No Data"
if (pixel == Color.WHITE || pixel == Color.BLACK || pixel == 0 || pixel == 256) {
result.setPixel(x, y, Color.YELLOW); // Прозрачный фон
} else {
result.setPixel(x, y, pixel); // Копируем оригинальный пиксель
}
}
}
return result;
}

введите здесь описание изображения
Я попробовал: 1. Найти и удалить данные без пикселей. 2. Пробовал разные настройки osmdroid 3. Пробовал вносить изменения в файл стилей Ничего не помогло

Подробнее здесь: https://stackoverflow.com/questions/792 ... n-osmdroid
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «JAVA»