OpenLayersはレイヤー切り替えコントロールを実現します。
3285 ワード
OpenLayersはレイヤー切り替えのコントロールをカプセル化していませんので、自分でレイヤーコントロールを実現する必要があります。
レイヤーをカスタマイズしてコントロールを切り替える原理は簡単です。あるレイヤーを表示すると他のレイヤーを隠します。
完全コード:
layer Switch.
コード全体の論理は簡単で、イベント依頼という仕組みを使ってイベントを結びつけることができます。イベント依頼はイベントバインディングによるメモリ消費を減らすことができます。
また、map.getLayers()は、地図の3つのレイヤーオブジェクト(ol.layer.Tile)を含み、対応するレイヤーオブジェクトを抽出するためにitem()メソッドに入力することができます。
最後に、ol.layer.Tile類のsetVisible()方法でレイヤーの表示と非表示を設定できます。
どうですか?自分でレイヤーを作ってコントロールを切り替えるのは簡単ですか?
以上が本文の全部です。皆さんの勉強に役に立つように、私たちを応援してください。
レイヤーをカスタマイズしてコントロールを切り替える原理は簡単です。あるレイヤーを表示すると他のレイヤーを隠します。
完全コード:
layer Switch.
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title> </title>
<link rel="stylesheet" href="../v5.3.0/css/ol.css" />
<script src="../v5.3.0/build/ol.js"></script>
</head>
<body>
<div id="controls">
<input type="checkbox" id="osm" checked />OpenStreetMap
<input type="checkbox" id="bingmap" />Bing Map
<input type="checkbox" id="stamen" />Stamen Map
</div>
<div id="map"></div>
<script>
let map = new ol.Map({
target: 'map', // div
layers: [
new ol.layer.Tile({ // OpenStreetMap
source: new ol.source.OSM()
}),
new ol.layer.Tile({ // Bing Map
source: new ol.source.BingMaps({
key: ' ', // Bing Map key
imagerySet: 'Aerial'
}),
visible: false //
}),
new ol.layer.Tile({
source: new ol.source.Stamen({
layer: 'watercolor'
}),
visible: false //
})
],
view: new ol.View({ //
projection: 'EPSG:3857',
center: [0, 0],
zoom: 0
})
});
let controls = document.getElementById('controls');
//
controls.addEventListener('click', (event) => {
if(event.target.checked){ //
// DOM id
switch(event.target.id){
case "osm":
map.getLayers().item(0).setVisible(true);
break;
case "bingmap":
map.getLayers().item(1).setVisible(true);
break;
case "stamen":
map.getLayers().item(2).setVisible(true);
break;
default: break;
}
}else{ //
// DOM id
switch(event.target.id){
case "osm":
map.getLayers().item(0).setVisible(false);
break;
case "bingmap":
map.getLayers().item(1).setVisible(false);
case "stamen":
map.getLayers().item(2).setVisible(false);
default: break;
}
}
});
</script>
</body>
</html>
実現効果:コード全体の論理は簡単で、イベント依頼という仕組みを使ってイベントを結びつけることができます。イベント依頼はイベントバインディングによるメモリ消費を減らすことができます。
また、map.getLayers()は、地図の3つのレイヤーオブジェクト(ol.layer.Tile)を含み、対応するレイヤーオブジェクトを抽出するためにitem()メソッドに入力することができます。
最後に、ol.layer.Tile類のsetVisible()方法でレイヤーの表示と非表示を設定できます。
どうですか?自分でレイヤーを作ってコントロールを切り替えるのは簡単ですか?
以上が本文の全部です。皆さんの勉強に役に立つように、私たちを応援してください。