OSMdroid在存储中更改Tiles缓存

时间:2015-01-21 08:24:12

标签: android osmdroid

抱歉我的英语不好,我有一个问题。我是android新手,不知道怎么做。

如何修改项目中的OSMdroid 4.2 jar文件代码?

我将这些jar文件作为库添加到我的项目中。我的应用程序有3种语言。我有每种语言的瓦片源。当我选择语言时,程序会选择使用相同语言的磁贴源。但是当我缩放地图时,地图中的语言自动会发生变化。我不知道为什么会这样做。我认为这取决于存储中的瓷砖缓存  有没有办法单独为每种语言更改存储区中的磁贴缓存?  谢谢! :)

2 个答案:

答案 0 :(得分:3)

请参阅:https://github.com/osmdroid/osmdroid/issues/78 这是同样的问题(OSMDROID_PATH和TILE_PATH_BASE硬编码和最终)。

使用this patch(下面可能是旧版本),您可以根据需要更改切片缓存路径。

package org.osmdroid.tileprovider.constants;

import java.io.File;
import android.os.Environment;

/**
 * This class contains key settings related to the osmdroid cache, and methods to change default values. 
 */
public class TilesCacheSettings {

    /** Base path for osmdroid files. Zip files are in this folder. */
    public static File OSMDROID_PATH = new File(Environment.getExternalStorageDirectory(),
            "osmdroid");

    /** Base path for tiles. */
    public static File TILE_PATH_BASE = new File(OSMDROID_PATH, "tiles");

    /** 600 Mb */
    public static long TILE_MAX_CACHE_SIZE_BYTES = 600L * 1024 * 1024;

    /** 500 Mb */
    public static long TILE_TRIM_CACHE_SIZE_BYTES = 500L * 1024 * 1024;

    /** Change the root path of the osmdroid cache. 
     * By default, it is defined in SD card, osmdroid directory. 
     * @param newFullPath
     */
    public static void setCachePath(String newFullPath){
        OSMDROID_PATH = new File(newFullPath);
        TILE_PATH_BASE = new File(OSMDROID_PATH, "tiles");
    }

    /** Change the osmdroid tiles cache sizes
     * @param maxCacheSize in Mb. Default is 600 Mb. 
     * @param trimCacheSize When the cache size exceeds maxCacheSize, tiles will be automatically removed to reach this target. In Mb. Default is 500 Mb. 
     */
    public static void setCacheSizes(long maxCacheSize, long trimCacheSize){
        TILE_MAX_CACHE_SIZE_BYTES = maxCacheSize * 1024 * 1024;
        TILE_TRIM_CACHE_SIZE_BYTES = trimCacheSize * 1024 * 1024;
    }

}

答案 1 :(得分:0)

只在

中添加以下代码
OpenStreetMapTileProviderConstants.setCachePath(this.getFilesDir().getAbsolutePath());

OpenStreetMapTileProviderConstants.setCachePath("other path");