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)容,希望對大家的學習有所幫助,也希望大家多多支持腳本之家。
相關文章
JavaScript實現(xiàn)在頁面刷新時成功發(fā)送停止請求
最近接到一個需求,需要在頁面刷新或者關閉瀏覽器標簽頁的時候觸發(fā)停止當前sql的接口,所以本文小編給大家詳細介紹了解決方案和實現(xiàn)代碼,需要的朋友可以參考下2023-11-11原生JS實現(xiàn)圖片網(wǎng)格式漸顯、漸隱效果
這篇文章主要介紹了原生JS實現(xiàn)圖片網(wǎng)格式漸顯、漸隱效果,需要的朋友可以參考下2017-06-06基于JavaScript實現(xiàn)表單密碼的隱藏和顯示出來
為了網(wǎng)站的安全性,很多朋友都把密碼設的比較復雜,但是如何密碼不能明顯示,不知道輸?shù)氖菍κ清e,為了安全起見可以把密碼顯示的,那么基于js代碼如何實現(xiàn)的呢?下面通過本文給大家介紹JavaScript實現(xiàn)表單密碼的隱藏和顯示,需要的朋友參考下2016-03-03JavaScript實現(xiàn)兩個Table固定表頭根據(jù)頁面大小自行調(diào)整
正如標題所言兩個Table固定表頭,可根據(jù)頁面大小自行調(diào)整使用JavaScript實現(xiàn),具體的示例如下,感興趣的朋友可以參考下2014-01-01LayUI switch 開關監(jiān)聽 獲取屬性值、更改狀態(tài)的方法
今天小編就為大家分享一篇LayUI switch 開關監(jiān)聽 獲取屬性值、更改狀態(tài)的方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2019-09-09