【AndroidでSkobblerを使う】地図を表示する

このエントリーを Google ブックマーク に追加
Pocket
[`yahoo` not found]

前回はSkobblerを使うための準備をしました。
今回はソースコードを書いて地図が表示するまでを書きます。

  1. assetsの中に保存した「SKMaps.zip」はローカルフォルダに解答する必要があります。下記のコードをMySkobblerのActivityに追記します。
        new SKPrepareMapTextureThread(this, mapResDirPath, "SKMaps.zip", this).start();
    
    ここで各引数は下記のとおりです。
    • android.content.Context
    • コピー先のパス
    • コピーするzip
    • コピーの成否を通知する「com.skobbler.ngx.SKPrepareMapTextureListener」
  2. SkobblerのAPI-KEYをアカウント情報から取得する。
  3. 下記のmeta情報をAndroidManifest.xmlのタグの下に追加します。
    <meta-data android:name="com.skobbler.ngx.API_KEY" android:value="ここを自分のAPI-KEYに書き換える"/>
    
  4. ライブラリを初期化します。
    設定内容の説明は省略しますが、地図のスタイルやナビゲーションの音声言語等を設定します。
        SKMapsInitSettings initMapSettings = new SKMapsInitSettings();
        initMapSettings.setMapResourcesPaths(mapResourcesDirPath,
        new SKMapViewStyle(mapResourcesDirPath + "daystyle/", "daystyle.json"));
        final SKAdvisorSettings advisorSettings = initMapSettings.getAdvisorSettings();
        advisorSettings.setAdvisorConfigPath(mapResourcesDirPath + "Advisor");
        advisorSettings.setResourcePath(mapResourcesDirPath + "Advisor/Languages");
        advisorSettings.setLanguage(SKAdvisorSettings.SKAdvisorLanguage.LANGUAGE_EN);
        advisorSettings.setAdvisorVoice("en");
        initMapSettings.setAdvisorSettings(advisorSettings);
        SKMaps.getInstance().initializeSKMaps(this, initMapSettings);
    
  5. 地図を表示します。
    地図を表示するときはSKMapFragmentを使います、このクラスは通常のFragmentと同様に扱い画面に組み込むことができます。
    また、SKMapFragment#setMapSurfaceListenerで地図に関するイベントの通知を受けとることができます。このリスナーについては次回説明します。
    SKMapFragment mapFragment = new SKMapFragment();
    mapFragment.setMapSurfaceListener(this);
    FragmentTransaction fragmentTransaction = getFragmentManager().beginTransaction();
    fragmentTransaction.add(R.id.container, mapFragment).commit();
    [/code]
    
ここまでで地図を表示できるようになっています。
次回はSKMapSurfaceListenerの各種メソッドについて説明します。 ここまでのActivityのソースコードを記載します。
public class MainActivity extends AppCompatActivity implements SKPrepareMapTextureListener ,SKMapSurfaceListener {
    private SKMapSurfaceView mapView;
    String mapResourcesDirPath;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        mapResourcesDirPath = getFilesDir().getPath() + "/" + "SKMaps/";
        if (!new File(mapResourcesDirPath).exists()) {
            new SKPrepareMapTextureThread(this, mapResourcesDirPath, "SKMaps.zip", this).start();
        }else {
            initMapSetting();
        }
    }

    @Override
    public void onMapTexturesPrepared(boolean b) {
        if(b){
            initMapSetting();
        }
    }

    private void initMapSetting() {
        SKMapsInitSettings initMapSettings = new SKMapsInitSettings();
        initMapSettings.setMapResourcesPaths(mapResourcesDirPath,
        new SKMapViewStyle(mapResourcesDirPath + "daystyle/", "daystyle.json"));
        final SKAdvisorSettings advisorSettings = initMapSettings.getAdvisorSettings();
        advisorSettings.setAdvisorConfigPath(mapResourcesDirPath + "Advisor");
        advisorSettings.setResourcePath(mapResourcesDirPath + "Advisor/Languages");
        advisorSettings.setLanguage(SKAdvisorSettings.SKAdvisorLanguage.LANGUAGE_EN);
        advisorSettings.setAdvisorVoice("en");
        initMapSettings.setAdvisorSettings(advisorSettings);
        SKMaps.getInstance().initializeSKMaps(this, initMapSettings);
        SKMapFragment mapFragment = new SKMapFragment();
        mapFragment.setMapSurfaceListener(this);
        FragmentTransaction fragmentTransaction = getFragmentManager().beginTransaction();
        fragmentTransaction.add(R.id.container, mapFragment).commit();
    }

    @Override
    protected void onPause() {
        super.onPause();
        if(mapView != null){
            mapView.onPause();
        }
    }

    @Override
    protected void onResume() {
        super.onResume();
        if(mapView != null){
            mapView.onResume();
        }
    }

    @Override
    public void onSurfaceCreated(SKMapViewHolder skMapViewHolder) {
        mapView = skMapViewHolder.getMapSurfaceView();
    }

    @Override
    public void onActionPan() {}

    @Override
    public void onActionZoom() {}

    @Override
    public void onMapRegionChanged(SKCoordinateRegion skCoordinateRegion) {}

    @Override
    public void onMapRegionChangeStarted(SKCoordinateRegion skCoordinateRegion) {}

    @Override
    public void onMapRegionChangeEnded(SKCoordinateRegion skCoordinateRegion) {}

    @Override
    public void onDoubleTap(SKScreenPoint skScreenPoint) {}

    @Override
    public void onSingleTap(SKScreenPoint skScreenPoint) {}

    @Override
    public void onRotateMap() {}

    @Override
    public void onLongPress(SKScreenPoint skScreenPoint) {}

    @Override
    public void onInternetConnectionNeeded() {}

    @Override
    public void onMapActionDown(SKScreenPoint skScreenPoint) {}

    @Override
    public void onMapActionUp(SKScreenPoint skScreenPoint) {}

    @Override
    public void onPOIClusterSelected(SKPOICluster skpoiCluster) {}

    @Override
    public void onMapPOISelected(SKMapPOI skMapPOI) {}

    @Override
    public void onAnnotationSelected(SKAnnotation skAnnotation) {}

    @Override
    public void onCustomPOISelected(SKMapCustomPOI skMapCustomPOI) {}

    @Override
    public void onCompassSelected() {}

    @Override
    public void onCurrentPositionSelected() {}

    @Override
    public void onObjectSelected(int i) {}

    @Override
    public void onInternationalisationCalled(int i) {}

    @Override
    public void onBoundingBoxImageRendered(int i) {}

    @Override
    public void onGLInitializationError(String s) {}

    @Override
    public void onScreenshotReady(Bitmap bitmap) {}
}

Androidゲームプログラミング A to Z

新品価格
¥4,968から
(2017/2/27 22:58時点)


AndroidエンジニアのためのモダンJava

新品価格
¥3,456から
(2017/2/27 23:01時点)


AndroidNDKネイティブプログラミング第2版

中古価格
¥1,893から
(2017/2/28 00:04時点)


Androidアプリ開発逆引きレシピ (PROGRAMMER’S RECiPE)

新品価格
¥3,024から
(2017/2/28 00:06時点)


Android Studio ではじめる Android プログラミング入門 第3版 Android Studio 2対応

新品価格
¥3,240から
(2017/2/28 00:11時点)


アプリを作ろう! Android入門 Android Studio版 Android5対応

新品価格
¥2,160から
(2017/2/28 00:31時点)


コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

*

日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)