Leafletで地図を実装するデモ(3)




チュートリアル3番目のマーカーのカスタマイズを実装してみます。

今回の完成形はこちら。
デモ

画像ファイルはimgディレクトリに格納している前提とします。
以下のようにアイコン情報を作成し、マーカー作成時に指定すればアイコンが表示されます。

var greenIcon = L.icon({
    iconUrl: 'img/leaf-green.png',
    shadowUrl: 'img/leaf-shadow.png',

    iconSize:     [38, 95], // size of the icon
    shadowSize:   [50, 64], // size of the shadow
    iconAnchor:   [22, 94], // point of the icon which will correspond to marker's location
    shadowAnchor: [4, 62],  // the same for the shadow
    popupAnchor:  [-3, -76] // point from which the popup should open relative to the iconAnchor
});

// マップ表示部分は省略

L.marker([35.681236, 139.767125], {icon: greenIcon}).addTo(mymap);

アイコン作成時のパラメーターは以下となります。

iconUrlアイコン画像パスを設定。
shadowUrl影を利用する場合、画像パスを設定。必要な場合のみ設定。
iconSizeアイコン画像サイズ。
shadowSize影画像サイズ。必要な場合のみ設定。
iconAnchorアイコンのデフォルト座標からの相対座標。
shadowAnchor影のデフォルト座標からの相対座標。必要な場合のみ設定。
popupAnchorポップアップのデフォルト座標からの相対座標。必要な場合のみ設定。

同じ設定で複数のアイコンを表示したい場合、Iconクラスを継承したクラスを作成することで簡単に実装できます。

var LeafIcon = L.Icon.extend({
    options: {
        shadowUrl: 'img/leaf-shadow.png',
        iconSize: [38, 95], // size of the icon
        shadowSize: [50, 64], // size of the shadow
        iconAnchor: [22, 94], // point of the icon which will correspond to marker's location
        shadowAnchor: [4, 62],  // the same for the shadow
        popupAnchor: [-3, -76] // point from which the popup should open relative to the iconAnchor
    }
});

var greenIcon = new LeafIcon({iconUrl: 'img/leaf-green.png'}),
    redIcon = new LeafIcon({iconUrl: 'img/leaf-red.png'}),
    orangeIcon = new LeafIcon({iconUrl: 'img/leaf-orange.png'});
// マーカーを表示し、ポップアップも設定

// マップ表示部分は省略

var markerGreen = L.marker([35.681236, 139.767125], {icon: greenIcon}).addTo(mymap);
markerGreen.bindPopup("Hello world!
I am a green."); // メソッドチェーンも使える L.marker([35.681236, 139.778225], {icon: redIcon}).addTo(mymap).bindPopup("Hello world!
I am a red."); L.marker([35.681236, 139.789325], {icon: orangeIcon}).addTo(mymap).bindPopup("Hello world!
I am a orange.");

以上でアイコン変更に関するサンプルの作成は完了です。
デモページのソースは以下となります。
デモ

参考

Markers With Custom Icons
https://leafletjs.com/examples/custom-icons/