[Android] Google Mapsを組み込んで、JSONスタイルで見た目をカスタマイズする方法

Androidアプリで地図を表示するとなると、多くの場合はGoogle Mapsを組み込みますよね。
ただ、デフォルトの見た目のままだと少し味気ない…ということもあると思います。
そこで今回は、Google MapsをAndroidに組み込み、さらにJSONスタイルを使って見た目を自由にカスタマイズする方法を紹介していきます。

スポンサーリンク

準備:Google Maps APIキーの取得

まずはGoogle Cloud ConsoleからMaps SDK for Androidを有効化し、APIキーを取得します。
取得したAPIキーは AndroidManifest.xml に設定します。


<meta-data
    android:name="com.google.android.geo.API_KEY"
    android:value="YOUR_API_KEY_HERE"/>

これでプロジェクトからGoogle Mapsを呼び出せるようになります。

依存関係の追加

次に、GradleにMaps用のライブラリを追加します。


implementation 'com.google.android.gms:play-services-maps:18.1.0'

これでMapsのクラスを使えるようになります。

レイアウトにMapFragmentを追加

地図を表示したい画面に SupportMapFragment を配置します。


<fragment
    android:id="@+id/map"
    android:name="com.google.android.gms.maps.SupportMapFragment"
    android:layout_width="match_parent"
    android:layout_height="match_parent"/>

これでUI上に地図の表示領域ができます。

Activityから地図を初期化

続いて、SupportMapFragment から地図を取得して初期化します。


class MapsActivity : AppCompatActivity(), OnMapReadyCallback {

    private lateinit var map: GoogleMap

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_maps)

        val mapFragment = supportFragmentManager
            .findFragmentById(R.id.map) as SupportMapFragment
        mapFragment.getMapAsync(this)
    }

    override fun onMapReady(googleMap: GoogleMap) {
        map = googleMap

        // サンプル:東京駅にピンを立てる
        val tokyo = LatLng(35.681236, 139.767125)
        map.addMarker(MarkerOptions().position(tokyo).title("東京駅"))
        map.moveCamera(CameraUpdateFactory.newLatLngZoom(tokyo, 14f))
    }
}

この時点で、地図が表示され、東京駅にマーカーが表示されるはずです。

地図の見た目をJSONでカスタマイズ

デフォルトのGoogle Mapsは見やすいのですが、アプリのテーマに合わせたいときや特定の情報を強調したいときはスタイルを変更すると便利です。
Maps SDKでは、JSONファイルを使って見た目を変更できます。

スタイルJSONの作成

例えば、夜間モード風にしたい場合は以下のようなJSONを res/raw/map_style.json に保存します。


[
  {
    "elementType": "geometry",
    "stylers": [
      { "color": "#212121" }
    ]
  },
  {
    "elementType": "labels.text.fill",
    "stylers": [
      { "color": "#757575" }
    ]
  },
  {
    "elementType": "labels.text.stroke",
    "stylers": [
      { "color": "#212121" }
    ]
  },
  {
    "featureType": "poi",
    "stylers": [
      { "visibility": "off" }
    ]
  }
]

コードからスタイルを適用

このJSONを読み込んで地図に反映します。


override fun onMapReady(googleMap: GoogleMap) {
    map = googleMap

    // JSONスタイルを適用
    try {
        val success = map.setMapStyle(
            MapStyleOptions.loadRawResourceStyle(this, R.raw.map_style)
        )
        if (!success) {
            Log.e("MapsActivity", "スタイルの適用に失敗しました")
        }
    } catch (e: Resources.NotFoundException) {
        e.printStackTrace()
    }

    val tokyo = LatLng(35.681236, 139.767125)
    map.addMarker(MarkerOptions().position(tokyo).title("東京駅"))
    map.moveCamera(CameraUpdateFactory.newLatLngZoom(tokyo, 14f))
}

これで、夜間モード風のカスタマイズが適用された地図が表示されます。
JSONの内容を変えれば、建物だけ強調したり、水辺を暗めにしたりと自由に調整できます。

まとめ

Google MapsをAndroidに組み込むのはそこまで難しくありませんが、デフォルトのままだと他のアプリと差別化しにくいですよね。
JSONスタイルを活用すると、アプリに合わせた世界観を持たせることができるのでおすすめです。

👉 今回は夜間モード風の例を紹介しましたが、カフェ専用マップや観光用アプリなどでは、目的に応じて強調表示する要素を変えるとさらに便利になります。

コメント

タイトルとURLをコピーしました