osmbonuspack を使ってAndroid の OpenStreetMap 地図に KML をインポートする


osmdroid を使って OpenStreetMap を Android に表示する
の続きです

osmbonuspack

osmdroid を 機能拡張するライブラリ。

Google Play にデモアプリが公開されている。

KML

Keyhole Markup Language の略で、
地理空間情報を XMLで記述したもの。
Google Earth や Google Maps などで使用されている。

KML をインポートするアプリを作る

osmbonuspack ライブラリを取り込む

build.gradle

allprojects {
    repositories {
        jcenter()
      mavenCentral() 
       maven { url "https://jitpack.io" } // 追加する
    }

app/build.gradle

dependencies {

    compile 'com.github.MKergall:osmbonuspack:6.5.2' // 追加する

AndroidManifestに permission を追加する

<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />

MainAvtivity

private void loadKml() {
    mContext = this;
        new KmlLoader().executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR);
} 

class KmlLoader extends AsyncTask<Void, Void, Void> {
        KmlDocument kmlDocument;

        @Override
        protected void onPreExecute() {
            super.onPreExecute();
        } 

        protected Void doInBackground(Void... voids) {
            kmlDocument = new KmlDocument();
            kmlDocument.parseKMLStream(getResources().openRawResource( R.raw.kmlfile), null);
    FolderOverlay kmlOverlay = (FolderOverlay)kmlDocument.mKmlRoot.buildOverlay(mMapView, null, null, kmlDocument);
        mMapView.getOverlays().add(kmlOverlay);
            return null;
        } 

        @Override
        protected void onPostExecute(Void aVoid) {
            mMapView.invalidate();
            BoundingBox bb = kmlDocument.mKmlRoot.getBoundingBox();
            mMapView.zoomToBoundingBox(bb, true);
            mMapView.getController().setCenter(bb.getCenter());
            super.onPostExecute(aVoid);
        } 

}

KML ファイルの入手と配置

下記から ParisTour.kml をダウンロードする

kmlfile.kml にリネームし、res/raw に配置する

スクリーンショット

github にソースを公開した