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 相关文章推荐
图片动画横条广告带上下滚动的JS代码
Oct 25 Javascript
AMD异步模块定义介绍和Require.js中使用jQuery及jQuery插件的方法
Jun 06 Javascript
详解js私有作用域中创建特权方法
Jan 25 Javascript
js与jquery正则验证电子邮箱、手机号、邮政编码的方法
Jul 04 Javascript
AngularJS 中的事件详解
Jul 28 Javascript
jQuery遍历节点方法汇总(推荐)
May 13 jQuery
详解JavaScript数组过滤相同元素的5种方法
May 23 Javascript
bootstrap table实现点击翻页功能 可记录上下页选中的行
Sep 28 Javascript
浅谈JavaScript 代码简洁之道
Jan 09 Javascript
vue中v-text / v-html使用实例代码详解
Apr 02 Javascript
vue+element表格导出为Excel文件
Sep 26 Javascript
html5以及jQuery实现本地图片上传前的预览代码实例讲解
Mar 01 jQuery
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
wordpress自定义标签云与随机获取标签的方法详解
2019/03/22 PHP
PHP+Apache实现二级域名之间共享cookie的方法
2019/07/24 PHP
可以支持多中格式的JS键盘
2007/05/02 Javascript
Extjs列表详细信息窗口新建后自动加载解决方法
2010/04/02 Javascript
javascript中字符串替换函数replace()方法与c# 、vb 替换有一点不同
2010/06/25 Javascript
Javascript Boolean、Nnumber、String 强制类型转换的区别详细介绍
2012/12/13 Javascript
JavaScript实现统计文本框Textarea字数增强用户体验
2012/12/21 Javascript
jquery增加时编辑jqGrid(实例代码)
2013/11/08 Javascript
js+css实现超简洁的二级下拉菜单效果代码
2015/09/07 Javascript
JS实现alert中显示换行的方法
2015/12/17 Javascript
使用jquery.qrcode.min.js实现中文转化二维码
2016/03/11 Javascript
jqueryMobile 动态添加元素,展示刷新视图的实现方法
2016/05/28 Javascript
node.js cookie-parser之parser.js
2016/06/06 Javascript
jQuery简单入门示例之用户校验demo示例
2016/07/09 Javascript
微信小程序 图片等比例缩放(图片自适应屏幕)
2016/11/16 Javascript
详解js树形控件—zTree使用总结
2016/12/28 Javascript
JS+DIV实现的卷帘效果示例
2017/03/22 Javascript
基于 webpack2 实现的多入口项目脚手架详解
2017/06/26 Javascript
jQuery修改DOM结构_动力节点Java学院整理
2017/07/05 jQuery
element-ui中的select下拉列表设置默认值方法
2018/08/24 Javascript
JS实现的排列组合算法示例
2019/07/16 Javascript
封装微信小程序http拦截器过程解析
2019/08/13 Javascript
微信小程序实现一张或多张图片上传(云开发)
2019/09/25 Javascript
JavaScript实现网页跨年倒计时
2020/12/02 Javascript
在Python中用has_key()方法查找键是否存在的教程
2015/05/21 Python
使用python绘制二元函数图像的实例
2019/02/12 Python
使用jupyter notebook运行python和R的步骤
2020/08/13 Python
canvas压缩图片以及卡片制作的方法示例
2018/12/04 HTML / CSS
html5小程序飞入购物车(抛物线绘制运动轨迹点)
2020/10/19 HTML / CSS
美国最大的网络男装服装品牌:Bonobos
2017/05/25 全球购物
2014年征兵标语
2014/06/20 职场文书
个人房屋买卖协议书(范本)
2014/10/04 职场文书
无工作证明怎么写
2015/06/15 职场文书
Nginx location 和 proxy_pass路径配置问题小结
2021/09/04 Servers
Netty分布式客户端接入流程初始化源码分析
2022/03/25 Java/Android
nginx代理实现静态资源访问的示例代码
2022/07/07 Servers