リーフレット(leaflet)は軽量、多機能、拡張性、スマホ対応している地図の機能を持った、JavaScriptライブラリです。マップ上をクリックしてレイヤーグループ(layerGroup)内のレイヤー(layer)を追加、レイヤーをクリックで削除する方法を確認します。
デモ
See the Pen leaflet 6 by logsuke (@design-list) on CodePen.
レイヤーグループの追加・削除
const osm = L.tileLayer('https://tile.openstreetmap.org/{z}/{x}/{y}.png', {
attribution: '© <a href="http://www.openstreetmap.org/copyright">OpenStreetMap</a>'
});
var baseLayers = {
"openstreetmap": osm,
}
const markers = L.layerGroup();
let check = 'Markers';
var overlays = {
"Markers": markers
}
var map = L.map('myMap', {
center: [32.639884, 130.987154],
zoom: 8,
maxZoom: 18,
layers: [osm, markers],
renderer: L.svg()
})
map.on('click', function (e) {
if (e.originalEvent.target.classList.contains('marker')) return
if (!check) {
return
} else if (check == 'Markers') {
var marker = L.circleMarker([e.latlng.lat, e.latlng.lng], {
radius: 50,
color: '#fff',
fillColor: '#5ac4f9b4',
fillOpacity: 1,
className: 'marker'
}).on('click', removeMarker);
markers.addLayer(marker)
}
});
map.on({
overlayadd: function (e) {
check = e.name
},
overlayremove: function (e) {
check = ''
}
});
function removeMarker(e) {
markers.removeLayer(this)
console.log(markers.getLayers())
}
var LayerControl = L.control.layers(baseLayers, overlays).addTo(map);
9 : markers レイヤーグループを定義
10 : markers レイヤーグループが表示中かを判定するための check 初期値で表示させるので、12: Markers を値に入れています。
11 ~ 13 : レイヤーコントロールに渡す配列を作成しときます。
19 : 初期レイヤー
23 ~ 37 : markers レイヤーグループが表示中に、マップ上のマーカーレイヤー以外の部分をクリックすると、マーカーレイヤーを markers レイヤーグループに追加。
39 ~ 46 : レイヤーコントロールでレイヤーをオン・オフさせたときのイベント、マーカーが表示中かを判定するための check に値を入れています。e.name = “Markers”
48 ~ 51 : マーカーレイヤーがクリックされたとき、markers レイヤーグループから削除。
53 : レイヤーコントロールにレイヤーを追加する。レイヤーコントロールはデフォルトで、地図の右上に表示されます。