leaflet:layer
差分
このページの2つのバージョン間の差分を表示します。
| 両方とも前のリビジョン前のリビジョン次のリビジョン | 前のリビジョン | ||
| leaflet:layer [2018/09/12 09:26] – 管理者 | leaflet:layer [2018/09/13 14:39] (現在) – [説明] 管理者 | ||
|---|---|---|---|
| 行 1: | 行 1: | ||
| + | [[: | ||
| + | ====== Leaflet ズームでマーカー表示・非表示を切り替え ====== | ||
| + | ズームレベルによって地図上のマーカーを表示と非表示を切り替えます。 | ||
| + | |||
| + | 注意:「Leaflet勉強のための試作プログラムなので間違っている可能性があります」「DokuWikiは個別にヘッダを編集できないので通常とは少し違う構造になっています」 | ||
| + | ---- | ||
| + | ===== デモ ===== | ||
| + | ズームを変えるとマーカーが変化します。初期状態ではアイコンマーカーを表示し、広域ではアイコンを消して警告マーカーが表示されます。 | ||
| + | |||
| + | < | ||
| + | < | ||
| + | .divicon2{background:# | ||
| + | </ | ||
| + | |||
| + | |||
| + | <div id=" | ||
| + | <script src=" | ||
| + | < | ||
| + | function cssLoad(cssFile){ | ||
| + | if(document.all){ | ||
| + | document.createStyleSheet(cssFile); | ||
| + | }else{ | ||
| + | var link = document.createElement(" | ||
| + | link.rel = " | ||
| + | link.href = cssFile; | ||
| + | link.type = " | ||
| + | document.getElementsByTagName(' | ||
| + | } | ||
| + | } | ||
| + | cssLoad(" | ||
| + | |||
| + | function addOnload(evtFunc){ | ||
| + | if(window.addEventListener) { | ||
| + | window.addEventListener(' | ||
| + | } else if(window.attachEvent){ //IE用 | ||
| + | window.attachEvent(' | ||
| + | } else { | ||
| + | // | ||
| + | } | ||
| + | } | ||
| + | | ||
| + | var mymap; | ||
| + | addOnload(function(){ | ||
| + | mymap = L.map(' | ||
| + | L.tileLayer(' | ||
| + | maxZoom: 18, | ||
| + | attribution: | ||
| + | }).addTo(mymap); | ||
| + | |||
| + | |||
| + | // | ||
| + | iconMarkers = L.featureGroup(); | ||
| + | stopMarkers = L.featureGroup(); | ||
| + | |||
| + | // | ||
| + | iconMarkers.addLayer( L.marker([35.6896, | ||
| + | iconMarkers.addLayer( L.marker([35.6050, | ||
| + | iconMarkers.addLayer( L.marker([35.8572, | ||
| + | |||
| + | | ||
| + | // | ||
| + | var divIcon4 = L.divIcon({ | ||
| + | html: ' | ||
| + | className: ' | ||
| + | }); | ||
| + | |||
| + | // | ||
| + | var msgMarker = L.marker( [0,0],{ | ||
| + | icon: | ||
| + | zIndexOffset: | ||
| + | interactive: | ||
| + | }); | ||
| + | stopMarkers.addLayer( msgMarker ); | ||
| + | |||
| + | |||
| + | // | ||
| + | mymap.on(' | ||
| + | if (mymap.getZoom() >8){ // | ||
| + | mymap.removeLayer(stopMarkers); | ||
| + | mymap.addLayer(iconMarkers); | ||
| + | } else { // | ||
| + | mymap.removeLayer(iconMarkers); | ||
| + | mymap.addLayer(stopMarkers); | ||
| + | } | ||
| + | }); | ||
| + | |||
| + | |||
| + | mymap.setView([35.6896, | ||
| + | |||
| + | msgMarker.setLatLng(mymap.getCenter()); | ||
| + | |||
| + | // | ||
| + | mymap.on(' | ||
| + | msgMarker.setLatLng(mymap.getCenter()); | ||
| + | }); | ||
| + | | ||
| + | | ||
| + | }); | ||
| + | </ | ||
| + | </ | ||
| + | |||
| + | |||
| + | |||
| + | < | ||
| + | <script async src="// | ||
| + | <!-- respon_0 --> | ||
| + | <ins class=" | ||
| + | | ||
| + | | ||
| + | | ||
| + | | ||
| + | < | ||
| + | (adsbygoogle = window.adsbygoogle || []).push({}); | ||
| + | </ | ||
| + | </ | ||
| + | |||
| + | ---- | ||
| + | ===== ソースコード ===== | ||
| + | 主にコメント行がある部分が[[map]]からの変更部分です。 | ||
| + | |||
| + | HTML部分 | ||
| + | <code html> | ||
| + | <!-- 警告表示用のスタイル設定 --> | ||
| + | < | ||
| + | .divicon2{background:# | ||
| + | </ | ||
| + | |||
| + | |||
| + | <div id=" | ||
| + | </ | ||
| + | JavaScript部分 | ||
| + | <code javascript> | ||
| + | <script src=" | ||
| + | < | ||
| + | function cssLoad(cssFile){ | ||
| + | if(document.all){ | ||
| + | document.createStyleSheet(cssFile); | ||
| + | }else{ | ||
| + | var link = document.createElement(" | ||
| + | link.rel = " | ||
| + | link.href = cssFile; | ||
| + | link.type = " | ||
| + | document.getElementsByTagName(' | ||
| + | } | ||
| + | } | ||
| + | cssLoad(" | ||
| + | function addOnload(evtFunc){ | ||
| + | if(window.addEventListener) { | ||
| + | window.addEventListener(' | ||
| + | } else if(window.attachEvent){ //IE用 | ||
| + | window.attachEvent(' | ||
| + | } else { | ||
| + | // | ||
| + | } | ||
| + | } | ||
| + | var mymap; | ||
| + | addOnload(function(){ | ||
| + | mymap = L.map(' | ||
| + | mymap = L.map(' | ||
| + | L.tileLayer(' | ||
| + | maxZoom: 18, | ||
| + | attribution: | ||
| + | }).addTo(mymap); | ||
| + | |||
| + | | ||
| + | // | ||
| + | iconMarkers = L.featureGroup(); | ||
| + | stopMarkers = L.featureGroup(); | ||
| + | |||
| + | | ||
| + | // | ||
| + | iconMarkers.addLayer( L.marker([35.6896, | ||
| + | iconMarkers.addLayer( L.marker([35.6050, | ||
| + | iconMarkers.addLayer( L.marker([35.8572, | ||
| + | |||
| + | | ||
| + | // | ||
| + | var divIcon4 = L.divIcon({ | ||
| + | html: ' | ||
| + | className: ' | ||
| + | }); | ||
| + | |||
| + | // | ||
| + | var msgMarker = L.marker( [0,0],{ | ||
| + | icon: | ||
| + | zIndexOffset: | ||
| + | interactive: | ||
| + | }); | ||
| + | |||
| + | // | ||
| + | stopMarkers.addLayer( msgMarker ); | ||
| + | |||
| + | |||
| + | // | ||
| + | mymap.on(' | ||
| + | if (mymap.getZoom() >8){ // | ||
| + | mymap.removeLayer(stopMarkers); | ||
| + | mymap.addLayer(iconMarkers); | ||
| + | } else { // | ||
| + | mymap.removeLayer(iconMarkers); | ||
| + | mymap.addLayer(stopMarkers); | ||
| + | } | ||
| + | }); | ||
| + | |||
| + | |||
| + | mymap.setView([35.6896, | ||
| + | |||
| + | | ||
| + | // | ||
| + | msgMarker.setLatLng(mymap.getCenter()); | ||
| + | |||
| + | // | ||
| + | mymap.on(' | ||
| + | msgMarker.setLatLng(mymap.getCenter()); | ||
| + | }); | ||
| + | |||
| + | | ||
| + | }); | ||
| + | </ | ||
| + | </ | ||
| + | |||
| + | |||
| + | |||
| + | < | ||
| + | <script async src="// | ||
| + | <!-- respon_0 --> | ||
| + | <ins class=" | ||
| + | | ||
| + | | ||
| + | | ||
| + | | ||
| + | < | ||
| + | (adsbygoogle = window.adsbygoogle || []).push({}); | ||
| + | </ | ||
| + | </ | ||
| + | |||
| + | |||
| + | ---- | ||
| + | ===== 説明 ===== | ||
| + | |||
| + | マップの基本部分については[[map]]をご覧ください。 | ||
| + | |||
| + | 複数のマーカーを一回で切り替えるためL.featureGroupでマーカーをグループ化する変数を準備します。 | ||
| + | <code javascript> | ||
| + | iconMarkers = L.featureGroup(); | ||
| + | stopMarkers = L.featureGroup(); | ||
| + | </ | ||
| + | |||
| + | |||
| + | 通常のアイコンマーカーを '' | ||
| + | <code javascript> | ||
| + | iconMarkers.addLayer( L.marker([35.6896, | ||
| + | iconMarkers.addLayer( L.marker([35.6050, | ||
| + | iconMarkers.addLayer( L.marker([35.8572, | ||
| + | </ | ||
| + | |||
| + | |||
| + | 警告用マーカーを '' | ||
| + | <code html> | ||
| + | /* スタイルシート */ | ||
| + | .divicon2{background:# | ||
| + | </ | ||
| + | <code javascript> | ||
| + | // | ||
| + | var divIcon4 = L.divIcon({ | ||
| + | html: ' | ||
| + | className: ' | ||
| + | }); | ||
| + | // | ||
| + | var msgMarker = L.marker( [0,0],{ | ||
| + | icon: | ||
| + | zIndexOffset: | ||
| + | interactive: | ||
| + | }); | ||
| + | stopMarkers.addLayer( msgMarker ); | ||
| + | </ | ||
| + | |||
| + | 警告用マーカーをマップ中心に表示するための処理をserViewの後に挿入 | ||
| + | <code javascript> | ||
| + | // | ||
| + | msgMarker.setLatLng(mymap.getCenter()); | ||
| + | |||
| + | // | ||
| + | mymap.on(' | ||
| + | msgMarker.setLatLng(mymap.getCenter()); | ||
| + | }); | ||
| + | </ | ||
| + | |||
| + | ズーム変更時のイベントで表示するグループを切り替え。 '' | ||
| + | <code javascript> | ||
| + | mymap.on(' | ||
| + | if (mymap.getZoom() >8){ // | ||
| + | mymap.removeLayer(stopMarkers); | ||
| + | mymap.addLayer(iconMarkers); | ||
| + | } else { // | ||
| + | mymap.removeLayer(iconMarkers); | ||
| + | mymap.addLayer(stopMarkers); | ||
| + | } | ||
| + | }); | ||
| + | </ | ||
| + | |||
| + | |||
| + | |||
| + | |||
| + | |||
| + | |||
| + | |||
