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 相关文章推荐
jQuery1.5.1 animate方法源码阅读
Apr 05 Javascript
JavaScript高级程序设计(第3版)学习笔记2 js基础语法
Oct 11 Javascript
jquery二级导航内容均分的原理及实现
Aug 13 Javascript
父页面显示遮罩层弹出半透明状态的dialog
Mar 04 Javascript
jQuery控制TR显示隐藏的几种方法
Jun 18 Javascript
javascript获取元素离文档各边距离的方法
Feb 13 Javascript
Bootstrap输入框组件简单实现代码
Mar 06 Javascript
基于 webpack2 实现的多入口项目脚手架详解
Jun 26 Javascript
Angularjs自定义指令实现分页插件(DEMO)
Sep 16 Javascript
vue 多入口文件搭建 vue多页面搭建的实例讲解
Mar 12 Javascript
利用H5api实现时钟的绘制(javascript)
Sep 13 Javascript
解决nuxt 自定义全局方法,全局属性,全局变量的问题
Nov 05 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
后宫无数却洁身自好的男主,唐三只爱小舞
2020/03/02 国漫
Uchome1.2 1.5 代码学习 common.php
2009/04/24 PHP
PHP操作xml代码
2010/06/17 PHP
PHP自动选择 连接本地还是远程数据库
2010/12/02 PHP
360通用php防护代码(使用操作详解)
2013/06/18 PHP
php判断文件上传类型及过滤不安全数据的方法
2014/12/17 PHP
php实现购物车功能(以大苹果购物网为例)
2017/03/09 PHP
php微信开发之谷歌测距
2018/06/14 PHP
jquery.Jcrop结合JAVA后台实现图片裁剪上传实例
2016/11/05 Javascript
bootstrap模态框跳转到当前模板页面 框消失了而背景存在问题的解决方法
2020/11/30 Javascript
JavaScript利用正则表达式替换字符串中的内容
2016/12/12 Javascript
Bootstrap导航中表单简单实现代码
2017/03/06 Javascript
jQuery实现的手风琴侧边菜单效果
2017/03/29 jQuery
layer插件select选中默认值的方法
2018/08/14 Javascript
解决layui前端框架 form表单,table表等内置控件不显示的问题
2018/08/19 Javascript
Jquery获取radio选中值实例总结
2019/01/17 jQuery
基于Fixed定位的框选功能的实现代码
2019/05/13 Javascript
jquery实现自定义树形表格的方法【自定义树形结构table】
2019/07/12 jQuery
微信小程序 wx:for遍历循环使用实例解析
2019/09/09 Javascript
layui table 表格上添加日期控件的两种方法
2019/09/28 Javascript
antd-mobile ListView长列表的数据更新遇到的坑
2020/04/08 Javascript
[28:42]Ti4正赛VG vs NEWBEE1
2014/07/19 DOTA
python中的装饰器详解
2015/04/13 Python
python如何在终端里面显示一张图片
2016/08/17 Python
python 通过字符串调用对象属性或方法的实例讲解
2018/04/21 Python
python 链接sqlserver 写接口实例
2020/03/11 Python
css3的transform中scale缩放详解
2014/12/08 HTML / CSS
CSS3弹性盒模型flex box快速入门心得(必看篇)
2016/05/24 HTML / CSS
英国领先的名牌服装折扣零售商:Brown Bag Clothing
2019/01/08 全球购物
香港中原电器网上商店:Chung Yuen
2019/06/26 全球购物
日期和时间问题
2015/01/04 面试题
材料会计岗位职责
2014/03/06 职场文书
计算机毕业生自荐信范文
2014/03/23 职场文书
2014年药店店长工作总结
2014/11/17 职场文书
Ajax实现局部刷新的方法实例
2021/03/31 Javascript
volatile保证可见性及重排序方法
2022/08/05 Java/Android