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获取系统的根路径实现介绍
Sep 08 Javascript
jQuery实现带有上下控制按钮的简单多行滚屏效果代码
Sep 04 Javascript
JavaScript encodeURI 和encodeURIComponent
Dec 04 Javascript
js自定义回调函数
Dec 13 Javascript
基于JavaScript代码实现兼容各浏览器的设为首页和加入收藏
Jan 07 Javascript
通过node-mysql搭建Windows+Node.js+MySQL环境的教程
Mar 01 Javascript
原生js获取left值和top值的三种方法
Aug 02 Javascript
javascript基本常用排序算法解析
Sep 27 Javascript
详解JavaScript的数据类型以及数据类型的转换
Apr 20 Javascript
基于Nuxt.js项目的服务端性能优化与错误检测(容错处理)
Oct 23 Javascript
Vue组件通信入门之Provide和Inject机制
Dec 29 Javascript
JS前后端实现身份证号验证代码解析
Jul 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 zend 相对路径问题
2009/01/12 PHP
Discuz!下Memcache缓存实现方法
2010/05/28 PHP
从ThinkPHP3.2.3过渡到ThinkPHP5.0学习笔记图文详解
2019/04/03 PHP
JS 参数传递的实际应用代码分析
2009/09/13 Javascript
javascript-简单的日历实现及Date对象语法介绍(附图)
2013/05/30 Javascript
javascript使用输出语句实现网页特效代码
2015/08/06 Javascript
js Canvas实现的日历时钟案例分享
2016/12/25 Javascript
jquery easyui dataGrid动态改变排序字段名的方法
2017/03/02 Javascript
JS实现全屏预览F11功能的示例代码
2018/07/23 Javascript
vue子传父关于.sync与$emit的实现
2019/11/05 Javascript
[03:52]显微镜下的DOTA2第三期——英雄在无聊的时候干什么
2014/06/20 DOTA
[57:53]DOTA2上海特级锦标赛主赛事日 - 2 败者组第二轮#3OG VS VP
2016/03/03 DOTA
Python文件和目录操作详解
2015/02/08 Python
在django中使用自定义标签实现分页功能
2017/07/04 Python
在Python中使用AOP实现Redis缓存示例
2017/07/11 Python
详解python 中in 的 用法
2019/12/12 Python
如何基于python实现脚本加密
2019/12/28 Python
django创建css文件夹的具体方法
2020/07/31 Python
分享unittest单元测试框架中几种常用的用例加载方法
2020/12/02 Python
html5中 media(播放器)的api使用指南
2014/12/26 HTML / CSS
美国最受欢迎的度假租赁网站:VRBO
2016/08/02 全球购物
澳大利亚领先的优质葡萄酒拍卖会:Langton’s Fine Wines
2019/03/24 全球购物
美国隐形眼镜网上商店:Lens.com
2019/09/03 全球购物
电气自动化大学生求职信
2013/10/16 职场文书
巧克力蛋糕店创业计划书
2014/01/14 职场文书
七年级英语教学反思
2014/01/15 职场文书
仓库文员岗位职责
2014/04/06 职场文书
外贸业务员求职信
2014/06/16 职场文书
2014年最新版离婚协议书范本
2014/11/25 职场文书
乔布斯辞职信(中英文对照)
2015/05/12 职场文书
家装电话营销开场白
2015/05/29 职场文书
何玥事迹观后感
2015/06/16 职场文书
护理工作心得体会
2016/01/22 职场文书
pytorch查看网络参数显存占用量等操作
2021/05/12 Python
解决Navicat for MySQL 连接 MySQL 报2005错误的问题
2021/05/29 MySQL
解析MySQL binlog
2021/06/11 MySQL