Previous Page Next Page

オープンソースによる地図表示(Leaflet編)5/9

2019/4/26 by T. Fujita

4、マーカーの表示

4-1、基本マーカーの表示

 まずは、基本地図である『Leaflet_Tutrial_101.html』を元に地図上にマーカーを表示させてみます。   以下に 表示例とそのソースファイルの内容を示します。  ここで表示するマーカーの位置はJR東京駅を指定していますが、表示するマーカーについては特に指定していませんのでデフォルトのマーカーが表示されます。  また、マーカーをクリックするとポップアップが表示され、JR東京駅へのリンクが可能なようにしました。  単独で基本マーカーを表示する場合は、 『 Leaflet_Tutrial_401.html 』をクリックして下さい。

       基本マーカーの表示例


       『 Leaflet_Tutrial_401.html 』のソースファイル内容
001  <!DOCTYPE html>
002  <html>
003  <head>
004      <title> Leaflet_Tutrial_401.html	2019/4/26	by T. Fujita </title>
005      <meta charset="utf-8" />
006      <link rel = "stylesheet" href = "https://unpkg.com/leaflet@1.4.0/dist/leaflet.css" />
007      <script src = "https://unpkg.com/leaflet@1.4.0/dist/leaflet.js"></script>
008      <script>
009
010      function init() {
011	     var Layer_401 = new Array(); 
012	     var map_401 = L.map('map_401').setView([35.65809922, 139.74135747], 8);
013	     mapLink = '<a href="https://openstreetmap.org">OpenStreetMap</a>';
014	         L.tileLayer(
015		     'https://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png', {
016		     attribution: 'Map data © ' + mapLink,
017		     maxZoom: 18
018	         }).addTo(map_401);
019	     Leaflet_Marker_401(); 
020
021	     function Leaflet_Marker_401()		// マーカー設置 
022	     { 
023		var Markers_shape = new Array(); 
024		var Markers_shape_pos = new Array(); 
025		var Markers_shape_nam = new Array(); 
026		var Markers_shape_lnk = new Array(); 
027		Markers_shape_pos[ 0 ] = [35.68109, 139.76717]; 
028		Markers_shape_nam[ 0 ] = "東京駅"; 
029		Markers_shape_lnk[ 0 ] = "<a href= 'https://www.jreast.co.jp/estation/stations/1039.html' target='_blank'>東京駅情報にリンク</a>"; 
030		Markers_shape[ 0 ] = L.marker([ Markers_shape_pos[ 0 ][ 0 ], Markers_shape_pos[ 0 ][ 1 ] ]); 
031		Markers_shape[ 0 ].bindPopup(Markers_shape_nam[ 0 ] + "<br>" + Markers_shape_lnk[ 0 ]).openPopup(); 
032		Layer_401[ 0 ] = Markers_shape[ 0 ]; 
033		Layer_401[ 0 ].addTo(map_401); 
034	     } 
035      }
036
037      </script>
038  </head>
039  <body onload="init()">
040      <div id="map_401" style="width: 100%; height: 400px; border: solid 1px"></div>
041  </body>
042  </html>

 ここで、赤字の部分がマーカー表示用の記述です。 11行目でマーカー用のレイヤーを新たに設定し、21行目から34行目でマーカーの設置位置やタイトル、リンク先等を指定しています。  なお、19行目で関数『Leaflet_Marker_401()』を呼び出してマーカーを表示させています。

4-2、複数マーカーの表示

 マーカーが一種類のみでは面白くありませんので、数種類のマーカーを追加してみます。  マーカーは、サンプルとしてPNG形式のアイコンを使用しましたが、JPEG形式でもGIF形式あるいはSVG形式でも同様です。  以下に 複数マーカーの表示例とそのソースファイルの内容を示します。  単独で複数マーカーを表示する場合は、『 Leaflet_Tutrial_402.html 』をクリックして下さい。
 なお、ここで使用しているアイコン素材は、 FLAT ICON DESIGN および ICOON MONO から取得しており、これらアイコン素材データの著作権は TopeconHeroes が保持しています。

       複数マーカーの表示例


 次の『Leaflet_Tutrial_402.html』において、赤字の部分がマーカーを追加した箇所です。 27行目でアイコンのURLを収容するための配列を準備し、それぞれアイコンについてサイズや表示位置(アンカー位置)、 ポップアップが表示される位置を指定しています。 なお、東京駅のマーカーについても変更しています。

       『 Leaflet_Tutrial_402.html 』のソースファイル内容
001  <!DOCTYPE html>
002  <html>
003  <head>
004      <title> Leaflet_Tutrial_402.html	2019/4/26	by T. Fujita </title>
005      <meta charset="utf-8" />
006      <link rel = "stylesheet" href = "https://unpkg.com/leaflet@1.4.0/dist/leaflet.css" />
007      <script src = "https://unpkg.com/leaflet@1.4.0/dist/leaflet.js"></script>
008      <script>
009
010      function init() {
011	     var Layer_402 = new Array();
012	     var map_402 = L.map('map_402').setView([35.0, 137.0], 6);
013	     mapLink = '<a href="https://openstreetmap.org">OpenStreetMap</a>';
014	     L.tileLayer(
015		'https://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png', {
016		attribution: 'Map data © ' + mapLink,
017		maxZoom: 18,
018	     }).addTo(map_402);
019	     Leaflet_Marker_402();
020
021	     function Leaflet_Marker_402()		// マーカー設置
022	     {
023		var Markers_shape = new Array();
024		var Markers_shape_pos = new Array();
025		var Markers_shape_nam = new Array();
026		var Markers_shape_lnk = new Array();
027		var Markers_shape_icn = new Array(); 
028	    Markers_shape_pos[ 0 ] = [35.68109, 139.76717];
029	    Markers_shape_nam[ 0 ] = "東京駅";
030	    Markers_shape_lnk[ 0 ] = "<a href= 'https://www.jreast.co.jp/estation/stations/1039.html' target='_blank'>東京駅情報にリンク</a>";
031	    Markers_shape_icn[ 0 ] = L.icon({ 
032		iconUrl: "../ICONS/Flat_Icons/s64_f_business_76_0nbg.png", 
033		iconSize: [32, 32], 
034		iconAnchor: [16, 32], 
035		popupAnchor: [0, -16] 
036	    }); 
037
038		Markers_shape_pos[ 1 ] = [34.98540, 135.75829]; 
039		Markers_shape_nam[ 1 ] = "京都駅"; 
040		Markers_shape_lnk[ 1 ] = "<a href= 'https://www.jr-odekake.net/eki/premises.php?id=0610116' target='_blank'>京都駅情報にリンク</a>"; 
041		Markers_shape_icn[ 1 ] = L.icon({ 
042		    iconUrl: "../ICONS/Flat_Icons/s64_f_traffic_45_0nbg.png", 
043		    iconSize: [32, 32], 
044		    iconAnchor: [0, 32], 
045		    popupAnchor: [16, -16] 
046		}); 
047
048		Markers_shape_pos[ 2 ] = [33.59010, 130.42065]; 
049		Markers_shape_nam[ 2 ] = "博多駅"; 
050		Markers_shape_lnk[ 2 ] = "<a href= 'https://www.jr-odekake.net/eki/premises.php?id=0910127' target='_blank'>博多駅情報にリンク</a>"; 
051		Markers_shape_icn[ 2 ] = L.icon({ 
052		    iconUrl: "../ICONS/BW_Icon/BW_Icons_64/icon_000220_64.png", 
053		    iconSize: [32, 32], 
054		    iconAnchor: [0, 32], 
055		    popupAnchor: [16, -16] 
056		}); 
057		for ( i = 0; i < Markers_shape_pos.length; i++ ) 
058		{ 
059		    if( Markers_shape_pos[ i ] != null ) { 
060			Markers_shape[ i ] = L.marker([ Markers_shape_pos[ i ][ 0 ], Markers_shape_pos[ i ][ 1 ] ], 
061			    {icon: Markers_shape_icn[ i ]}); 
062			Markers_shape[ i ].bindPopup(Markers_shape_nam[ i ] + "<br>" + Markers_shape_lnk[ i ]).openPopup(); 
063			Layer_402[ i ] = Markers_shape[ i ]; 
064			Layer_402[ i ].addTo(map_402); 
065		    } 
066		} 
067	    }
068	 }
069
070      </script>
071  </head>
072  <body onload="init()">
073      <div id="map_402" style="width: 100%; height: 400px; border: solid 1px"></div>
074   ここで使用しているアイコン素材は、<A HREF = "http://flat-icon-design.com/" target="_blank"> FLAT ICON DESIGN </A>および
075  <A HREF = "http://icooon-mono.com/" target="_blank"> ICOON MONO </A>から取得しており、<BR>
076  これらアイコン素材データの著作権は TopeconHeroes が保持しています。
077  </body>
078  </html>


4-3、移動可能マーカーの表示

 さらに、移動可能なマーカー(人型のアイコン)を追加してみましょう。  次の『 Leaflet_Tutrial_403.html 』のソースファイル内容で赤字の部分が移動可能マーカーを追加した箇所です。  以下に 移動可能マーカーの表示例とそのソースファイルの内容を示します。 単独で移動可能マーカーと地図を表示する場合は、 『 Leaflet_Tutrial_403.html 』をクリックして下さい。

       移動可能マーカーの表示例


       『 Leaflet_Tutrial_403.html 』のソースファイル内容
001  <!DOCTYPE html>
002  <html>
003  <head>
004      <title> Leaflet_Tutrial_403.html	2019/4/26	by T. Fujita </title>
005      <meta charset="utf-8" />
006      <link rel = "stylesheet" href = "https://unpkg.com/leaflet@1.4.0/dist/leaflet.css" />
007      <script src = "https://unpkg.com/leaflet@1.4.0/dist/leaflet.js"></script>
008      <script>
009
010      function init() {
011	     var Layer_403 = new Array();
012	     var map_403 = L.map('map_403').setView([35.0, 137.0], 6);
013	     mapLink = '<a href="https://openstreetmap.org">OpenStreetMap</a>';
014		L.tileLayer(
015		    'https://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png', {
016		    attribution: 'Map data © ' + mapLink,
017		    maxZoom: 18,
018		}).addTo(map_403);
019	     Leaflet_Marker_403();
020
021	     function Leaflet_Marker_403()		// マーカー設置
022	     {
023		var Markers_shape = new Array();
024		var Markers_shape_pos = new Array();
025		var Markers_shape_nam = new Array();
026		var Markers_shape_lnk = new Array();
027		var Markers_shape_icn = new Array();
028		var Drag_Markers_shape = new Array(); 
029		var Drag_Markers_shape_pos = new Array(); 
030		var Drag_Markers_shape_nam = new Array(); 
032		var Drag_Markers_shape_lnk = new Array(); 
033		var Drag_Markers_shape_icn = new Array(); 
034
035		Markers_shape_pos[ 0 ] = [35.68109, 139.76717];
036		Markers_shape_nam[ 0 ] = "東京駅";
037		Markers_shape_lnk[ 0 ] = "<a href= 'https://www.jreast.co.jp/estation/stations/1039.html' target='_blank'>東京駅情報にリンク</a>";
038		Markers_shape_icn[ 0 ] = L.icon({
039		    iconUrl: "../ICONS/Flat_Icons/s64_f_business_76_0nbg.png",
040		    iconSize: [32, 32],
041		    iconAnchor: [16, 32],
042		    popupAnchor: [0, -16]
043		});
044
045		Markers_shape_pos[ 1 ] = [34.98540, 135.75829];
046		Markers_shape_nam[ 1 ] = "京都駅";
047		Markers_shape_lnk[ 1 ] = "<a href= 'https://www.jr-odekake.net/eki/premises.php?id=0610116' target='_blank'>京都駅情報にリンク</a>";
048		Markers_shape_icn[ 1 ] = L.icon({
049		    iconUrl: "../ICONS/Flat_Icons/s64_f_traffic_45_0nbg.png",
050		    iconSize: [32, 32],
051		    iconAnchor: [0, 32],
052		    popupAnchor: [16, -16]
053		});
054
055		Markers_shape_pos[ 2 ] = [33.59010, 130.42065];
056		Markers_shape_nam[ 2 ] = "博多駅";
057		Markers_shape_lnk[ 2 ] = "<a href= 'https://www.jr-odekake.net/eki/premises.php?id=0910127' target='_blank'>博多駅情報にリンク</a>";
058		Markers_shape_icn[ 2 ] = L.icon({
059		    iconUrl: "../ICONS/BW_Icon/BW_Icons_64/icon_000220_64.png",
060		    iconSize: [32, 32],
061		    iconAnchor: [0, 32],
062		    popupAnchor: [16, -16]
063		});
064
065		Drag_Markers_shape_pos[ 0 ] = [37, 134]; 
066		Drag_Markers_shape_nam[ 0 ] = "移動可能マーカー#1"; 
067		Drag_Markers_shape_lnk[ 0 ] = " "; 
068		Drag_Markers_shape_icn[ 0 ] = L.icon({ 
069		    iconUrl: "../ICONS/Flat_Icons/s64_f_object_116_1nbg.png", 
070		    iconSize: [48, 48], 
071		    iconAnchor: [24, 24], 
072		    popupAnchor: [0, 0] 
073		}); 
074
075		Drag_Markers_shape_pos[ 1 ] = [35, 142]; 
076		Drag_Markers_shape_nam[ 1 ] = "移動可能マーカー#2"; 
077		Drag_Markers_shape_lnk[ 1 ] = " "; 
078		Drag_Markers_shape_icn[ 1 ] = L.icon({ 
079		    iconUrl: "../ICONS/Flat_Icons/s64_f_object_115_0nbg.png", 
080		    iconSize: [48, 48], 
081		    iconAnchor: [24, 24], 
082		    popupAnchor: [0, 0] 
083		}); 
084
085		Drag_Markers_shape_pos[ 2 ] = [33, 137]; 
086		Drag_Markers_shape_nam[ 2 ] = "移動可能マーカー#3"; 
087		Drag_Markers_shape_lnk[ 2 ] = "<A HREF = 'http://icooon-mono.com/' target='_blank'> ICOON MONO にリンク</A>"; 
088		Drag_Markers_shape_icn[ 2 ] = L.icon({ 
089		    iconUrl: "../ICONS/BW_Icon/BW_Icons_64/icon_128020_64.png", 
090		    iconSize: [48, 48], 
091		    iconAnchor: [24, 24], 
092		    popupAnchor: [0, 0] 
093		}); 
094
095		for ( i = 0; i < Markers_shape_pos.length; i++ )
096		{
097		    if( Markers_shape_pos[ i ] != null ) {
098			Markers_shape[ i ] = L.marker([ Markers_shape_pos[ i ][ 0 ], Markers_shape_pos[ i ][ 1 ] ],
099			    {icon: Markers_shape_icn[ i ]});
100			Markers_shape[ i ].bindPopup(Markers_shape_nam[ i ] + "<br>" + Markers_shape_lnk[ i ]).openPopup();
101			Layer_403[ i ] = Markers_shape[ i ];
102			Layer_403[ i ].addTo(map_403);
103		    }
104		}
105		for ( i = 0; i < Drag_Markers_shape_pos.length; i++ ) 
106		{ 
107		    if( Drag_Markers_shape_pos[ i ] != null ) { 
108			Drag_Markers_shape[ i ] = L.marker([ Drag_Markers_shape_pos[ i ][ 0 ], Drag_Markers_shape_pos[ i ][ 1 ] ], 
109			    {icon: Drag_Markers_shape_icn[ i ], draggable: true}); 
110			Drag_Markers_shape[ i ].bindPopup(Drag_Markers_shape_nam[ i ] + "<BR>" + Drag_Markers_shape_lnk[ i ]); 
111			Layer_403[ i ] = Drag_Markers_shape[ i ]; 
112			Layer_403[ i ].addTo(map_403); 
113		    } 
114		} 
115	     }
116      }
117
118      </script>
119  <body onload="init()">
120      <div id="map_403" style="width: 100%; height: 400px; border: solid 1px"></div>
121   ここで使用しているアイコン素材は、<A HREF = "http://flat-icon-design.com/" target="_blank"> FLAT ICON DESIGN </A>および
122  <A HREF = "http://icooon-mono.com/" target="_blank"> ICOON MONO </A>から取得しており、<BR>
123  これらアイコン素材データの著作権は TopeconHeroes が保持しています。
124  </body>
125  </html>

 ここで、マーカーを移動可能にしているのは、109行目の『draggable: true』という記述です。 これを『draggable: false』と変更することでマーカーは固定になります。


Previous Page Next Page

- 5 -