osmdroid API解读(七)

来源:互联网 发布:fifaol3 超玩数据库 编辑:程序博客网 时间:2024/06/05 18:30

osmdroid API解读(七)

osmdroid-android org.osmdroid.tileprovider.modules 包(一)

1. IArchiveFile

本地瓦片文件接口用于从本地文件载入瓦片。通常仅用于不需要计算就可以获取瓦片的本地文件

public interface IArchiveFile {     //初始化本地文件,比如执行初始化扫描、请求、打开数据库等    void init(File pFile) throws Exception;     //根据瓦片源及瓦片的基本信息获取瓦片图片的输入流    InputStream getInputStream(ITileSource tileSource, MapTile tile);     //关闭本地瓦片文件释放资源    void close();     //如果支持的话,获取本地可利用的瓦片源的名称列表,否则返回空集合    public Set<String> getTileSources();}

1.1 几种类型的本地瓦片

1.1.1 MBTiles

支持MBTiles类型的本地瓦片包,也是sqlite型数据,只是字段与sqlite不一致。

public class MBTilesFileArchive implements IArchiveFile {    ...}

1.1.2 ZIP

支持zip类型的本地瓦片包,java.util.zip.ZipFile方法提供相应的解析方法。

public class ZipFileArchive implements IArchiveFile {    ...}

1.1.3 sqlite

支持sqlite类型的本地瓦片包,是osmdroid风格的本地瓦片提供者

public class DatabaseFileArchive implements IArchiveFile {    ...}

1.1.4 GEMF

支持GEMF文件的本地瓦片包。org.osmdroid.util.GEMFFile提供相应的解析方法。

public class GEMFFileArchive implements IArchiveFile {    ...}

1.2 ArchiveFileFactory

将1.1中提到的四种数据利用尾缀进行区别,并用四种相应的IArchiveFile类来解析。此类将上面1.1中的四种格式的瓦片包进行了封装:

public class ArchiveFileFactory {    static Map<String, Class<? extends IArchiveFile> > extensionMap = new HashMap<String,  Class<? extends IArchiveFile>>();    //载入四种格式对应的IArchiveFile类    static {        extensionMap.put("zip", ZipFileArchive.class);        if (Build.VERSION.SDK_INT >= 10) {            extensionMap.put("sqlite", DatabaseFileArchive.class);            extensionMap.put("mbtiles", MBTilesFileArchive.class);            extensionMap.put("gemf", GEMFFileArchive.class);        }    }    //根据文件尾缀查询是否有相应的解析方法    public static boolean isFileExtensionRegistered(String extension){        return extensionMap.containsKey(extension);    }    //注册新的尾缀以及相应的本地文件解析管理IArchiveFile子类    public static void registerArchiveFileProvider(Class<? extends IArchiveFile> provider, String fileExtension){        extensionMap.put(fileExtension, provider);    }    //根据文件尾缀查询相应的IArchiveFile    public static IArchiveFile getArchiveFile(final File pFile) {        String extension = pFile.getName();        if (extension.contains(".")){            try {                extension = extension.substring(extension.lastIndexOf(".") + 1);            }catch (Exception ex){                //just to catch any potential out of index errors            }        }        Class<? extends IArchiveFile> aClass = extensionMap.get(extension.toLowerCase());        if (aClass!=null){            try {                IArchiveFile provider = aClass.newInstance();                provider.init(pFile);                return provider;            } catch (InstantiationException e) {                Log.e(IMapView.LOGTAG, "Error initializing archive file provider " + pFile.getAbsolutePath(), e);            } catch (IllegalAccessException e) {                Log.e(IMapView.LOGTAG, "Error initializing archive file provider " + pFile.getAbsolutePath(), e);            } catch (final Exception e) {                Log.e(IMapView.LOGTAG,"Error opening archive file " + pFile.getAbsolutePath(), e);            }        }        return null;    }    //获取本工厂类能解析的数据格式    public static Set<String> getRegisteredExtensions() {        Set<String> r = new HashSet<>();        r.addAll(extensionMap.keySet());        return r;    }}

2. IFilesystemCache

写入文件系统缓存的接口。

public interface IFilesystemCache {    //将输入流保存为文件系统某瓦片源的某瓦片    boolean saveFile(final ITileSource pTileSourceInfo, MapTile pTile,                     final InputStream pStream);    //如果瓦片已经下载,返回true    boolean exists(final ITileSource pTileSourceInfo, final MapTile pTile );    //当地图引擎关闭时使用,用于执行清理活动以及终止背景线程    void onDetach();    //从缓存中移除瓦片    boolean remove(ITileSource tileSource, MapTile tile);    //获取缓存中瓦片的到期期限    Long getExpirationTimestamp(final ITileSource pTileSource, final MapTile pTile);    //获取某块瓦片对应的图    Drawable loadTile(final ITileSource pTileSource, final MapTile pTile) throws Exception;}

2.1 TileWriter

实现了IFilesystemCache,将网片写入文件系统缓存。如果缓存超过600Mb,将会被切割自500Mb;

public class TileWriter implements IFilesystemCache {    ...}

2.1 TileWriter

实现了IFilesystemCache,将数据写为sqlite数据库中,如果瓦片下载的服务器提供的话,支持过期期限。

public class SqlTileWriter implements IFilesystemCache {    ...}

2.2 SqliteArchiveTileWriter

实现了IFilesystemCache,将瓦片写入sqlite数据库中,不支持过期期限。

public class SqliteArchiveTileWriter implements IFilesystemCache {    ...}

3. INetworkAvailablityCheck

网络可用性检查接口

public interface INetworkAvailablityCheck {    boolean getNetworkAvailable();    boolean getWiFiNetworkAvailable();    boolean getCellularDataNetworkAvailable();    boolean getRouteToPathExists(int hostAddress);}

3.1 NetworkAvailabliltyCheck

网络可用性检查的直接实现

public class NetworkAvailabliltyCheck implements INetworkAvailablityCheck {    ...}

4. ConfigurablePriorityThreadFactory

配置线程的优先级

public class ConfigurablePriorityThreadFactory implements ThreadFactory {    private final int mPriority;    private final String mName;    public ConfigurablePriorityThreadFactory(final int pPriority, final String pName) {        mPriority = pPriority;        mName = pName;    }    @Override    public Thread newThread(final Runnable pRunnable) {        final Thread thread = new Thread(pRunnable);        thread.setPriority(mPriority);        if (mName != null) {            thread.setName(mName);        }        return thread;    }}
原创粉丝点击