オーバーレイ
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
のドキュメントを確認してください。
この例をスタンドアロンでご覧ください。 |