
はじめまして、鮭とばです。
webでよく使われているのはGoogle Mapの埋め込みだと思いますが、今回はGoogle Mapをカスタマイズして独自のマーカー等を動的に作成して表示する事を試してみました。
前提
下記は用意できているものとする。
- Googleアカウント(GoogleCloudPlatform利用可、プロジェクト作成済み)
- テスト環境(HTMLとJavascriptが試せればOK)
事前準備
APIキー作成
①GoogleMapsPlatform>APIとサービスに遷移
②Maps JavaScript API を有効にする

③KeysからAPIキーを作成

マップID作成
①GoogleMapsPlatform>マップ管理に遷移
②「マップIDを作成」を押し、作成する(今回はMapsJavaScriptAPIで利用するので地図の種類はJavaScriptを選択)

実装
準備が完了したので実際にテスト環境でコードを記述して試してみます。
Google Maps API の読み込み
従来は1つ目のコードで読み込みをするのですが、現在は推奨の読み込み方法が変わり2つ目のコードに変わったようです。version指定やbootstrapのパラメータ指定が増えた模様。
// 従来の読み込み方法
<script src="https://maps.google.com/maps/api/js?key={APIキーを記述}&language=ja"></script>
// 推奨読み込み方法
<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: "{APIキーを記述}",
v: "weekly",
// Use the \'v\' parameter to indicate the version to use (weekly, beta, alpha, etc.).
// Add other bootstrap parameters as needed, using camel case.
});
</script>
MapsJavaScriptAPIで地図を生成
HTMLに地図を埋め込む用の要素を用意する
// MAP表示する場所に下記タグを追加
<div id="map"></div>
JSで用意した要素にMapsJavaScriptAPIで地図を生成する。
マーカーはこの時に生成したMapオブジェクトに追加します。
$(function(){
let map;
async function initMap() {
const position = { lat: 35.658581, lng: 139.745433 };
const { Map } = await google.maps.importLibrary("maps");
const { AdvancedMarkerElement } = await google.maps.importLibrary("marker");
map = new Map($("#map"), {
zoom: 12,
center: position,
mapId: "ee48d442f8bdea3c",
});
const marker = new AdvancedMarkerElement({
map: map,
position: position,
title: "東京タワー",
});
const marker2 = new AdvancedMarkerElement({
map: map,
position: { lat: 35.710139, lng: 139.81083 },
title: "スカイツリー",
});
}
initMap();
});
上記で実装してHTMLを表示してみると下記のようにマーカーが2つある地図が表示されます。

まとめ
今回はカスタマイズしたGoogleMap表示を試してみましたが、まだまだ序盤でもっとカスタマイズできる部分はあるので活用できる場面はあるのかもしれません。
問題の1つかもしれませんが、埋め込みと違ってAPIを利用する場合は費用が発生します。
従来は1 ヶ月あたり 200 米ドルくらい無料で利用できたのですが、今はサービス毎のSKUで無料範囲が変わるようですので、間違って高額の支払いが発生するような事がないよう気を付けて利用しましょう。