欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

OpenLayers實現(xiàn)圖層切換控件

 更新時間:2020年09月25日 16:32:02   作者:不睡覺的怪叔叔  
這篇文章主要為大家詳細介紹了OpenLayers實現(xiàn)圖層切換控件,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下

OpenLayers并沒有封裝圖層切換的控件,所以我們需要自己來實現(xiàn)圖層控件。

自定義圖層切換控件的原理很簡單:顯示某個圖層時,將其他圖層隱藏。

完整代碼:

layerSwitch.html:

<!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', // 關聯(lián)到對應的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官網(wǎng)申請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>

實現(xiàn)效果:

代碼整體邏輯是很簡單的,其中使用了事件委托這一機制來綁定事件,事件委托可以減少事件綁定導致的內(nèi)存消耗,所以平時開發(fā)時推薦多使用事件委托。

另外,map.getLayers()返回一個ol.Collection類的對象,該對象中包含了地圖中的三個圖層對象(ol.layer.Tile),可以為item()方法傳入對應索引來取出對應圖層對象。

最后,ol.layer.Tile類的setVisible()方法可以設置圖層的顯示與隱藏。

怎么樣,自己實現(xiàn)一個圖層切換控件是不是很簡單呢?

以上就是本文的全部內(nèi)容,希望對大家的學習有所幫助,也希望大家多多支持腳本之家。

您可能感興趣的文章:

相關文章

最新評論