オリジナル画像のマーカーを立てる【Leaflet導入記その3】

スポンサーリンク

その3からの続きです。

Leafletで読み込んだ国土地理院の地図に、オリジナルの画像を指定したマーカーを立てます。

Leafletのデフォルトのマーカーは、これ  ですね。

スポンサーリンク

マーカーとして使う画像ファイルを用意します

まず、マーカーをデザインしましょう。

今回、旅馬の公式マスコット「照晴」くんに、マーカーになっていただきました。

エクセルで図形を組み合わせてデザインし、フォトショップで仕上げています。

ポートタワーを中心に表示しています。

地図のHTMLはこちら。

<div id="waq3map-wrapper">
<div id="mapid1" class="waq3map"></div>
<p class="waq3map-caption">
ポートタワーを中心に表示しています。
</p>
<script>
var waq3map = L.map('mapid1',{
	center:[34.682622,135.186738],
	zoom:13,
	dragging:true,
	touchZoom:true,
	scrollWheelZoom:true,
	doubleClickZoom:true,
	boxZoom:true,
	tap:true,
	keyboard:true,
	zoomControl:true,
	closePopupOnClick: false,
	});
L.tileLayer('https://cyberjapandata.gsi.go.jp/xyz/pale/{z}/{x}/{y}.png', {
	minZoom:5,
	maxZoom:18,
	attribution: '<a href="https://maps.gsi.go.jp/development/ichiran.html" target="_blank">地理院タイル</a>'
	}).addTo(waq3map);
waq3map.zoomControl.setPosition('bottomright');
var greenIcon= L.icon({
	iconUrl:'/wp-content/uploads/ico/telharu-Icon-green-75.png',
	iconSize:[75,75],
	iconAnchor:[37,75],
	popupAnchor:[0,-70]
	});
var waq3marker0=L.marker([34.682622,135.186738],{icon:greenIcon})
	.bindPopup('<strong>ポートタワーの位置にマーカーを立てました!</strong>',{autoClose:true});
waq3map.addLayer(waq3marker0);
L.control.scale().addTo(waq3map);
waq3map.panTo(new L.LatLng(34.682622,135.186738));
</script>
</div>
スポンサーリンク

マーカーを定義する

まず、マーカーを定義します。変数「greenIcon」を宣言し、「L.icon」オブジェクトに対して設定したものを変数に放り込みます。

var greenIcon= L.icon({
	iconUrl:'/wp-content/uploads/ico/telharu-Icon-green-75.png',
	iconSize:[75,75],
	iconAnchor:[37,75],
	popupAnchor:[0,-70]
	});

iconUrl

画像ファイルへのアドレスを指定しています。

iconSize

画像のサイズを設定します。[横のサイズ,縦のサイズ]の順に設定し、単位はピクセルです。

iconAnchor

画像ファイルの左上を基準点とし、上下左右にどれぐらいずらすかを指定します。

[左右,上下]の順で指定し、単位はピクセルです。

左にずらすときは左右に正の値を、右にずらすときは負の値を指定します。

同様に、上にずらすときは上下に正の値を、下にずらすときは負の値を指定します。

iconSize[75,75]、
iconAnchor:[37,75]を指定しました。

iconSize[30,30]、
iconAnchor[15,30]を指定しました。

popupAnchor

ポップアップの吹き出しの先っちょの位置を、上下左右にどれぐらいずらすかを指定します。

[左右,上下]の順で指定し、単位はピクセルです。

左にずらすときは左右に正の値を、右にずらすときは負の値を指定しますが、iconAnchorの指定とは異なり、上にずらすときは上下に負の値を、下にずらすときは正の値を指定します。

popupAnchor:[0,0]を指定しました。

popupAnchor:[0,-70]を指定しました。

スポンサーリンク

マーカーの位置を指定する

続いて、マーカーの位置を指定します。

変数「waq3marker0」を宣言し、「L.icon」オブジェクトに対して設定したものを変数に放り込みます。

var waq3marker0=L.marker([緯度を指定,経度を指定],{icon:アイコンの定義を指定})
	.bindPopup(' ポップアップ内のメッセージを指定 ',{autoClose:true});
入力例
var waq3marker0=L.marker([34.682622,135.186738],{icon:greenIcon})
	.bindPopup('<strong>ポートタワーの位置にマーカーを立てました!</strong>',{autoClose:true});

なお、和休の場合、後々マーカーをグループ化しやすいように、レイヤーにマーカーを追加しています。

レイヤーとは、フォトショップなどと同様、透明なシートと考えていただければ結構です。

地図の上に透明なシートをかぶせ、そこにマーカーを書き込んでいきます。

マーカーを書き込むコードはこちら。

waq3map.addLayer(waq3marker0);
スポンサーリンク

マーカーの種類を増やしたいとき

マーカーの種類を追加するには、定義を増やしていけばOKです。

照晴くんの矢印を、赤色にしたものを作りました。

緑と赤のマーカーを立てました

HTMLはこちら。

26行目から37行目がマーカーの定義、38行目から45行目がマーカー位置の指定です。

<div id="waq3map-wrapper">
<div id="mapid4" class="waq3map"></div>
<p class="waq3map-caption">
緑と赤のマーカーを立てました
</p>
<script>
var waq3map = L.map('mapid4',{
	center:[34.682622,135.186738],
	zoom:13,
	dragging:true,
	touchZoom:true,
	scrollWheelZoom:true,
	doubleClickZoom:true,
	boxZoom:true,
	tap:true,
	keyboard:true,
	zoomControl:true,
	closePopupOnClick: false,
	});
L.tileLayer('https://cyberjapandata.gsi.go.jp/xyz/pale/{z}/{x}/{y}.png', {
	minZoom:5,
	maxZoom:18,
	attribution: '<a href="https://maps.gsi.go.jp/development/ichiran.html" target="_blank">地理院タイル</a>'
	}).addTo(waq3map);
waq3map.zoomControl.setPosition('bottomright');
var redIcon= L.icon({
	iconUrl:'/wp-content/uploads/ico/telharu-Icon-red-75.png',
	iconSize:[75,75],
	iconAnchor:[37,75],
	popupAnchor:[0,-70]
	});
var greenIcon= L.icon({
	iconUrl:'/wp-content/uploads/ico/telharu-Icon-green-75.png',
	iconSize:[75,75],
	iconAnchor:[37,75],
	popupAnchor:[0,-70]
	});
var waq3marker0=L.marker([34.682622,135.186738],{icon:greenIcon})
	.bindPopup('<strong>ポートタワー</strong>',{autoClose:false});
waq3map.addLayer(waq3marker0);
waq3marker0.openPopup();
var waq3marker0=L.marker([34.676754,135.204352],{icon:redIcon})
	.bindPopup('<strong>ポートアイランド北公園</strong>',{autoClose:false});
waq3map.addLayer(waq3marker0);
waq3marker0.openPopup();
L.control.scale().addTo(waq3map);
waq3map.panTo(new L.LatLng(34.682622,135.186738));
</script>
</div>

ポップアップを最初から表示させるときは、こちらのコードを追加すればOKです。

同一レイヤー上にある、ポップアップが設定されているマーカーのポップアップを、すべて表示します。

レイヤーを定義した変数名.openPopup();

コメントをどうぞ!