Mapbox GL JSでカスタムマーカーを追加する
このチュートリアルでは、Mapbox GL JSを使用して指定された場所にカスタムマーカーを追加するインタラクティブなウェブマップを構築する方法を学びます。また、これらのマーカーをクリックしたときに情報を表示するポップアップを追加します。
最終的なマップは次のようになります:
前提条件
このガイドに従うために必要なもの:
- フロントエンドの知識:フロントエンド開発(HTML、CSS、JavaScript)に多少慣れていること
- Mapboxアカウント:無料アカウントにサインアップまたはログインしてください account.mapbox.com.
- IDE / コードエディタ:Visual StudioまたはSublime Textなどのプログラムを使用してHTMLファイルを編集します。
また、追加のガイダンスのために関連するビデオチュートリアルをご覧になることをお勧めします。
チュートリアルに従わずにコードサンプル全体をコピーしたい場合は、ページの下部にあるコードスニペットを参照してください。
ステップ1:HTMLファイルを作成する
新しいHTMLファイルを作成し、index.html
という名前を付けます。
ステップ2:マップを初期化する
index.html
ファイルにコードを追加してマップを初期化します。
- コードエディタで
index.html
ファイルを開きます。 - 次のコードをコピーしてファイルに貼り付けます。
- 貼り付けた後、
mapboxgl.accessToken
が公開アクセス トークンに割り当てられていることを確認してください。この値はpk
で始まります。YOUR_MAPBOX_ACCESS_TOKEN
と表示されている場合は、アカウントにログインしてコードスニペットを再度コピーします。トークンはログイン中にコ ードスニペットに自動的に追加されます。
- ブラウザで
index.html
ファイルを開くと、デフォルトのMapbox Globe(地球儀)が表示されます。
<!doctype html>
<html lang="ja">
<head>
<meta charset="utf-8" />
<title>Mapbox GL JSでカスタムマーカーを追加する</title>
<meta name="viewport" content="width=device-width, initial-scale=1" />
<link
href="https://fonts.googleapis.com/css?family=Open+Sans"
rel="stylesheet"
/>
<script src="https://api.tiles.mapbox.com/mapbox-gl-js/v3.3.0/mapbox-gl.js"></script>
<link
href="https://api.tiles.mapbox.com/mapbox-gl-js/v3.3.0/mapbox-gl.css"
rel="stylesheet"
/>
<style>
body {
margin: 0;
padding: 0;
}
#map {
position: absolute;
top: 0;
bottom: 0;
width: 100%;
}
<!--ステップ5-3のコードはここに入ります-->
<!--ステップ7のコードはここに入ります-->
</style>
</head>
<body>
<div id="map"></div>
<script>
mapboxgl.accessToken = 'YOUR_MAPBOX_ACCESS_TOKEN';
//ステップ3のコードはここに入ります
const map = new mapboxgl.Map({
container: 'map',
style: 'mapbox://styles/mapbox/light-v11',
center: [-96, 37.8],
zoom: 3
});
//ステップ4のコードはここに入ります
</script>
</body>
</html>
上記のとおり、Mapbox GL JS の Map
はいくつかのオプションを定義してインスタンス化されています:
container
: マップが表示されるページ上の<div>
要素のid
。 この 場合、<div>
のid
は'map'
です。style
: マップ スタイルのスタイル URL。この場合、スタイル URLmapbox://styles/mapbox/light-11
を持つ Mapbox Light マップを使用します。center
:[経度, 緯度]
形式の地図の初期の中心点。zoom
: マップの初期ズーム レベル。
ステップ3:GeoJSONデータを読み込む
次に、GeoJSON オブジェクトを作成して、マーカーをマップ上のどこに表示するかを決定しましょう。
GeoJSONは、ポイント、ラインストリング、ポリゴンなどのジオメトリとその関連データプロパティを保存できるWebフレンドリーな空間データ形式です。次の手順に従って、GeoJSON 形式のポイント データを使用してマーカーの配置場所を決定します。
- コード内の
// ステップ3のコードはここに入ります
と書かれている箇所を見つけます。 - 次のコードスニペットをコピーして貼り付け、コメント行を置き換えます。
const geojson = {
type: 'FeatureCollection',
features: [
{
type: 'Feature',
geometry: {
type: 'Point',
coordinates: [-77.032, 38.913]
},
properties: {
title: 'Mapbox',
description: 'ワシントンD.C.'
}
},
{
type: 'Feature',
geometry: {
type: 'Point',
coordinates: [-122.414, 37.776]
},
properties: {
title: 'Mapbox',
description: 'サンフランシスコ、カリフォルニア州'
}
}
]
};
多くのGeoJSONデータがある場合は、インラインで追加するのではなく外部ファイルとして読み込むとよいでしょう。リモートでホストされている場合はそのURLにリンクするか、ローカルまたはサードパーティのAPIからロードするためにfetchを利用することができます。
ステップ4:デフォルトのマーカーを地図に追加する
GeoJSONデータ内の各ポイントにマーカーを作成して添付しましょう。 ここではデフォルトのマーカーを使用し、ステップ5でマーカーをカスタマイズします。
次の手順に従います:
- マーカーを追加するために、次 のコードをコピーして貼り付け、
//ステップ4のコードはここに入ります
と書かれている箇所に置き換えます。- これはスクリプト内の
Map
オブジェクトのインスタンス化の終わりの後、</script>
タグの前にあります。
- これはスクリプト内の
index.html
ファイルを保存して、ブラウザを更新し、地図の東海岸と西海岸に配置された2つのデフォルトマーカーを表示します。
// マーカーを地図に追加
for (const feature of geojson.features) {
// ステップ5-1のコードはここに入ります
// 各機能のためのマーカーを作成し地図に追加
new mapboxgl.Marker().setLngLat(feature.geometry.coordinates).addTo(map); // この行をステップ5-2のコードに置き換えてください
// ステップ6のコードはここに入ります
}
あなたのデフォルトのマーカーは、以下の画像のように表示されます:
ステップ5:マーカーをカスタマイズしスタイルを設定する
デフォルトのマーカーを作成したので、カスタムHTML要素を追加して外観を制御できます。