カテゴリー
SugiBlog Webエンジニアのためのお役立ちTips

GoogleMap Android API v2 使い方#01

この記事は最終更新日から1年以上経過しています。

今回は地図の基本設定と、カメラ位置とズームレベルの変更の方法をご紹介します。
Android2.x系、3.1.x系以上の2パターンを紹介しています。

API v2の導入方法については以下をご覧ください。
[Google Maps Android API v2]

2014-08-18 追記
GooglePlay開発者サービス(GooglePlayServices)がAndroid2.2はサポートしなくなりました。
そのため、Android2.2ではGoogleMap Android API v2が利用できません。

Android2.x系でも動作するように作成する場合

メインとなるFragmentActivityを継承したクラスに機能を実装していきます。

public class MainActivity extends FragmentActivity

変数の宣言

private GoogleMap mMap;

マップオブジェクトを生成する関数を作成

private void setUpMapIfNeeded() {

    if (mMap == null) {

        mMap = ((SupportMapFragment) getSupportFragmentManager().findFragmentById(R.id.map))
                .getMap();

    }

}

作成した関数をActivityのonCreateで実行します。

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    setUpMapIfNeeded();
}
マップの各種設定を指定する場合

まず変数の宣言

private GoogleMap mMap;
private UiSettings mUiSettings;


先程作成した関数を修正します。

private void setUpMapIfNeeded() {

    if (mMap == null) {

        mMap = ((SupportMapFragment) getSupportFragmentManager().findFragmentById(R.id.map))
                .getMap();

        if (mMap != null) {
            mUiSettings = mMap.getUiSettings();
            mUiSettings.setCompassEnabled(true);
            mUiSettings.setMyLocationButtonEnabled(false);
            mUiSettings.setRotateGesturesEnabled(false);
        }

    }

}
setCompassEnabled 北を指すコンパス表示の有効/無効を設定します。
setMyLocationButtonEnabled 現在地ボタンの表示有無を設定します。
※現在地が取得可能な場合に限ります。
setRotateGesturesEnabled 回転ジェスチャーを有効にするかどうかを設定します。

UiSettingsの詳細は
http://developer.android.com/intl/ja/reference/com/google/android/gms/maps/UiSettings.html

レイアウトXML

<?xml version="1.0" encoding="utf-8"?>
<fragment xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/map"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    class="com.google.android.gms.maps.SupportMapFragment" >

</fragment>
カメラ位置を変更する

指定した場所を指定したズームレベルで表示するときはcom.google.android.gms.maps.CameraUpdateを使います。

CameraUpdate cu = 
        CameraUpdateFactory.newLatLng(
                new LatLng(35.65858, 139.745433)); //東京タワー
mMap.moveCamera(cu);
mMap.animateCamera(CameraUpdateFactory.zoomTo(15));

APIレベル12(Android 3.1.x)以上をターゲットとする場合

Android 3.1.x以上をターゲットとする場合、FragmentActivityではなくActivityを継承します。

public class MainActivity extends Activity

変数の宣言

private GoogleMap mMap;

マップオブジェクトを生成する関数を作成
こちらもSupportMapFragmentではなくMapFragmentを使用します。(com.google.android.gms.maps.MapFragment)

private void setUpMapIfNeeded() {

    if (mMap == null) {

        mMap = ((MapFragment) getFragmentManager().findFragmentById(R.id.map))
                .getMap();

    }

}

レイアウトXMLは以下のようになります。

<?xml version="1.0" encoding="utf-8"?>
<fragment xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/map"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    class="com.google.android.gms.maps.MapFragment" >

</fragment>

GoogleMapOptionsを使用する場合

GoogleMapOptionsを使用する場合はMapFragmentのインスタンスを以下のように作成します。

// 登録したタグから MapFragment を取得する(デバイス回転などの再生成対策)
mMapFragment = (SupportMapFragment) getSupportFragmentManager()
        .findFragmentById(R.id.map);
if (mMapFragment == null) {
    // GoogleMapのオプションを設定する
    GoogleMapOptions options = new GoogleMapOptions();
    options.useViewLifecycleInFragment(false);
    options.zOrderOnTop(false);

    // MapFragment を作成する(デフォルトの GoogleMapOption の場合は引数無し)
    mMapFragment = SupportMapFragment.newInstance(options);
    getSupportFragmentManager().beginTransaction()
            .add(android.R.id.content, mMapFragment)
            .commit();
}

GoogleMapOptionsの詳細は
http://developer.android.com/intl/ja/reference/com/google/android/gms/maps/GoogleMapOptions.html

この記事がお役に立ちましたらシェアお願いします
2,546 views

コメントは受け付けていません。