osmdroid API解读(八)

来源:互联网 发布:植物生长算法代码 编辑:程序博客网 时间:2024/05/16 08:48

osmdroid API解读(八)

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

前几节的内容主要关于如何封装不同瓦片源服务、不同瓦片编号系统的瓦片源数据以及如何读写本地不同格式的瓦片数据,将此封装成一个ITileSource的子类,方便读写源的内部信息。MapTile Provider将用于管理一个瓦片源与MapView的交互问题。

1. MapTileModuleProviderBase

tile Provider类模型基础

public abstract class MapTileModuleProviderBase {    //为此provider赋予的名称    protected abstract String getName();    //此provider线程的名称    protected abstract String getThreadGroupName();    //获取瓦片加载器    public abstract TileLoader getTileLoader();    //如果使用数据连接返回true,否则返回false。这个值用于当没有数据连接是此提供者应该被跳过    public abstract boolean getUsesDataConnection();    //获取此提供者持有瓦片源的最大、最小缩放等级    public abstract int getMinimumZoomLevel();    public abstract int getMaximumZoomLevel();    //设置瓦片源    public abstract void setTileSource(ITileSource tileSource);    private final ExecutorService mExecutor;    protected final Object mQueueLockObject = new Object();    protected final HashMap<MapTile, MapTileRequestState> mWorking;    protected final LinkedHashMap<MapTile, MapTileRequestState> mPending;    public MapTileModuleProviderBase(int pThreadPoolSize, final int pPendingQueueSize) {        ...    }    //异步载入瓦片源    public void loadMapTileAsync(final MapTileRequestState pState){        ...    }    //清除队列    private void clearQueue() {        ...    }    //我们在关闭时,停止所有工作    public void detach() {        this.clearQueue();        this.mExecutor.shutdown();    }    //从队列上移除瓦片    protected void removeTileFromQueues(final MapTile mapTile) {        synchronized (mQueueLockObject) {            if (Configuration.getInstance().isDebugTileProviders()) {                Log.d(IMapView.LOGTAG,"MapTileModuleProviderBase.removeTileFromQueues() on provider: "                        + getName() + " for tile: " + mapTile);            }            mPending.remove(mapTile);            mWorking.remove(mapTile);        }    }    //用于请求瓦片,一个抽象的内部类,用于通过工作线程从服务中获取瓦片。它将瓦片的 “pending”状态设置为“working”状态使瓦片处于可以用状态。未实现loadTile()方法。    public abstract class TileLoader implements Runnable {        ...    }    //被TileLoader.loadTile()抛出,用于方法不能正常进行时。典型的用于清理pending状态的队列。    public class CantContinueException extends Exception {        private static final long serialVersionUID = 146526524087765133L;        public CantContinueException(final String pDetailMessage) {            super(pDetailMessage);        }        public CantContinueException(final Throwable pThrowable) {            super(pThrowable);        }    }}

1.1 MapTileDownloader

瓦片下载提供者,用于从HTTP Server上下载瓦片。如果可以的话会将下载的瓦片利用IFilesystemCache缓存到本地。

public class MapTileDownloader extends MapTileModuleProviderBase {    //缓存本地接口    private final IFilesystemCache mFilesystemCache;    //在线瓦片源    private final AtomicReference<OnlineTileSourceBase> mTileSource = new AtomicReference<OnlineTileSourceBase>();    //网络可用性检查接口    private final INetworkAvailablityCheck mNetworkAvailablityCheck;        ...}

1.2 MapTileFileStorageProviderBase

本地存储的瓦片源提供者。

public abstract class MapTileFileStorageProviderBase extends MapTileModuleProviderBase {    //存储卡状态    static private boolean mSdCardAvailable = true;    //注册的广播接收者    private final IRegisterReceiver mRegisterReceiver;    //广播接受者    private MyBroadcastReceiver mBroadcastReceiver;        ...}

1.2.1 MapTileAssetsProvider

本地瓦片在Assets文件夹中

public class MapTileAssetsProvider extends MapTileFileStorageProviderBase {    private final AssetManager mAssets;    private final AtomicReference<ITileSource> mTileSource = new AtomicReference<ITileSource>();    ...}

1.2.2 MapTileAssetsProvider

用于本地缓存瓦片源。此 tile provider会自动发现存在的本地持久缓存文件,并全部使用

public class MapTileFileArchiveProvider extends MapTileFileStorageProviderBase {    private final ArrayList<IArchiveFile> mArchiveFiles = new ArrayList<IArchiveFile>();    private final AtomicReference<ITileSource> mTileSource = new AtomicReference<ITileSource>();    /** Disable the search of archives if specified in constructor */    private final boolean mSpecificArchivesProvided;        ...}

1.2.3 MapTileFilesystemProvider

临时缓存瓦片提供者,用于服务性瓦片缓存文件。

public class MapTileFilesystemProvider extends MapTileFileStorageProviderBase {    private final TileWriter mWriter = new TileWriter();    private final AtomicReference<ITileSource> mTileSource = new AtomicReference<ITileSource>();        ...}

1.3 MapTileApproximater

粗略瓦片提供者,用于计算粗略瓦片瓦片数。粗略是基于同一区域的较低缩放等级的瓦片数。比如,在离线模式下,显示近似瓦片好过于显示灰色方框。

public class MapTileApproximater extends MapTileModuleProviderBase {    private final List<MapTileModuleProviderBase> mProviders = new ArrayList<>();//瓦片提供者    private int minZoomLevel;//要显示的较低缩放等级        ...}

osmdroid-android org.osmdroid.tileprovider.constants 包

1. OpenStreetMapTileProviderConstants

此类包含tile provider的常量

public class OpenStreetMapTileProviderConstants {    //osmdroid基本路径,Zip/sqlite/mbtiles/etc在此文件夹下,也用于离线文件的瓦片源    private static File OSMDROID_PATH = new File(StorageUtils.getStorage().getAbsolutePath(),            "osmdroid");     @Deprecated     public static File getBasePath(){          return Configuration.getInstance().getOsmdroidBasePath();     }    //当使用下载式瓦片时,是你能获取HTTP使用者代理    @Deprecated    public static String getUserAgentValue(){        return Configuration.getInstance().getUserAgentValue();    }    @Deprecated    public static void setUserAgentValue(String val){        Configuration.getInstance().setUserAgentValue(val);    }    /** Minimum Zoom Level */    public static final int MINIMUM_ZOOMLEVEL = 0;    //给文件增加扩展名    public static final String TILE_PATH_EXTENSION = ".tile";    public static final long ONE_SECOND = 1000;    public static final long ONE_MINUTE = ONE_SECOND * 60;    public static final long ONE_HOUR = ONE_MINUTE * 60;    public static final long ONE_DAY = ONE_HOUR * 24;    public static final long ONE_WEEK = ONE_DAY * 7;    public static final long ONE_YEAR = ONE_DAY * 365;    public static final long DEFAULT_MAXIMUM_CACHED_FILE_AGE = ONE_WEEK;    //默认的瓦片过期时间    public static final long TILE_EXPIRY_TIME_MILLISECONDS = 1000L * 60 * 60 * 24 * 30;    /**     * this is the expected http header to expect from a tile server     * @since 5.1     */    public static final String HTTP_EXPIRES_HEADER = "Expires";    /**     * this is the default and expected http header for Expires, date time format that is used     * for more http servers. Can be overridden via Configuration     * @since 5.1     */    public static final String HTTP_EXPIRES_HEADER_FORMAT = "EEE, dd MMM yyyy HH:mm:ss z";}
原创粉丝点击