実現したいこと
Leafletでマーカーを削除する。
removeLayerを用いてマーカーを削除したいと考えているのですが、うまく削除することができません。どのようにすればレイヤーを変更した際に対象でないマーカーを削除することができるでしょうか。もちろん、removeLayerを用いずに上記を実現させる書き方があればそちらでも構いません。
該当のソースコード
HTML
1<!DOCTYPE html> 2<html lang="ja"> 3<head> 4 <meta charset = "utf-8"> 5 <meta name = "viewport" content = "width = device-width, initial-scale = 1"> 6 <link rel = "stylesheet" href = "https://unpkg.com/leaflet@1.3.0/dist/leaflet.css" /> 7 <script src = "https://unpkg.com/leaflet@1.3.0/dist/leaflet.js"></script> 8 <title>マップ</title> 9 <style> 10 html, body, #map { 11 height: 100%; 12 margin: 0; 13 padding: 0; 14 } 15 </style> 16</head> 17<body> 18 <div id = "map"></div> 19 <script> 20 features = { 21 Tokyo: [ 22 ["東京", [35.6896, 139.6918], "地理院地図"] 23 ], 24 Kanagawa: [ 25 ["川崎", [35.5299, 139.7024], "OpenStreetMap"], 26 ["横浜", [35.4477, 139.6425], "地理院地図"], 27 ], 28 Chiba: [ 29 ["千葉", [35.6050, 140.1234], "地理院地図"] 30 ], 31 }; 32 var map = L.map('map').setView([35.6896, 139.6918],10); 33 var gsi =L.tileLayer('https://cyberjapandata.gsi.go.jp/xyz/std/{z}/{x}/{y}.png', {minZoom:2,maxZoom:18,attribution: "<a href='https://maps.gsi.go.jp/development/ichiran.html' target='_blank'>地理院タイル</a>"}); 34 var osm = L.tileLayer('http://tile.openstreetmap.jp/{z}/{x}/{y}.png', {attribution: "<a href='#' target='_blank'>OpenStreetMap</a> contributors" }).addTo(map); 35 L.control.layers({ 36 "地理院地図": gsi, 37 "OpenStreetMap": osm 38 }).addTo(map); 39 var tileSelectName; 40 map.on('baselayerchange',function(e){ 41 tileSelectName = e.name; 42 tileChange(); 43 }); 44 function tileChange(){ 45 Object.keys(features).forEach(function(value){ 46 var category = this[value]; 47 for (var i = 0; i < category.length; i++) { 48 var marker = L.marker(category[i][1], { title: category[i][0]}); 49 if(tileSelectName === category[i][2]){ 50 map.addLayer(marker); 51 } else { 52 map.removeLayer(marker); 53 } 54 } 55 },features); 56 } 57 </script> 58</body> 59</html>
回答1件
あなたの回答
tips
プレビュー