osmdroid を使って OpenStreetMap から オフライン地図用のタイルを取得する


osmdroid を使ってAndroid に オフライン地図を表示する
の続きです

CacheManager クラス

タイルのキャシュを管理するためのクラスです。

参考 : Cache Manager

OSMサーバーからタイル画像をダウンロードし、オフライン用のタイルファイルを作成するメッソッドがある。

downloadAreaAsync(Context ctx, BoundingBox bb, final int zoomMin, final int zoomMax, final CacheManagerCallback callback)

CacheManagerCallback のメソッド

  • onTaskComplete()
    成功した時に呼ばれる

  • onTaskFailed(int errors)
    失敗した時に呼ばれる

  • updateProgress(int progress, int currentZoomLevel, int zoomMin, int zoomMax)
    定期的に呼ばれるので、途中経過を表示するのに役立つ

  • downloadStarted()
    ダウンロードが開始された時に呼ばれる

  • setPossibleTilesInArea(int total) {
    ダウンロードが始まる直前に呼ばれる

基本的な使い方

//String outputName : 出力ファイルのパス名
// 例 /storage/emulated/0/osmdroid/archive.sqlite

        // MapView から表示範囲を取得する
        BoundingBox bb = mMapView.getBoundingBox();

// ダウンロードする
 SqliteArchiveTileWriter writer =new SqliteArchiveTileWriter(outputName);
CacheManager mgr = new CacheManager(mMapView, writer);
                    mgr.downloadAreaAsync( context, bb, zoommin, zoommax, new CacheManager.CacheManagerCallback() {
                    // コールバックの処理
                    });

ズームレベルを指定する UI を追加する

// SeekBar sb;シークバーの view

// MapView からズームレベルを取得して、シークバーの最大値を設定する
    int max = (max)mMapView.getMaxZoomLevel();
    sb.setMax( max);

// シークバーから指定されたズームレベルを取得する
    int zoom =sb.getProgress();

スクリーンショット

範囲を選択するための地図

パラメータを指定するためのダイアログ

上のシークバーは、最小ズーム。下は最大ズーム。

github にソースを公開した