react-native-maps を使って、アプリで地図を表示する2021/07/30

react-native-maps を使って、アプリで地図を表示する

タイトルの通り、Expo アプリで地図を表示する際の実装です。 「react-native-maps」 というパッケージを使って簡単に実装できます。そのメモです。

Android ではGoogle map Apiを利用することになるので、いくつか設定が必要になります。その辺りの説明を補足しています。

基本的には以下のドキュメントに従って進めていけばいいです。

https://docs.expo.dev/versions/latest/sdk/map-view/

概要

  • 実装 アプリ側の実装は、react-native-maps を利用して簡単にできます。指定した場所にマーカーをおいたり、ユーザーの地図上での操作イベントを取得したりできます。
  • 設定 Androidの場合はGoogle Map APIを利用するので設定が必要になります。

ざっくりとは以下の工程になります。

  1. 「Google API Manager でプロジェクト作成」
  2. 「Maps SDK for Android を有効にする」
  3. 「Play Store にて認証キーを取得」
  4. 「Credential を作成して設定」
  5. 「API key を app.json に追加」

iOS の場合はネイティブの地図機能があるので通常はそちらが利用されます。設定を行えばAndroidと同様に Google Map を使うこともできます。

詳細な手順を以下に紹介します。

パッケージ

react-native-mapsというパッケージを使って実装します。
https://github.com/react-native-maps/react-native-maps

Google Map API の設定

Google API Manager でプロジェクト作成

Google Cloud Platform にてプロジェクトを作成します。
https://console.developers.google.com/apis

アクセス量とかを確認できるので、アプリごとに作成しましょう。

Maps SDK for Android を有効にする

Google Cloud Platform の「APIとサービス」の「ライブラリ」にて、「Maps SDK for Android」 を有効にします。

APIライブラリ

「Maps SDK for Android」 を選択して「有効にする」ボタンを押しましょう。

Maps SDK for Android

Play Store にて認証キーを取得

Play Store にて、アプリごとに生成されるSHA-1 証明書のフィンガープリントをコピーします。
「リリース」の「設定」内「アプリの完全性」メニューにあります。

sha-1

ストアにアプリを登録していないと取得できません。デバッグ版でいいのでstore への登録・アップロードを先に済ませておきましょう。

Credential を作成して設定

Google Cloud Platform にてCredentialを設定してAPI Key を作成します。 「APIとサービス」の「認証情報」メニューにて、上部の「認証情報を作成」を選択します。

出てくるメニューの「APIキー」を選択し、キーを作成します。

認証情報の作成

不正な利用を避けるため、キーに制限をつけることができます。以下手順です。

  • アプリケーションの制限で「Androidアプリ」をチェック
  • Android アプリに使用を限定で、項目を追加してパッケージ名とSHA-1証明書のフィンガープリントを登録 アプリケーションの制限
  • API の制限で「Maps SDK for Android」を選択

APIの制限

  • 下部にある保存を選択して登録します。

上記で登録した「APIキー」を選択すると、API Key 文字列を確認できるのでコピーします。

API key を app.json に追加

上記の API Key を app.json の android.config.googleMaps.apiKey に設定します。

これでGoogle Map API を利用するために必要な設定は完了です。

iOS でも利用したい場合は上記の工程を「Maps SDK for iOS」に対してもう一度行うことになります。

アプリへの実装

設定ができたらあとは実装するだけです。たとえば緯度経度を使って場所を指定するならこんな感じです。

import MapView, { Marker } from "react-native-maps";

~~~

  const marker = {
    title: title,
    latlng: {
      latitude: Number(latitude),
      longitude: Number(longitude),
    },
  };

~~~

  return (
      <View style={styles.container}>
        <MapView
          style={styles.mapStyle}
          initialRegion={{
            latitude: marker.latlng.latitude,
            longitude: marker.latlng.longitude,
            latitudeDelta: 0.0024,
            longitudeDelta: 0.0024,
          }}>
          <Marker coordinate={marker.latlng} title={marker.title} />
        </MapView>
      </View>
  );

MapViewで地図のコンポーネントを表示します。initialRegion を渡すことで初期表示の場所を設定できます。

地図常にマーカーを設置することもできます。child としてMarkerを渡せばそこにマーカーを表示できます。位置はもちろん、タイトルを設定したり任意のコンポーネントを設定できます。

おわりに

アプリによっては地図を表示することで、もっと便利な機能になります。 react-native-maps を使えば簡単に実装できるのでおすすめです。

設定が少しややこしいですが Expo のドキュメントに詳しく書いてあるので、とても親切でした。

  • このエントリーをはてなブックマークに追加