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淡入淡出效果的实现思路
Mar 31 Javascript
javascript垃圾收集机制与内存泄漏详细解析
Nov 11 Javascript
Javascript技术栈中的四种依赖注入详解
Feb 23 Javascript
JS原型、原型链深入理解
Feb 27 Javascript
JavaScript图像延迟加载库Echo.js
Apr 05 Javascript
JavaScript实现Base64编码转换
Apr 23 Javascript
JS改变页面颜色源码分享
Feb 24 Javascript
vue-cli的工程模板与构建工具详解
Sep 27 Javascript
vue移动端项目缓存问题实践记录
Oct 29 Javascript
JavaScript 性能提升之路(推荐)
Apr 10 Javascript
JavaScript鼠标拖拽事件详解
Apr 03 Javascript
小程序点餐界面添加购物车左右摆动动画
Sep 23 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生成静态页面详解
2006/11/19 PHP
用mysql_fetch_array()获取当前行数据的方法详解
2013/06/05 PHP
php判断并删除空目录及空子目录的方法
2015/02/11 PHP
Yii框架表单提交验证功能分析
2017/01/07 PHP
PHP实现的数据对象映射模式详解
2019/03/20 PHP
详解PHP变量传值赋值和引用赋值变量销毁
2019/03/23 PHP
解读IE和firefox下JScript和HREF的执行顺序
2008/01/12 Javascript
input:checkbox多选框实现单选效果跟radio一样
2014/06/16 Javascript
页面刷新时记住滚动条的位置jquery代码
2014/06/17 Javascript
node.js中的favicon.ico请求问题处理
2014/12/15 Javascript
jQuery+Ajax请求本地数据加载商品列表页并跳转详情页的实现方法
2017/07/12 jQuery
JavaScript Array对象使用方法解析
2019/09/24 Javascript
vue v-for直接循环数字实例
2019/11/07 Javascript
JavaScript canvas绘制渐变颜色的矩形
2020/02/18 Javascript
JavaScript计算出两个数的差值
2020/03/19 Javascript
Antd-vue Table组件添加Click事件,实现点击某行数据教程
2020/11/17 Javascript
js实现头像上传并且可预览提交
2020/12/25 Javascript
详解Python中的Cookie模块使用
2015/07/06 Python
python 移除字符串尾部的数字方法
2018/07/17 Python
使用 Python 实现文件递归遍历的三种方式
2018/07/18 Python
在Python中获取两数相除的商和余数方法
2018/11/10 Python
python实现简易动态时钟
2018/11/19 Python
用vue.js组件模拟v-model指令实例方法
2019/07/05 Python
Python threading的使用方法解析
2019/08/28 Python
Sephora丝芙兰菲律宾官方网站:购买化妆品和护肤品
2017/04/05 全球购物
卡骆驰德国官方网站:Crocs德国
2019/03/29 全球购物
伦敦鲜花递送:Flower Station
2021/02/03 全球购物
Java基础面试题
2012/11/02 面试题
高校毕业生自我鉴定
2013/10/27 职场文书
测绘工程系学生的自我评价
2013/11/30 职场文书
海南地接欢迎词
2014/01/14 职场文书
律师函格式范本
2015/05/27 职场文书
幼儿园家长反馈意见
2015/06/03 职场文书
2019行政前台转正申请书范文3篇
2019/08/15 职场文书
pytorch DataLoader的num_workers参数与设置大小详解
2021/05/28 Python
CentOS7环境下MySQL8常用命令小结
2022/06/10 Servers