leaflet:map
差分
このページの2つのバージョン間の差分を表示します。
| 両方とも前のリビジョン前のリビジョン次のリビジョン | 前のリビジョン | ||
| leaflet:map [2018/09/11 09:27] – 管理者 | leaflet:map [2018/09/12 10:08] (現在) – [説明] 管理者 | ||
|---|---|---|---|
| 行 1: | 行 1: | ||
| + | [[: | ||
| + | ====== Leaflet - OpenStreetMap表示 ====== | ||
| + | Leaflet v1系を使用してOpenStreetMapを表示します。 | ||
| + | |||
| + | 注意:「Leaflet勉強のための試作プログラムなので間違っている可能性があります」「DokuWikiは個別にヘッダを編集できないので通常とは少し違う構造になっています」 | ||
| + | ---- | ||
| + | ===== デモ ===== | ||
| + | 東京を中心とした地図が表示されます。 | ||
| + | |||
| + | < | ||
| + | <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); | ||
| + | |||
| + | L.control.scale({imperial: | ||
| + | | ||
| + | mymap.setView([35.6896, | ||
| + | }); | ||
| + | </ | ||
| + | </ | ||
| + | |||
| + | |||
| + | |||
| + | < | ||
| + | <script async src="// | ||
| + | <!-- respon_0 --> | ||
| + | <ins class=" | ||
| + | | ||
| + | | ||
| + | | ||
| + | | ||
| + | < | ||
| + | (adsbygoogle = window.adsbygoogle || []).push({}); | ||
| + | </ | ||
| + | </ | ||
| + | |||
| + | |||
| + | |||
| + | |||
| + | ---- | ||
| + | ===== ソースコード ===== | ||
| + | <code javascript> | ||
| + | <!-- 1.マップを表示するための空のDIV要素 --> | ||
| + | <div id=" | ||
| + | |||
| + | <!-- 2.leafletのライブラリを読み込み --> | ||
| + | <script src=" | ||
| + | |||
| + | <!-- 3.leflet用の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(" | ||
| + | |||
| + | var mymap; // | ||
| + | |||
| + | // | ||
| + | function addOnload(evtFunc){ | ||
| + | if(window.addEventListener) { | ||
| + | window.addEventListener(' | ||
| + | } else if(window.attachEvent){ //IE用 | ||
| + | window.attachEvent(' | ||
| + | } else { | ||
| + | // | ||
| + | } | ||
| + | } | ||
| + | |||
| + | addOnload(function(){ | ||
| + | |||
| + | // | ||
| + | mymap = L.map(' | ||
| + | |||
| + | // | ||
| + | L.tileLayer(' | ||
| + | maxZoom: 18, | ||
| + | attribution: | ||
| + | }).addTo(mymap); | ||
| + | |||
| + | // | ||
| + | L.control.scale({imperial: | ||
| + | |||
| + | // | ||
| + | mymap.setView([35.6896, | ||
| + | }); | ||
| + | </ | ||
| + | </ | ||
| + | |||
| + | ---- | ||
| + | ===== DokuWiki用の特殊設定 ===== | ||
| + | DokuWikiで表示するために一般とは少し異なる点が2つあります。 | ||
| + | |||
| + | 「3番」のLeaflet用のCSS読込 | ||
| + | |||
| + | 本来CSSはHEAD内でロードすべきですが、DokuWikiではページ別にヘッダを編集できないためJavaScriptでBODY中で取得しています。通常のウェブサイトで使用する場合は下記のコード3番のかわりにヘッダ内に記述します。 | ||
| + | <code html> | ||
| + | <link rel=" | ||
| + | </ | ||
| + | |||
| + | 「5番」ページがロードされてからマップを処理を開始 | ||
| + | |||
| + | CSSを後読みしているため、何もせずマップ作成するとCSSが適用される前にマップが出来てしまうため表示が崩れます。表示が崩れないようページやCSSがロードされた後にマップの処理開始するようにしています。通常なら '' | ||
| + | |||
| + | |||
| + | < | ||
| + | <script async src="// | ||
| + | <!-- respon_0 --> | ||
| + | <ins class=" | ||
| + | | ||
| + | | ||
| + | | ||
| + | | ||
| + | < | ||
| + | (adsbygoogle = window.adsbygoogle || []).push({}); | ||
| + | </ | ||
| + | </ | ||
| + | |||
| + | |||
| + | ---- | ||
| + | ===== 説明 ===== | ||
| + | |||
| + | (1)マップを表示したい場所に下記のHTMLタグを挿入します。id名をキーとしてマップが表示されます | ||
| + | <code html> | ||
| + | <div id=" | ||
| + | </ | ||
| + | |||
| + | (2)Leafletを読み込みます。 | ||
| + | |||
| + | (3)Leaflet用のCSS読込(上記参照) | ||
| + | |||
| + | (4)マップ用インスタンス変数をグローバル変数とします。現時点ではグローバル変数にする意味はありませんがグローバル化しておくとHTMLや外部関数からマップを操作したりマップの状態を取得する事ができるのでカスタマイズする時に役立ちます。 | ||
| + | <code javascript> | ||
| + | var mymap; | ||
| + | </ | ||
| + | |||
| + | (5)window.onload ページがロードされてからマップを処理します(上記参照) | ||
| + | |||
| + | (6)マップオブジェクトをインスタンス化、1番のdiv要素のidと関連付けしてmymapという名前でマップを制御します。 | ||
| + | <code javascript> | ||
| + | mymap = L.map(' | ||
| + | //変数 = L.map(マップ用DIVのid名); | ||
| + | </ | ||
| + | |||
| + | (7)タイルサーバーの設定と著作権表示 | ||
| + | Leaflet自身は地図データを持っていないので地図画像を入手できるタイルサーバーが必要です。ここで使用しているタイルサーバーは[[https:// | ||
| + | <code javascript> | ||
| + | // | ||
| + | L.tileLayer(' | ||
| + | maxZoom: 18, | ||
| + | attribution: | ||
| + | }).addTo(mymap); | ||
| + | </ | ||
| + | |||
| + | (8)マップにスケールバーと追加します。スケールバーが不要な場合は削除して下さい、 | ||
| + | <code javascript> | ||
| + | L.control.scale({imperial: | ||
| + | // | ||
| + | // | ||
| + | </ | ||
| + | |||
| + | |||
| + | (9)地図の中心座標と倍率をセットすると地図が表示されます。 | ||
| + | <code javascript> | ||
| + | mymap.setView([35.6896, | ||
| + | // | ||
| + | </ | ||
