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 相关文章推荐
可拖动窗口,附带鼠标控制渐变透明,开启关闭功能
Jun 26 Javascript
js+css实现有立体感的按钮式文字竖排菜单效果
Sep 01 Javascript
js立即执行函数: (function ( ){})( ) 与 (function ( ){}( )) 有什么区别?
Nov 18 Javascript
基于Javascript实现二级联动菜单效果
Mar 04 Javascript
angularjs表格ng-table使用备忘录
Mar 09 Javascript
原生js封装二级城市下拉列表的实现代码
Jun 16 Javascript
把多个JavaScript函数绑定到onload事件处理函数上的方法
Sep 04 Javascript
canvas知识总结
Jan 25 Javascript
Angular.js 4.x中表单Template-Driven Forms详解
Apr 25 Javascript
使用Jenkins部署React项目的方法步骤
Mar 11 Javascript
JavaScript DOM常用操作代码汇总
Jul 03 Javascript
three.js 制作动态二维码的示例代码
Jul 31 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
全国FM电台频率大全 - 31 新疆维吾尔族自治区
2020/03/11 无线电
MySQL GBK→UTF-8编码转换
2007/05/24 PHP
PHP中上传多个文件的表单设计例子
2014/11/19 PHP
Android AsyncTack 异步任务实例详解
2016/11/02 PHP
微信开发之php表单微信中自动提交两次问题解决办法
2017/01/08 PHP
详解PHP中的序列化、反序列化操作
2017/03/21 PHP
js document.write()使用介绍
2014/02/21 Javascript
js交换排序 冒泡排序算法(Javascript版)
2014/10/04 Javascript
js控制鼠标事件移动及移出效果显示
2014/10/19 Javascript
Javascript实现div的toggle效果实例分析
2015/06/09 Javascript
JavaScript多并发问题如何处理
2015/10/28 Javascript
javascript实现tab切换特效
2015/11/12 Javascript
使用jQuery监听DOM元素大小变化
2016/02/24 Javascript
jQuery解析返回的xml和json方法详解
2017/01/05 Javascript
JS中利用localStorage防止页面动态添加数据刷新后数据丢失
2017/03/10 Javascript
vue中如何引入jQuery和Bootstrap
2017/04/10 jQuery
JS 学习总结之正则表达式的懒惰性和贪婪性
2017/07/03 Javascript
react学习笔记之state以及setState的使用
2017/12/07 Javascript
js实现敏感词过滤算法及实现逻辑
2018/07/24 Javascript
nodejs使用node-xlsx生成excel的方法示例
2019/08/22 NodeJs
layui中的switch开关实现方法
2019/09/03 Javascript
Python中的with语句与上下文管理器学习总结
2016/06/28 Python
对python读取zip压缩文件里面的csv数据实例详解
2019/02/08 Python
安装Pycharm2019以及配置anconda教程的方法步骤
2019/11/11 Python
python 实现图片上传接口开发 并生成可以访问的图片url
2019/12/18 Python
Python使用configparser库读取配置文件
2020/02/22 Python
python Selenium 库的使用技巧
2020/10/16 Python
几个CSS3的flex弹性盒模型布局的简单例子演示
2016/05/12 HTML / CSS
css3编写浏览器背景渐变背景色的方法
2018/03/05 HTML / CSS
汽车检测与维修专业求职信
2013/10/30 职场文书
精神文明单位申报材料
2014/05/02 职场文书
市场调研项目授权委托书范本
2014/10/04 职场文书
2015年教研员工作总结
2015/05/26 职场文书
运动会广播稿200字
2015/08/19 职场文书
六年级数学教学反思
2016/02/16 职场文书
Apache Pulsar结合Hudi构建Lakehouse方案分析
2022/03/31 Servers