オーバーレイ
Leaflet APIには3種類のオーバーレイがあります。
ImageOverlay:ラスターレイヤー、Layerを拡張VideoOverlay:ラスターレイヤー、ImageOverlayを拡張SVGOverlay:ベクターレイヤー、ImageOverlayを拡張
このチュートリアルでは、これらのオーバーレイの使い方を学びます。
ImageOverlay
L.ImageOverlayは、マップの特定の範囲に単一の画像を読み込んで表示するために使用されます。
画像オーバーレイL.ImageOverlayを追加するには、これを使用します。
var imageOverlay = L.imageOverlay(imageUrl, latLngBounds, options);
マップの作成
まず、Leafletマップを作成し、通常どおり背景L.TileLayerを追加します。
var map = L.map('map').setView([37.8, -96], 4);
var osm = L.tileLayer('https://tile.openstreetmap.org/{z}/{x}/{y}.png', {
maxZoom: 19,
attribution: '© <a href="http://www.openstreetmap.org/copyright">OpenStreetMap</a>'
}).addTo(map);
複数のオプションを持つ画像オーバーレイを作成してみましょう。
var imageUrl = 'https://maps.lib.utexas.edu/maps/historical/newark_nj_1922.jpg';
var errorOverlayUrl = 'https://cdn-icons-png.flaticon.com/512/110/110686.png';
var altText = 'Image of Newark, N.J. in 1922. Source: The University of Texas at Austin, UT Libraries Map Collection.';
var latLngBounds = L.latLngBounds([[40.799311, -74.118464], [40.68202047785919, -74.33]]);
var imageOverlay = L.imageOverlay(imageUrl, latLngBounds, {
opacity: 0.8,
errorOverlayUrl: errorOverlayUrl,
alt: altText,
interactive: true
}).addTo(map);
ImageOverlayによって覆われている領域を確認したい場合は、同じL.LatLngBoundsを持つL.Rectangleをマップに追加できます。
L.rectangle(latLngBounds).addTo(map);
map.fitBounds(latLngBounds);
-
opacityは画像オーバーレイの不透明度を定義し、デフォルトでは1.0です。この値を小さくすると、画像オーバーレイが透明になり、下にあるマップレイヤーが表示されます。 -
errorOverlayUrlは、読み込みに失敗したオーバーレイの代わりに表示するオーバーレイ画像のURLです。 -
altは、画像の代替テキスト説明を提供するHTMLalt属性を設定します。代替テキストは、スクリーンリーダーユーザーにとって重要な情報です。ネットワーク接続が悪い場合に画像の読み込みに失敗した場合にも役立ちます。さらに、ウェブサイトのSEOを向上させることができます。 -
interactiveはデフォルトでfalseです。trueの場合、画像オーバーレイはクリックまたはホバーしたときにマウスイベントを発生させます。
L.ImageOverlayの他のオプションについては、ドキュメントを参照してください。
| この例をスタンドアロンでご覧ください。 |
VideoOverlay
ウェブページを作成する際にビデオを使用するのは、<video> HTML要素が利用可能になるまでは難しい作業でした。
現在では、次のHTMLコードを使用できます。
<video width="500" controls>
<source src="https://www.mapbox.com/bites/00188/patricia_nasa.webm" type="video/webm">
<source src="https://www.mapbox.com/bites/00188/patricia_nasa.mp4" type="video/mp4">
</video>
このビデオを表示するには
このようにしてウェブページにビデオを表示できる場合、Leafletはマップ内にビデオを表示できます。ビデオはマップに合うように準備されていることが重要です。ビデオは「北を上」にした向きになっており、その比率はマップに合う必要があります。そうでない場合、場違いに見えます。
マップの作成
まず、Leafletマップを作成し、通常どおり背景L.TileLayerを追加します。
var map = L.map('map').setView([37.8, -96], 4);
var osm = L.tileLayer('https://tile.openstreetmap.org/{z}/{x}/{y}.png', {
maxZoom: 19,
attribution: '© <a href="http://www.openstreetmap.org/copyright">OpenStreetMap</a>'
}).addTo(map);
ビデオオーバーレイの追加
ビデオオーバーレイの追加は、画像オーバーレイの追加と非常に似ています。
ビデオオーバーレイの場合は、単に
L.ImageOverlayの代わりにL.VideoOverlayを使用します。L.VideoOverlayは、マップの特定の範囲にビデオプレーヤーを読み込んで表示するために使用されます。L.ImageOverlayを拡張します。ビデオオーバーレイは<video>HTML要素を使用します。- 画像URLの代わりに、1つのビデオURLまたはビデオURLの配列を指定します。
var videoUrls = [
'https://www.mapbox.com/bites/00188/patricia_nasa.webm',
'https://www.mapbox.com/bites/00188/patricia_nasa.mp4'
];
var errorOverlayUrl = 'https://cdn-icons-png.flaticon.com/512/110/110686.png';
var latLngBounds = L.latLngBounds([[32, -130], [13, -100]]);
var videoOverlay = L.videoOverlay(videoUrls, latLngBounds, {
opacity: 0.8,
errorOverlayUrl: errorOverlayUrl,
interactive: true,
autoplay: true,
muted: true,
playsInline: true
}).addTo(map);
そして、このようにして、マップにビデオが表示されます。
| この例をスタンドアロンでご覧ください。 |
-
autoplayオプションは、読み込み時にビデオが自動的に再生を開始するかどうかを定義します。デフォルトではtrueです。一部のブラウザでは、autoplay機能はmutedオプションが明示的にtrueに設定されている場合にのみ機能することに注意することが重要です。 -
mutedオプションは、読み込み時にビデオがミュートで開始するかどうかを定義します。デフォルトではfalseです。 -
playsInlineオプションは、trueに設定されている場合、モバイルブラウザで再生が開始されたときに自動的にフルスクリーンモードにならないように、ビデオをインラインで再生できます。デフォルトではtrueです。
L.videoOverlayの他のオプションについては、ドキュメントを参照してください。
ビデオオーバーレイは他のLeafletレイヤーと同様に動作します。追加したり削除したり、レイヤーコントロールを使用してユーザーに複数のビデオから選択させたりできます。
ビデオを少し制御する
APIドキュメントを読むと、L.VideoOverlayクラスにはplay()メソッドまたはpause()メソッドがないことに気付くでしょう。
そのため、ビデオオーバーレイのgetElement()メソッドが役立ちます。これはオーバーレイのHTMLVideoElement(HTMLMediaElementを継承)を返し、これにはplay()やpause()などのメソッドがあります。
videoOverlay.getElement().pause();
これにより、カスタムインターフェースを構築できます。たとえば、読み込み後にこのビデオオーバーレイを再生/一時停止するためのL.Controlの小さなサブクラスを構築できます。
videoOverlay.on('load', function () {
var MyPauseControl = L.Control.extend({
onAdd: function() {
var button = L.DomUtil.create('button');
button.title = 'Pause';
button.innerHTML = '<span aria-hidden="true">⏸</span>';
L.DomEvent.on(button, 'click', function () {
videoOverlay.getElement().pause();
});
return button;
}
});
var MyPlayControl = L.Control.extend({
onAdd: function() {
var button = L.DomUtil.create('button');
button.title = 'Play';
button.innerHTML = '<span aria-hidden="true">▶️</span>';
L.DomEvent.on(button, 'click', function () {
videoOverlay.getElement().play();
});
return button;
}
});
var pauseControl = (new MyPauseControl()).addTo(map);
var playControl = (new MyPlayControl()).addTo(map);
});
| この例をスタンドアロンでご覧ください。 |
SVGOverlay
L.SVGOverlayは、マップの特定の範囲にSVGファイルを読み込み、表示し、DOMアクセスを提供するために使用されます。
SVGオーバーレイL.SVGOverlayを追加するには、これを使用します。
var svgOverlay = L.svgOverlay(SVGElement, svgElementBounds, options);
これは、SVG要素とそれが結び付けられている地理的な範囲が与えられた画像オーバーレイオブジェクトをインスタンス化します。適切にズームインおよびズームアウトするには、SVG要素にviewBox属性が必要です。
SVG要素の作成
SVG要素を作成しましょう。
var svgElement = document.createElementNS('http://www.w3.org/2000/svg', 'svg');
svgElement.setAttribute('xmlns', 'http://www.w3.org/2000/svg');
svgElement.setAttribute('viewBox', '0 0 200 200');
svgElement.innerHTML = '<rect width="200" height="200"/><rect x="75" y="23" width="50" height="50" style="fill:red"/><rect x="75" y="123" width="50" height="50" style="fill:#0013ff"/>';
または、HTMLコードでSVG要素を作成することもできます。
<svg id="svg" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 200 200"><rect width="200" height="200"/><rect x="75" y="23" width="50" height="50" style="fill:red"/><rect x="75" y="123" width="50" height="50" style="fill:#0013ff"/></svg>
そして、querySelectorを使用してこのSVG要素を選択します。
var svgElement = document.querySelector('#svg');
SVGオーバーレイの追加
ImageOverlayやVideoOverlayと同様に、必要なオプションを使用してSVGOverlayを作成します。
var latLngBounds = L.latLngBounds([[32, -130], [13, -100]]);
map.fitBounds(latLngBounds);
var svgOverlay = L.svgOverlay(svgElement, latLngBounds, {
opacity: 0.7,
interactive: true
}).addTo(map);
SVGOverlayには独自のオプションはありませんが、ImageOverlay、インタラクティブレイヤー、レイヤーからさまざまなオプションを継承します。詳細については、L.SVGOverlayのドキュメントを確認してください。
| この例をスタンドアロンでご覧ください。 |
