OsmDroid и MapQuest: как я могу использовать плитки JPEG?

Я новичок в OSM и OSMdroid .

Я следил за этим довольно хорошим учебным пособием, чтобы показывать офлайнкарты. Итак, в основном, что я сделал:

  • Создал пакет в формате zip с помощью Mobile Atlas Creator
  • Использованный источник MapQuest, формат JPEG
  • Поместите zip в нужную папку: /mnt/sdcard/osmdroid/

Проблема заключалась в том, что плитки не были сделаны. У меня есть пустая страница.

Я нашел это решение , чтобы решить мою проблему.

Но теперь меня беспокоит, что я должен использовать PNG-файлы, которые занимают значительно больше места. Это не очень эффективно для моего приложения, потому что пользователю придется загружать гораздо больший пакет.

МОЙ ВОПРОС: Как я могу использовать плитки JPEG с OSMDroid и MapQuest?

Заранее спасибо.

Это работает, чтобы получить JPG вместо PNG:

 MapView myOpenMapView; myOpenMapView = (MapView) findViewById(R.id.openmapview); myOpenMapView.setTileSource(new XYTileSource("MapquestOSM", ResourceProxy.string.mapquest_osm, 0, 18, 256, ".jpg", new String[] { "http://otile1.mqcdn.com/tiles/1.0.0/map/", "http://otile2.mqcdn.com/tiles/1.0.0/map/", "http://otile3.mqcdn.com/tiles/1.0.0/map/", "http://otile4.mqcdn.com/tiles/1.0.0/map/" })); 

Обратите внимание на «.jpg» в строке 3.

Я создал источник плитки, который поддерживает jpg, вы можете взглянуть и адаптировать свой случай. Обратите внимание, что getTileRelativeFilenameString не будет содержать .title ext. Эта часть будет добавлена ​​(MapTileFilesystemProvider)

 import java.io.File; import java.io.InputStream; import java.util.Random; import org.osmdroid.ResourceProxy; import org.osmdroid.ResourceProxy.string; import org.osmdroid.tileprovider.MapTile; import org.osmdroid.tileprovider.tilesource.BitmapTileSourceBase.LowMemoryException; import org.osmdroid.tileprovider.tilesource.ITileSource; import android.graphics.Bitmap; import android.graphics.BitmapFactory; import android.graphics.drawable.BitmapDrawable; import android.graphics.drawable.Drawable; public class MapTilerCustomDataSource implements ITileSource { private static int globalOrdinal = 0; private final int mMinimumZoomLevel; private final int mMaximumZoomLevel; private final int mOrdinal; protected final String mName; protected final String mImageFilenameEnding; protected final Random random = new Random(); private final int mTileSizePixels; private final string mResourceId; public MapTilerCustomDataSource() { mResourceId = null; mOrdinal = globalOrdinal++; mName = "MapquestOSM"; mMinimumZoomLevel = 0; mMaximumZoomLevel = 20; mTileSizePixels = 256; mImageFilenameEnding = ".jpg"; } @Override public String getTileRelativeFilenameString(final MapTile tile) { final StringBuilder sb = new StringBuilder(); sb.append(pathBase()); sb.append('/'); sb.append(tile.getZoomLevel()); sb.append('/'); sb.append(tile.getX()); sb.append('/'); sb.append(tile.getY()); sb.append(imageFilenameEnding()); return sb.toString(); } @Override public Drawable getDrawable(String aFilePath) throws LowMemoryException { try { // default implementation will load the file as a bitmap and create // a BitmapDrawable from it final Bitmap bitmap = BitmapFactory.decodeFile(aFilePath); if (bitmap != null) { return new BitmapDrawable(bitmap); } else { // if we couldn't load it then it's invalid - delete it try { new File(aFilePath).delete(); } catch (final Throwable e) { } } } catch (final OutOfMemoryError e) { System.gc(); } return null; } @Override public Drawable getDrawable(InputStream aFileInputStream) throws LowMemoryException { try { // default implementation will load the file as a bitmap and create // a BitmapDrawable from it final Bitmap bitmap = BitmapFactory.decodeStream(aFileInputStream); if (bitmap != null) { return new BitmapDrawable(bitmap); } } catch (final OutOfMemoryError e) { System.gc(); } return null; } @Override public int ordinal() { return mOrdinal; } @Override public String name() { return mName; } public String pathBase() { return mName; } public String imageFilenameEnding() { return mImageFilenameEnding; } @Override public int getMinimumZoomLevel() { return mMinimumZoomLevel; } @Override public int getMaximumZoomLevel() { return mMaximumZoomLevel; } @Override public int getTileSizePixels() { return mTileSizePixels; } @Override public String localizedName(final ResourceProxy proxy) { return proxy.getString(mResourceId); } } 

Загрузите файлы «xxx.JPG.tile» и переименуйте их в «xxx.PNG.tile».