Googleマップの色とアイコンをオリジナルに変更して、Webサイトに埋め込み

1. Googleマップとは

Googleマップとは、米Googleが提供する無料のデジタル地図サービスであり、経路案内、店舗検索、ストリートビューなどの機能を持っています。パソコンやスマートフォンから、世界中の地図やリアルタイムの交通情報を簡単に確認できます。

WebサイトではアクセスマップなどにGoogleマップをよく使用します。しかし、デフォルトのGoogleマップでは、Webサイトデザインに合ないことがあります。今回は、Google APIを使用して、Googleマップアイコンをオリジナルに変更して、Webサイトに埋め込みする方法を紹介します。

2. Google APIとは

Google APIとは、Googleが提供するさまざまなサービス機能Google MapsYouTubeGoogle Cloudなど)を、外部のアプリウェブサイトから利用できるようにする仕組みのことです。

3. 主なGoogle API

Google Maps API

Google Maps API とは、Googleマップの機能を自分のウェブサイトやアプリに組み込むための仕組みです。主な機能として、地図の表示ルート検索場所の検索ができます。利用には設定が必要です。

Google Cloud APIs

Google Cloud APIs とは、Google Cloud の各種サービスをプログラムから操作・連携するためのウェブインターフェースWeb API)の総称です。コンピューティングストレージAI・機械学習などの機能をアプリに追加できます。

Google Workspace API

Google Workspace APIとは、GmailGoogleドライブカレンダーなどのGoogle製アプリの機能データを、外部のプログラムやシステムから操作・連携できるようにする仕組みです。Gmailでの自動メール送受信スプレッドシートのデータ更新ユーザー管理などを自動化できます。

4. Google cloud consoleにログイン

それでは、Google Cloud consoleにログインして、作業を進めていきます。

Google Cloud consoleとは、Google Cloudの各種サービスやリソースを一元管理するためのウェブベースの管理画面です。主な機能として、プロジェクトの作成利用料金の確認アクセス権の管理が行えます。

今回は、プロジェクト作成課金アカウント作成をした状態から説明していきます。

5. Maps JavaScript API有効

まずは、マップを作成する準備をします。Maps JavaScript APIを有効にして、APIキーを特定のWebサイトに制限をかけます。

まずGoogle Cloud Consoleにログインします。メニューからAPIとサービスライブラリをクリックします。検索ボックスに、Maps JavaScript APIと入力します。Maps JavaScript APIが表示されるので、有効にします。

メニューからAPIとサービスライブラリをクリック

Maps JavaScript APIを有効

6. APIキーを特定のWebサイトに制限

APIキーを特定のWebサイトに制限する方法を紹介します。Maps JavaScript APIのメニューからAPIとサービス認証情報をクリックします。設定するAPIキーをクリックします。

アプリケーションの制限ウェブサイトに設定します。ウェブサイトAddボタンをクリックして、使用するWebサイトのドメインを入力して、保存ボタンをクリックします。URLの最後を/*に設定することで、指定ドメイン内の全てのパスで使用できます。

APIとサービス認証情報をクリック

設定するAPIキーをクリックします。

アプリケーションの制限ウェブサイトに設定

ウェブサイトAddボタンをクリック

使用するWebサイトドメインを入力し、保存ボタンをクリック

7. Googleマップのスタイルを作成

次に、Googleマップのスタイルを作成します。マップID作成、地図スタイル作成、マップにスタイル反映の3段階で作成していきます。

7-1. マップID作成

まず、マップIDを作成します。メニューからGoogle Maps Platform概要をクリックします。左のメニューからマップ管理をクリックします。上のマップIDを作成ボタンをクリックします。新しいマップID作成ページが表示されます。

名前に任意の名前を入力します。地図の種類は、JavaScriptに設定します。ベクターのラジオボタンにチェックを入れ、保存ボタンをクリックします。これでマップIDが作成されました。

Google Maps Platform概要をクリック

マップIDを作成ボタンをクリック

名前に任意の名前を入力し、地図の種類JavaScriptに設定し、ベクターのラジオボタンにチェックを入れ、保存ボタンをクリック

マップIDが作成される

7-2. 地図のスタイルを作成

次に地図のスタイルを作成します。メニューの地図のスタイルをクリックします。スタイルを作成ボタンをクリックします。モードライトに設定し、オプションのテーマモノクロをチェックし、カスタマイズボタンをクリックします。

地図のスタイルページの、スタイルを作成ボタンをクリック

モードライトに設定し、オプションのテーマモノクロをチェックし、カスタマイズボタンをクリック

7-3. 地図のスタイル設定

地図のスタイル設定をしていきます。左の検索ボックス公園と入力します。右側に公園の設定項目が表示されるので、塗りつぶしの色ピンの塗りつぶしの色テキストの塗りつぶしの色レッドに設定します。同じようにゴルフコーススポーツ複合施設スポーツ競技場の色もレッドに設定します。

左の検索ボックス公園と入力

塗りつぶしの色ピンの塗りつぶしの色テキストの塗りつぶしの色レッドに設定

ゴルフコーススポーツ複合施設スポーツ競技場の色もレッドに設定

次に、左のメニューのエンターテイメントをクリックします。項目が表示されるので、歴史にゆかりがある場所博物館塗りつぶしの色ピンの塗りつぶしの色テキストの塗りつぶしの色レッドに設定します。右上の保存ボタンをクリックします。これでスタイル作成完了です。

歴史にゆかりがある場所博物館塗りつぶしの色ピンの塗りつぶしの色テキストの塗りつぶしの色レッドに設定

右上の保存ボタンをクリックします。これでスタイル作成完了

7-4. マップのスタイルを変更

マップのスタイルを作成したものに変更します。マップの管理をクリックし、スタイルを変更したいマップの名前をクリックします。ライトモード鉛筆マークをクリックします。作成した地図スタイルが表示されるので、選択し、完了ボタンをクリックします。これで、マップのスタイルが変更されます。

マップの管理をクリックし、スタイルを変更したいマップの名前をクリック

ライトモード鉛筆マークをクリックし、作成した地図スタイルを選択し、完了ボタンをクリック

マップのスタイルが変更

8. HTMLに埋め込み

作成したマップをHTMLに埋め込みます。まずは、完成図です。マップの中心にロゴ吹き出しで入れています。作成したスタイルのマップが表示されます。

8-1. HTML

まずHTMLに地図を描画したいdivタグにIDを指定します。Google Maps JavaScript API を読み込むためのスクリプトを記述します。

<!-- 地図を描画するコンテナ。高さはCSSで指定します -->
<div id="map"></div>

<!--
  Google Maps JavaScript API の読み込みスクリプト
  - key: Google Cloud で発行した API キーを指定してください
  - v: 利用するバージョン。特に理由がなければ "weekly" のままで大丈夫です
  この読み込みで、JavaScript 側から google.maps.importLibrary(...) が使えるようになります
-->
<script>
  (g=>{var h,a,k,p="The Google Maps JavaScript API",c="google",l="importLibrary",q="__ib__",m=document,b=window;b=b[c]||(b[c]={});var d=b.maps||(b.maps={}),r=new Set,e=new URLSearchParams,u=()=>h||(h=new Promise(async(f,n)=>{await (a=m.createElement("script"));e.set("libraries",[...r]+"");for(k in g)e.set(k.replace(/[A-Z]/g,t=>"_"+t[0].toLowerCase()),g[k]);e.set("callback",c+".maps."+q);a.src=`https://maps.${c}apis.com/maps/api/js?`+e;d[q]=f;a.onerror=()=>h=n(Error(p+" could not load."));a.nonce=m.querySelector("script[nonce]")?.nonce||"";m.head.append(a)}));d[l]?console.warn(p+" only loads once. Ignoring:",g):d[l]=(f,...n)=>r.add(f)&&u().then(()=>d[l](f,...n))})({
    key: "YOUR_API_KEY",
    v: "weekly",
  });
</script>

8-2. CSS

まずmapで、地図を表示する大きさを指定します。gm-marker吹き出しのスタイルを指定します。ロゴの大きさは5emに指定しました。

/* マップ */
#map{
  width: 100vw;
  height: 70vh;
}

/* 吹き出しの共通スタイル */
.gm-marker {
  position: absolute;
  left: 0;
  top: 0;
  padding: 7px;
  opacity: 0.9;
  transform: translate(-50%, calc(-100% - 9px)); /* 下辺の中央(しっぽ先)を座標に合わせる */
}

/* しっぽ(三角形) */
.gm-marker::after {
  content: "";
  display: block;
  position: absolute;
  left: 50%;
  bottom: -9px;
  width: 10px;
  height: 10px;
  clip-path: polygon(0 0, 100% 0, 50% 100%);
  transform: translateX(-50%);
}

/* カラー */
.gm-marker.is-origin,
.gm-marker.is-origin::after {
  background: #333;
}

/* ロゴ */
.gm-marker-ttl img{
  width: 5em;
  height: auto;
}

8-3. JavaScript

JavaScriptファイルを作成し、HTMLに読み込みます。MAP_IDに作成したマップIDを入力します。ORIJIN座標を入力します。

(async () => {
  /* =========================
    設定
    ========================= */
  const MAP_ID = "YOUR_MAP_ID"; // Cloud Console で作成した Map ID
  const ORIGIN = { lat: 36.69308924617705, lng: 137.19187501011473 }; // 座標
  const DEFAULT_ZOOM = 15; // PC画面の初期表示の拡大レベル
  const MOBILE_ZOOM = 14; // スマホ画面(幅<=767px)の初期表示の拡大レベル

  /* =========================
    ライブラリ読み込み(新方式)
    ========================= */
  const { Map, Polyline } = await google.maps.importLibrary("maps");
  const { AdvancedMarkerElement } = await google.maps.importLibrary("marker");

  /* =========================
    マップ生成
    - 初期表示の拡大レベルは matchMedia で初期判定
    - centerは中点
    ========================= */
	
  const map = new Map(document.getElementById("map"), {
    zoom: window.matchMedia("(max-width: 767px)").matches ? MOBILE_ZOOM : DEFAULT_ZOOM, // 地図の拡大レベル(数値が大きいほど拡大)
    center: {
      lat: 36.69308924617705,
      lng: 137.19187501011473
    }, // 地図の初期表示位置(中心座標)
    mapId: MAP_ID, // 使用するマップスタイルのID(Cloud Consoleで発行)
    zoomControl: true, // ズームボタンの表示(+ / -)
    cameraControl: false, // 新しいカメラコントロールUIの表示(ズーム+上下左右移動)
    mapTypeControl: false, // 地図/航空写真などの切替UIの表示
    scaleControl: false, // 縮尺バーの表示(1kmスケールなど)
    streetViewControl: false, // ストリートビュー用アイコンの表示(人型),
    clickableIcons: false // ランドマークや建物クリック時の吹き出しの表示
  });

  function createMarker(className) {
    const el = document.createElement("div");
    el.className = `gm-marker ${className}`;
    el.innerHTML = `
		<div class="gm-marker-ttl"><img src="images/common/cxg_logo.svg"></div>
    `;
    return el;
  }
  const markerOrigin = createMarker("is-origin");

  // 出発地点のカスタムマーカーを追加
  new AdvancedMarkerElement({
    map, // 表示する対象の地図オブジェクト
    position: ORIGIN, // マーカーを置く緯度経度
    content: markerOrigin, // 吹き出しHTML要素(カスタムマーカーの中身)
    collisionBehavior: google.maps.CollisionBehavior.OPTIONAL_AND_HIDES_LOWER_PRIORITY
    // 重なり時の表示優先度:駅名ラベル等よりこのマーカーを優先表示
  });

})();

9. まとめ

以上で今回の説明は終了です。今回のデザインはあくまで一例で、Webサイトに合わせて色々変更することができます。施設や道路など細かく指定して色変更ができるので大変便利です。

このほかに、出発地と目的地を指定して、ルート表示をすることもできます。WebサイトでGoogleマップを導入する場合は、Google APIで、デザイン的なマップを作成してはいかがでしょうか。