5

OSMOSMdroidは初めてです。

私はこのかなり良いチュートリアルに従って、オフラインマップを表示していました. 基本的に私がやったことは次のとおりです。

  • Mobile Atlas Creator で zip 形式のタイル パッケージを作成しました
  • 使用した MapQuest ソース、JPEG 形式
  • zip を適切なフォルダーに入れます。/mnt/sdcard/osmdroid/

問題は、タイルがレンダリングされなかったことです。空白のページができました。

私の問題を解決するために、この解決策を見つけました。

しかし今、かなり多くのスペースを必要とするPNGファイルを使用しなければならないことに悩まされています。ユーザーははるかに大きなパッケージをダウンロードする必要があるため、私のアプリではあまり効率的ではありません。

私の質問は: OSMDroid と MapQuest で JPEG タイルを使用するにはどうすればよいですか?

前もって感謝します。

4

3 に答える 3

3

これは、PNG の代わりに JPG を取得するために機能します。

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/" }));

3 行目の「.jpg」に注目してください。

于 2014-06-06T22:29:52.197 に答える
1

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);
    }

}
于 2013-12-30T07:47:50.873 に答える
0

「xxx.JPG.tile」ファイルをダウンロードし、名前を「xxx.PNG.tile」に変更します。

于 2014-01-30T18:45:11.673 に答える