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 相关文章推荐
用jQuery扩展自写的 UI导航
Jan 13 Javascript
js表头排序实现方法
Jan 16 Javascript
JS实现文字向下滚动完整实例
Feb 06 Javascript
网页收藏夹显示ICO图标(代码少)
Aug 04 Javascript
JS定时器使用,定时定点,固定时刻,循环执行详解
May 31 Javascript
easyui取消表单实时验证,提交时统一验证的简单实例
Nov 07 Javascript
JS实现的样式切换功能tableCSS实例
Dec 30 Javascript
JS中的数组转变成JSON格式字符串的方法
May 09 Javascript
动手写一个angular版本的Message组件的方法
Dec 16 Javascript
js实现跳一跳小游戏
Jul 31 Javascript
JavaScript实现10秒后再次获取验证码
Dec 02 Javascript
JavaScript分页组件使用方法详解
Jul 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
德劲1103的维修打理经验
2021/03/02 无线电
PHP中strtotime函数使用方法详解
2011/11/27 PHP
PHP实现抓取迅雷VIP账号的方法
2015/07/30 PHP
WordPress中自定义后台管理界面配色方案的小技巧
2015/12/29 PHP
thinkPHP框架中执行事务的方法示例
2018/05/31 PHP
PHP implode()函数用法讲解
2019/03/08 PHP
js之ActiveX控件使用说明 new ActiveXObject()
2014/03/03 Javascript
实现js保留小数点后N位的代码
2014/11/13 Javascript
JS基于cookie实现来宾统计记录访客信息的方法
2015/08/04 Javascript
Javascript基础_标记文字的实现方法
2016/06/14 Javascript
vue.js学习之vue-cli定制脚手架详解
2017/07/02 Javascript
详解10分钟学会vue滚动行为
2017/09/21 Javascript
详解Next.js页面渲染的优化方案
2019/01/27 Javascript
浅谈JavaScript_DOM学习篇_图片切换小案例
2019/03/19 Javascript
微信小程序实现收货地址左滑删除
2020/11/18 Javascript
JQuery发送ajax请求时中文乱码问题解决
2019/11/14 jQuery
[01:04:32]DOTA2-DPC中国联赛 正赛 Aster vs LBZS BO3 第二场 2月23日
2021/03/11 DOTA
高效测试用例组织算法pairwise之Python实现方法
2017/07/19 Python
图解Python变量与赋值
2018/04/03 Python
Python2包含中文报错的解决方法
2018/07/09 Python
Python中collections模块的基本使用教程
2018/12/07 Python
对Python的多进程锁的使用方法详解
2019/02/18 Python
python实现杨氏矩阵查找
2019/03/02 Python
Python通用函数实现数组计算的方法
2019/06/13 Python
详解DeBug Python神级工具PySnooper
2019/07/03 Python
python使用Matplotlib改变坐标轴的默认位置
2019/10/18 Python
意大利拉斐尔时尚购物网:Raffaello Network(支持中文)
2018/11/09 全球购物
Myprotein法国官网:欧洲第一运动营养品牌
2019/03/26 全球购物
英国PC组件和在线电脑商店:SCAN
2019/04/18 全球购物
全球领先的中国制造商品在线批发平台:DHgate
2020/01/28 全球购物
shallow copy和deep copy的区别
2016/05/09 面试题
教师评优的个人自我评价分享
2013/09/19 职场文书
关于旷工的检讨书
2014/02/02 职场文书
2015年电气技术员工作总结
2015/07/24 职场文书
六一儿童节致辞
2015/07/31 职场文书
python实现腾讯滑块验证码识别
2021/04/27 Python