内容へ移動
あちあち情報局
趣味や日曜プログラムなどを書いています
ユーザ用ツール
ログイン
サイト用ツール
検索
ツール
文書の表示
以前のリビジョン
バックリンク
最近の変更
メディアマネージャー
サイトマップ
ログイン
>
最近の変更
メディアマネージャー
サイトマップ
現在位置:
トップページ
»
🌏Leaflet(マップAPI)
»
Leaflet - OpenStreetMap表示
leaflet:map
この文書は読取専用です。文書のソースを閲覧することは可能ですが、変更はできません。もし変更したい場合は管理者に連絡してください。
[[:programming_start]] ====== Leaflet - OpenStreetMap表示 ====== Leaflet v1系を使用してOpenStreetMapを表示します。 注意:「Leaflet勉強のための試作プログラムなので間違っている可能性があります」「DokuWikiは個別にヘッダを編集できないので通常とは少し違う構造になっています」 ---- ===== デモ ===== 東京を中心とした地図が表示されます。 <html> <div id="mapid" style="width: 100%; height: 400px;"></div> <script src="https://www.achiachi.net/blog/_outside/leaflet/v1/leaflet.js"></script> <script> function cssLoad(cssFile){ if(document.all){ document.createStyleSheet(cssFile); }else{ var link = document.createElement("link"); link.rel = "stylesheet"; link.href = cssFile; link.type = "text/css" document.getElementsByTagName('head')[0].appendChild(link); } } cssLoad("https://www.achiachi.net/blog/_outside/leaflet/v1/leaflet.css"); function addOnload(evtFunc){ if(window.addEventListener) { window.addEventListener('load', evtFunc, false); } else if(window.attachEvent){ //IE用 window.attachEvent('onload', evtFunc); } else { //alert('window.onload エラー'); } } var mymap; addOnload(function(){ mymap = L.map('mapid'); L.tileLayer('https://c.tile.openstreetmap.org/{z}/{x}/{y}.png', { maxZoom: 18, attribution: 'Map data © <a href="https://www.openstreetmap.org/copyright" target="_blank">OpenStreetMap</a> contributors, ' }).addTo(mymap); L.control.scale({imperial:false}).addTo(mymap); mymap.setView([35.6896, 139.6918], 8); }); </script> </html> <html> <script async src="//pagead2.googlesyndication.com/pagead/js/adsbygoogle.js"></script> <!-- respon_0 --> <ins class="adsbygoogle" style="display:block" data-ad-client="ca-pub-9251612436023685" data-ad-slot="1409739163" data-ad-format="auto"></ins> <script> (adsbygoogle = window.adsbygoogle || []).push({}); </script> </html> ---- ===== ソースコード ===== <code javascript> <!-- 1.マップを表示するための空のDIV要素 --> <div id="mapid" style="width: 100%; height: 400px;"></div> <!-- 2.leafletのライブラリを読み込み --> <script src="https://【自分のサーバーアドレスとパス】/leaflet/v1/leaflet.js"></script> <!-- 3.leflet用のcssを読み込む --> <script> function cssLoad(cssFile){ if(document.all){ document.createStyleSheet(cssFile); }else{ var link = document.createElement("link"); link.rel = "stylesheet"; link.href = cssFile; link.type = "text/css" document.getElementsByTagName('head')[0].appendChild(link); } } cssLoad("https://【自分のサーバーアドレスとパス】/leaflet/v1/leaflet.css"); var mymap; //4.マップ用インスタンス変数(グローバル変数) //5.ページがロードされてからマップを処理を開始(window.onload代用) function addOnload(evtFunc){ if(window.addEventListener) { window.addEventListener('load', evtFunc, false); } else if(window.attachEvent){ //IE用 window.attachEvent('onload', evtFunc); } else { //alert('window.onload エラー'); } } addOnload(function(){ //6.マップオブジェクトをインスタンス化 mymap = L.map('mapid'); //7.タイルサーバーの設定と著作権表示 L.tileLayer('https://【タイルサーバーのアドレスとパス】/{z}/{x}/{y}.png', { maxZoom: 18, attribution: 'Map data © <a href="【タイルサーバーの著作権アドレス】" target="_blank">【タイルサーバーの著作者】</a> contributors, ' }).addTo(mymap); //8.マップにスケールバー追加 L.control.scale({imperial:false}).addTo(mymap); //9.マップの座標をズームをセットして表示 mymap.setView([35.6896, 139.6918], 8); }); </script> </code> ---- ===== DokuWiki用の特殊設定 ===== DokuWikiで表示するために一般とは少し異なる点が2つあります。 「3番」のLeaflet用のCSS読込 本来CSSはHEAD内でロードすべきですが、DokuWikiではページ別にヘッダを編集できないためJavaScriptでBODY中で取得しています。通常のウェブサイトで使用する場合は下記のコード3番のかわりにヘッダ内に記述します。 <code html> <link rel="stylesheet" type="text/css" href="http://【自分のサーバーアドレスとパス】leaflet/v1/leaflet.css"> </code> 「5番」ページがロードされてからマップを処理を開始 CSSを後読みしているため、何もせずマップ作成するとCSSが適用される前にマップが出来てしまうため表示が崩れます。表示が崩れないようページやCSSがロードされた後にマップの処理開始するようにしています。通常なら ''window.onload = function() { 処理 }'' でも良いのですが、他にwindow.onloadがあると衝突するので衝突回避用の ''addOnload''という関数を作って ''addOnload(function(){ 処理 });''で代用させています。 <html> <script async src="//pagead2.googlesyndication.com/pagead/js/adsbygoogle.js"></script> <!-- respon_0 --> <ins class="adsbygoogle" style="display:block" data-ad-client="ca-pub-9251612436023685" data-ad-slot="1409739163" data-ad-format="auto"></ins> <script> (adsbygoogle = window.adsbygoogle || []).push({}); </script> </html> ---- ===== 説明 ===== (1)マップを表示したい場所に下記のHTMLタグを挿入します。id名をキーとしてマップが表示されます <code html> <div id="mapid" style="width: 100%; height: 400px;"></div> </code> (2)Leafletを読み込みます。 (3)Leaflet用のCSS読込(上記参照) (4)マップ用インスタンス変数をグローバル変数とします。現時点ではグローバル変数にする意味はありませんがグローバル化しておくとHTMLや外部関数からマップを操作したりマップの状態を取得する事ができるのでカスタマイズする時に役立ちます。 <code javascript> var mymap; </code> (5)window.onload ページがロードされてからマップを処理します(上記参照) (6)マップオブジェクトをインスタンス化、1番のdiv要素のidと関連付けしてmymapという名前でマップを制御します。 <code javascript> mymap = L.map('mapid'); //変数 = L.map(マップ用DIVのid名); </code> (7)タイルサーバーの設定と著作権表示 Leaflet自身は地図データを持っていないので地図画像を入手できるタイルサーバーが必要です。ここで使用しているタイルサーバーは[[https://www.openstreetmap.org/|OpenStreetMap]]ですが利用条件がありますので使用する場合は確認して下さい。リクエスト回数が多くなる場合などはサードパーティーのタイルサーバーを探すか自分自身でタイルサーバーを準備する必要があります。 <code javascript> //OpenStreetMapの場合は下記ような設定と著作権表示になります L.tileLayer('https://c.tile.openstreetmap.org/{z}/{x}/{y}.png', { maxZoom: 18, attribution: 'Map data © <a href="https://www.openstreetmap.org/copyright" target="_blank">OpenStreetMap</a> contributors, ' }).addTo(mymap); </code> (8)マップにスケールバーと追加します。スケールバーが不要な場合は削除して下さい、 <code javascript> L.control.scale({imperial:false}).addTo(mymap); //L.control.scale({mertric:false}).addTo(mymap); とするとマイル表示になります //L.control.scale().addTo(mymap);とするとマイルとメートルの両方出ます </code> (9)地図の中心座標と倍率をセットすると地図が表示されます。 <code javascript> mymap.setView([35.6896, 139.6918], 8); //mymap.setView([ 緯度,経度 ], ズーム); </code>
leaflet/map.txt
· 最終更新: 2018/09/12 10:08 by
管理者
ページ用ツール
文書の表示
以前のリビジョン
バックリンク
文書の先頭へ