Android で高德地图のズームイベントを監視する方法

Android アプリケーションで高德地图(Amap)SDK を使用する際、ユーザーによる地図のズーム操作を検知し、それに応じてマーカーやレイヤーを動的に更新したいケースはよくあります。この記事では、OnCameraChangeListener を活用してズームイベントを監視する実装方法を解説します。

高德地图 SDK のセットアップ

まず、モジュールレベルの build.gradle に以下の依存関係を追加します:

dependencies {
    implementation 'com.amap.api:3dmap:9.7.0' // 実際の最新バージョンに置き換えてください
}

次に、AndroidManifest.xml に必要な権限と API キーを設定します:

<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />

<application>
    <meta-data
        android:name="com.amap.api.v2.apikey"
        android:value="YOUR_AMAP_API_KEY" />
</application>

ズームイベントの監視

地図のカメラ変更(パン・ズーム・傾きなど)を監視するには、AMap オブジェクトに OnCameraChangeListener を設定します。ズームレベルの変化は、カメラ操作が完了したタイミングで取得するのが一般的です。

aMap.setOnCameraChangeListener(new AMap.OnCameraChangeListener() {
    @Override
    public void onCameraChange(CameraPosition position) {
        // カメラ移動中のコールバック(通常は無視)
    }

    @Override
    public void onCameraChangeFinish(CameraPosition position) {
        float currentZoom = position.zoom;
        adjustMapContent(currentZoom);
    }
});

onCameraChangeFinish メソッド内で現在のズームレベル(zoom)を取得し、必要に応じて地図上の要素を更新します。

実装例:ズームに応じたマーカー表示制御

以下は、ズームレベルに応じてマーカーの表示・非表示を切り替える例です:

private void adjustMapContent(float zoomLevel) {
    if (zoomLevel >= 12.0f) {
        showAllMarkers();
    } else {
        hideDenseMarkers();
    }
}

private void showAllMarkers() {
    // 全てのマーカーを表示
}

private void hideDenseMarkers() {
    // 密集しているマーカーを非表示にするなど
}

このようにすることで、ユーザー体験を損なわずに情報密度を適切にコントロールできます。

タグ: Amap Android MapView zoom-event camera-listener

7月5日 19:05 投稿