OpenLayers实现图层切换控件


Posted in Javascript onSeptember 25, 2020

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()方法传入对应索引来取出对应图层对象。

最后,ol.layer.Tile类的setVisible()方法可以设置图层的显示与隐藏。

怎么样,自己实现一个图层切换控件是不是很简单呢?

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
Javascript 读书笔记索引贴
Jan 11 Javascript
解析DHTML,JavaScript,DOM,BOM以及WEB标准的描述
Jun 19 Javascript
优化Node.js Web应用运行速度的10个技巧
Sep 03 Javascript
node.js回调函数之阻塞调用与非阻塞调用
Nov 13 Javascript
jquery移除了live()、die(),新版事件绑定on()、off()的方法
Oct 26 Javascript
解决Angular.Js与Django标签冲突的方案
Dec 20 Javascript
ES6 系列之 WeakMap的使用示例
Aug 06 Javascript
微信小程序canvas.drawImage完全显示图片问题的解决
Nov 30 Javascript
小程序实现按下录音松开识别语音
Nov 22 Javascript
JS桶排序的简单理解与实现方法示例
Nov 25 Javascript
微信小程序利用button控制条件标签的变量问题
Mar 15 Javascript
详细介绍Next.js脚手架完整搭建封装
Apr 26 Javascript
OpenLayers3实现对地图的基本操作
Sep 28 #Javascript
vue中实现弹出层动画效果的示例代码
Sep 25 #Javascript
OpenLayers3加载常用控件使用方法详解
Sep 25 #Javascript
在webstorm中配置less的方法详解
Sep 25 #Javascript
OpenLayers加载缩放控件使用方法详解
Sep 25 #Javascript
Javascript confirm多种使用方法解析
Sep 25 #Javascript
OpenLayers3实现地图显示功能
Sep 25 #Javascript
You might like
PHP微信模板消息操作示例
2017/06/29 PHP
php使用QueryList轻松采集js动态渲染页面方法
2018/09/11 PHP
javascript 面向对象编程  function是方法(函数)
2009/09/17 Javascript
jQuery 网易相册鼠标移动显示隐藏效果实现代码
2013/03/31 Javascript
关于jquery.validate1.9.0前台验证的使用介绍
2013/04/26 Javascript
JavaScript中的eval()函数使用介绍
2014/12/31 Javascript
使用js画图之饼图
2015/01/12 Javascript
jquery实现实时改变网页字体大小、字体背景色和颜色的方法
2015/08/05 Javascript
js jquery获取当前元素的兄弟级 上一个 下一个元素
2015/09/01 Javascript
JS组件Bootstrap实现弹出框效果代码
2016/04/26 Javascript
第九篇Bootstrap导航菜单创建步骤详解
2016/06/21 Javascript
JS常用的几种数组遍历方式以及性能分析对比实例详解
2018/04/11 Javascript
webpack4简单入门实例
2018/09/06 Javascript
js实现点击展开隐藏效果(实例代码)
2018/09/28 Javascript
Vue中的作用域CSS和CSS模块的区别
2018/10/09 Javascript
vue-cli3 取消eslint校验代码的解决办法
2020/01/16 Javascript
微信小程序实现电子签名并导出图片
2020/05/27 Javascript
如何搭建一个完整的Vue3.0+ts的项目步骤
2020/10/18 Javascript
[04:26]2014DOTA2西雅图国际邀请赛 总决赛TOPPLAY
2014/07/22 DOTA
Python实现爬取百度贴吧帖子所有楼层图片的爬虫示例
2018/04/26 Python
运行django项目指定IP和端口的方法
2018/05/14 Python
python中append实例用法总结
2019/07/30 Python
Python3.0 实现决策树算法的流程
2019/08/08 Python
python怎么调用自己的函数
2020/07/01 Python
Python爬虫之Selenium多窗口切换的实现
2020/12/04 Python
Python LMDB库的使用示例
2021/02/14 Python
美国娱乐和流行文化商品店:FYE
2017/09/14 全球购物
意大利制造的男鞋和女鞋:SCAROSSO
2018/03/07 全球购物
澳洲的UGG雪地靴超级市场:Uggs.com.au
2020/04/06 全球购物
经典c++面试题四
2015/05/14 面试题
精细化工应届生求职信
2013/11/17 职场文书
后勤采购员岗位职责
2013/12/19 职场文书
微笑服务演讲稿
2014/05/13 职场文书
空气的环保标语
2014/06/12 职场文书
企业管理制度设计时要注意的几种“常见病”!
2019/04/19 职场文书
简单聊聊Vue中的计算属性和属性侦听
2021/10/05 Vue.js