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; }}
- osmdroid API解读(七)
- osmdroid API解读(一)
- osmdroid API解读(二)
- osmdroid API解读(三)
- osmdroid API解读(四)
- osmdroid API解读(五)
- osmdroid API解读(六)
- osmdroid API解读(八)
- osmdroid API解读(九)
- osmdroid API解读(十)
- osmdroid API解读(十一)
- osmdroid API解读(十二)
- osmdroid API解读(十三)
- osmdroid API解读(十四)
- osmdroid API解读(十五)
- Google Map API使用详解(七)——加载Google Map API URL的详细解读
- 《代码大全》解读(七)
- 实时开发框架Meteor API解读系列<七> Collection --01
- 51Nod 1265 四点共面
- pandas时间序列分析和处理Timeseries
- CSS 选择器权重计算规则
- M600(A3)云台+妙算manifold视频读取
- 欢迎使用CSDN-markdown编辑器
- osmdroid API解读(七)
- 第八周【项目3-顺序串算法】
- Java代码实现两台电脑之间传文件(2)
- Combinatorics——HDUOJ 1100
- 第七周项目一—建立顺序环形队列算法库
- NOIP 2017.10.24 总结+心得
- Android使用无线连接手机调试
- Go实现图的宽度搜索
- Spring-IOC