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.artwl.thickbox.js  一个非常简单好用的jQuery弹出层插件
Mar 01 Javascript
js解析xml字符串和xml文档实现原理及代码(针对ie与火狐)
Feb 02 Javascript
jQuery判断checkbox(复选框)是否被选中以及全选、反选实现代码
Feb 21 Javascript
javascript中bind函数的作用实例介绍
Sep 28 Javascript
使用jQuery中的wrap()函数操作HTML元素的教程
May 24 Javascript
基于bootstrap风格的弹框插件
Dec 28 Javascript
微信小程序组件之srcoll-view的详解
Oct 19 Javascript
vue实现a标签点击高亮方法
Mar 17 Javascript
详解使用VUE搭建后台管理系统(vue-cli更新至3.0)
Aug 22 Javascript
微信小程序自定义select下拉选项框组件的实现代码
Aug 28 Javascript
countUp.js实现数字滚动效果
Oct 18 Javascript
vue监听键盘事件的相关总结
Jan 29 Vue.js
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
四个常见html网页乱码问题及解决办法
2015/09/08 PHP
ThinkPHP框架整合微信支付之刷卡模式图文详解
2019/04/10 PHP
jquery JSON的解析方式
2009/07/25 Javascript
JavaScript DOM 学习第七章 表单的扩展
2010/02/19 Javascript
ASP.NET jQuery 实例12 通过使用jQuery validation插件简单实现用户注册页面验证功能
2012/02/03 Javascript
jQuery 的全选(全非选)即取得被选中的值使用介绍
2013/11/12 Javascript
7个JS基础知识总结
2014/03/05 Javascript
js判断元素是否隐藏的方法
2014/06/09 Javascript
javascript实现切换td中的值
2014/12/05 Javascript
jQuery学习笔记之基础中的基础
2015/01/19 Javascript
如何利用AngularJS打造一款简单Web应用
2015/12/05 Javascript
js判断输入字符串是否为空、空格、null的方法总结
2016/06/14 Javascript
bootstrapValidator表单验证插件学习
2016/12/30 Javascript
js遍历获取表格内数据的方法(必看)
2017/04/06 Javascript
Vue.js对象转换实例
2017/06/07 Javascript
React Native日期时间选择组件的示例代码
2018/04/27 Javascript
如何更好的编写js async函数
2018/05/13 Javascript
jQuery实现侧边栏隐藏与显示的方法详解
2018/12/22 jQuery
前端开发之便利店收银系统代码
2019/12/27 Javascript
python使用正则表达式检测密码强度源码分享
2014/06/11 Python
解析Python中while true的使用
2015/10/13 Python
python入门基础之用户输入与模块初认识
2016/11/14 Python
Python运维之获取系统CPU信息的实现方法
2018/06/11 Python
python儿童学游戏编程知识点总结
2019/06/03 Python
解决django后台样式丢失,css资源加载失败的问题
2019/06/11 Python
Python中内建模块collections如何使用
2020/05/27 Python
Python基于mediainfo批量重命名图片文件
2020/12/29 Python
Python实现石头剪刀布游戏
2021/01/20 Python
html5中如何将图片的绝对路径转换成文件对象
2018/01/11 HTML / CSS
html5菜单折纸效果
2014/04/22 HTML / CSS
精伦电子Java笔试题
2013/01/16 面试题
邮政员工辞职信
2014/01/16 职场文书
数控专业个人求职信范文
2014/02/05 职场文书
心灵捕手观后感
2015/06/02 职场文书
优秀共产党员事迹材料2016
2016/02/29 职场文书
Golang解析JSON对象
2022/04/30 Golang