leaflet:divicon
差分
このページの2つのバージョン間の差分を表示します。
| 両方とも前のリビジョン前のリビジョン次のリビジョン | 前のリビジョン | ||
| leaflet:divicon [2018/09/11 11:03] – 管理者 | leaflet:divicon [2018/09/11 13:32] (現在) – 管理者 | ||
|---|---|---|---|
| 行 1: | 行 1: | ||
| + | [[: | ||
| + | ====== Leaflet 地図に文字列を表示する ====== | ||
| + | Leaflet 1系を使用してマーカーアイコンのかわりに地図上にテキストを表示します。 | ||
| + | |||
| + | 注意:「Leaflet勉強のための試作プログラムなので間違っている可能性があります」「DokuWikiは個別にヘッダを編集できないので通常とは少し違う構造になっています」 | ||
| + | ---- | ||
| + | ===== デモ ===== | ||
| + | マップ上にアイコンの替わりにテキストを表示できますが、次のような点から使い勝手はよくありません。 | ||
| + | |||
| + | * ズームを変更しても文字の大きさは変化しないので。ズームを広域にすると東京都という文字で日本が隠れてしまいます。 | ||
| + | * iconSizeを与えると表示領域が固定化され長い文字などは枠内に収まりません。 | ||
| + | * 逆にiconSizeを与えないと千葉県のように縦書きになります。 | ||
| + | * iconSizeを与えず横書きにするには、tableとスタイルシートにwhite-space: | ||
| + | |||
| + | 使えるシーンはズーム固定で、文字列が決まっていて短い場合などに限られそうです。 | ||
| + | |||
| + | < | ||
| + | < | ||
| + | .divicon1{background: | ||
| + | .divicon2{color: | ||
| + | .divicon3{background: | ||
| + | .divicon3b{background:# | ||
| + | </ | ||
| + | |||
| + | <div id=" | ||
| + | |||
| + | <script src=" | ||
| + | |||
| + | < | ||
| + | /* 外部CSSの読み込み用 */ | ||
| + | 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); | ||
| + | |||
| + | // | ||
| + | var divIcon1 = L.divIcon({ | ||
| + | html: ' | ||
| + | className: ' | ||
| + | iconSize: [80,30], | ||
| + | iconAnchor: [40,15], | ||
| + | popupAnchor: | ||
| + | }); | ||
| + | var divIcon2 = L.divIcon({ | ||
| + | html: ' | ||
| + | className: ' | ||
| + | }); | ||
| + | var divIcon3 = L.divIcon({ | ||
| + | html: '< | ||
| + | className: ' | ||
| + | iconSize: [0,0] | ||
| + | }); | ||
| + | | ||
| + | L.marker([35.6896, | ||
| + | L.marker([35.6050, | ||
| + | L.marker([35.8572, | ||
| + | |||
| + | mymap.setView([35.6896, | ||
| + | |||
| + | }); | ||
| + | </ | ||
| + | </ | ||
| + | |||
| + | |||
| + | < | ||
| + | <script async src="// | ||
| + | <!-- respon_0 --> | ||
| + | <ins class=" | ||
| + | | ||
| + | | ||
| + | | ||
| + | | ||
| + | < | ||
| + | (adsbygoogle = window.adsbygoogle || []).push({}); | ||
| + | </ | ||
| + | </ | ||
| + | |||
| + | |||
| + | ---- | ||
| + | ===== ソースコード ===== | ||
| + | |||
| + | <code javascript> | ||
| + | <!-- テキスト装飾用のスタイルシート --> | ||
| + | < | ||
| + | .divicon1{background: | ||
| + | .divicon2{color: | ||
| + | .divicon3{background: | ||
| + | .divicon3b{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); | ||
| + | |||
| + | |||
| + | // | ||
| + | var divIcon1 = L.divIcon({ | ||
| + | html: ' | ||
| + | className: ' | ||
| + | iconSize: [80,30], | ||
| + | iconAnchor: [40,15], | ||
| + | popupAnchor: | ||
| + | }); | ||
| + | var divIcon2 = L.divIcon({ | ||
| + | html: ' | ||
| + | className: ' | ||
| + | }); | ||
| + | var divIcon3 = L.divIcon({ | ||
| + | html: '< | ||
| + | className: ' | ||
| + | iconSize: [0,0] | ||
| + | }); | ||
| + | |||
| + | L.marker([35.6896, | ||
| + | L.marker([35.6050, | ||
| + | L.marker([35.8572, | ||
| + | |||
| + | |||
| + | mymap.setView([35.6896, | ||
| + | }); | ||
| + | </ | ||
| + | </ | ||
| + | |||
| + | |||
| + | < | ||
| + | <script async src="// | ||
| + | <!-- respon_0 --> | ||
| + | <ins class=" | ||
| + | | ||
| + | | ||
| + | | ||
| + | | ||
| + | < | ||
| + | (adsbygoogle = window.adsbygoogle || []).push({}); | ||
| + | </ | ||
| + | </ | ||
| + | |||
| + | |||
| + | ---- | ||
| + | ===== 説明 ===== | ||
| + | 基本的な部分は[[leaflet: | ||
| + | |||
| + | L.divIconで表示する文字と装飾用のClass名(=divicon1)をセットします。あとのiconSize・iconAnchor・popupAnchorはアイコンと同じです。iconSizeを指定した場合は文字列が長いかったり大きいと正しく表示できません。逆にiconSizeを指定しないと縦向きに表示されます。要注意です。個人的には埼玉県の例のようにtableでラップしてwhite-space: | ||
| + | <code javascript> | ||
| + | var divIcon1 = L.divIcon({ | ||
| + | html: ' | ||
| + | className: ' | ||
| + | iconSize: [80,30], // | ||
| + | iconAnchor: [40,15], // | ||
| + | popupAnchor: | ||
| + | }); | ||
| + | </ | ||
| + | |||
| + | アイコンのスタイルをセットします。 | ||
| + | <code html> | ||
| + | .divicon1{background: | ||
| + | </ | ||
| + | |||
| + | |||
| + | |||
| + | |||
