91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

使用OpenLayers實現一個圖層切換控件

發布時間:2020-10-30 22:24:59 來源:億速云 閱讀:331 作者:Leah 欄目:開發技術

使用OpenLayers實現一個圖層切換控件?相信很多沒有經驗的人對此束手無策,為此本文總結了問題出現的原因和解決方法,通過這篇文章希望你能解決這個問題。

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

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

完整代碼:

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',  // 關聯到對應的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>

實現效果:

使用OpenLayers實現一個圖層切換控件

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

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

看完上述內容,你們掌握使用OpenLayers實現一個圖層切換控件的方法了嗎?如果還想學到更多技能或想了解更多相關內容,歡迎關注億速云行業資訊頻道,感謝各位的閱讀!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

平阳县| 衡水市| 黎城县| 绿春县| 德令哈市| 天峨县| 朝阳区| 南平市| 乌拉特后旗| 绥宁县| 深水埗区| 普宁市| 潮安县| 石楼县| 宁明县| 阿荣旗| 双牌县| 汝州市| 蒙自县| 宝鸡市| 札达县| 广西| 堆龙德庆县| 新田县| 广宁县| 常宁市| 西宁市| 栖霞市| 平邑县| 库伦旗| 抚州市| 天峻县| 鄂州市| 滦平县| 宝山区| 阿荣旗| 台安县| 津南区| 兰溪市| 湘阴县| 临沭县|