OpenLayers實(shí)現(xiàn)圖層切換控件
OpenLayers并沒(méi)有封裝圖層切換的控件,所以我們需要自己來(lái)實(shí)現(xiàn)圖層控件。
自定義圖層切換控件的原理很簡(jiǎn)單:顯示某個(gè)圖層時(shí),將其他圖層隱藏。
完整代碼:
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', // 關(guān)聯(lián)到對(duì)應(yīng)的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)申請(qǐ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){ // 如果選中某一復(fù)選框 // 通過(guò)DOM元素的id值來(lái)判斷應(yīng)該對(duì)哪個(gè)圖層進(jìn)行顯示 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{ // 如果取消某一復(fù)選框 // 通過(guò)DOM元素的id值來(lái)判斷應(yīng)該對(duì)哪個(gè)圖層進(jìn)行隱藏 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>
實(shí)現(xiàn)效果:
代碼整體邏輯是很簡(jiǎn)單的,其中使用了事件委托這一機(jī)制來(lái)綁定事件,事件委托可以減少事件綁定導(dǎo)致的內(nèi)存消耗,所以平時(shí)開(kāi)發(fā)時(shí)推薦多使用事件委托。
另外,map.getLayers()返回一個(gè)ol.Collection類(lèi)的對(duì)象,該對(duì)象中包含了地圖中的三個(gè)圖層對(duì)象(ol.layer.Tile),可以為item()方法傳入對(duì)應(yīng)索引來(lái)取出對(duì)應(yīng)圖層對(duì)象。
最后,ol.layer.Tile類(lèi)的setVisible()方法可以設(shè)置圖層的顯示與隱藏。
怎么樣,自己實(shí)現(xiàn)一個(gè)圖層切換控件是不是很簡(jiǎn)單呢?
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
JavaScript實(shí)現(xiàn)在頁(yè)面刷新時(shí)成功發(fā)送停止請(qǐng)求
最近接到一個(gè)需求,需要在頁(yè)面刷新或者關(guān)閉瀏覽器標(biāo)簽頁(yè)的時(shí)候觸發(fā)停止當(dāng)前sql的接口,所以本文小編給大家詳細(xì)介紹了解決方案和實(shí)現(xiàn)代碼,需要的朋友可以參考下2023-11-11JavaScript學(xué)習(xí)筆記之函數(shù)記憶
這篇文章主要介紹了JavaScript學(xué)習(xí)筆記之函數(shù)記憶,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2017-09-09原生JS實(shí)現(xiàn)圖片網(wǎng)格式漸顯、漸隱效果
這篇文章主要介紹了原生JS實(shí)現(xiàn)圖片網(wǎng)格式漸顯、漸隱效果,需要的朋友可以參考下2017-06-06基于JavaScript實(shí)現(xiàn)表單密碼的隱藏和顯示出來(lái)
為了網(wǎng)站的安全性,很多朋友都把密碼設(shè)的比較復(fù)雜,但是如何密碼不能明顯示,不知道輸?shù)氖菍?duì)是錯(cuò),為了安全起見(jiàn)可以把密碼顯示的,那么基于js代碼如何實(shí)現(xiàn)的呢?下面通過(guò)本文給大家介紹JavaScript實(shí)現(xiàn)表單密碼的隱藏和顯示,需要的朋友參考下2016-03-03JavaScript實(shí)現(xiàn)兩個(gè)Table固定表頭根據(jù)頁(yè)面大小自行調(diào)整
正如標(biāo)題所言兩個(gè)Table固定表頭,可根據(jù)頁(yè)面大小自行調(diào)整使用JavaScript實(shí)現(xiàn),具體的示例如下,感興趣的朋友可以參考下2014-01-01LayUI switch 開(kāi)關(guān)監(jiān)聽(tīng) 獲取屬性值、更改狀態(tài)的方法
今天小編就為大家分享一篇LayUI switch 開(kāi)關(guān)監(jiān)聽(tīng) 獲取屬性值、更改狀態(tài)的方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2019-09-09