Android:如何更新Skobbler地图样式

时间:2015-02-24 13:29:00

标签: android skmaps

我正在使用Skobbler SDK 2.3,我想知道如何在SKMaps.zip中更新地图样式。

问题:

我修改了包含的“daystyle”,但我注意到这只会在删除应用数据后生效。这真的不是我想要的。它看起来像SKPrepareMapTextureThread(android.content.Context context, java.lang.String mapTexturesPath,java.lang.String zipName, SKPrepareMapTextureListener listener).start()
仅在SKMaps文件夹不存在时才复制文件。有人知道在start()方法中是否有这样的检查,或者(更好)如何向用户提供修改过的SKMap样式?

1 个答案:

答案 0 :(得分:1)

如果SKMaps文件夹不存在,则SKPrepareMapTextureThread仅复制文件,这是它的预期方式,因为地图资源的解压缩需要相当长的时间,并且只打算执行一次。 要更新样式,需要使用变通方法:

1)从地图资源路径中删除文件.installed.txt并调用SKPrepareMapTextureThread,以便从资产中恢复资源。虽然这是最简单的方法,但它也是最耗时的:

final File txtPreparedFile = new File(mapResourcesDirPath + "/.installed.txt"); 
        if (!txtPreparedFile.exists()) { 
            txtPreparedFile.delete(); 
        } 
new SKPrepareMapTextureThread(context, mapResourcesDirPath, "SKMaps.zip", skPrepareMapTextureListener).start(); 

2)更优化的方法是编写一个用旧的

替换旧样式的例程
copyFile(new File("path/daystyle.json"), new File("mapResourcesDirPath/SKMaps/daystyle/daystyle.json")); 
...
public static void copyFile(File sourceFile, File destFile) throws IOException { 
    if(!destFile.exists()) { 
        destFile.createNewFile(); 
    } 

    FileChannel source = null; 
    FileChannel destination = null; 
    try { 
        source = new FileInputStream(sourceFile).getChannel(); 
        destination = new FileOutputStream(destFile).getChannel(); 

        // previous code: destination.transferFrom(source, 0, source.size()); 
        // to avoid infinite loops, should be: 
        long count = 0; 
        long size = source.size(); 
        while((count += destination.transferFrom(source, count, size-count))<size); 
    } 
    finally { 
        if(source != null) { 
            source.close(); 
        } 
        if(destination != null) { 
            destination.close(); 
        } 
    } 
}