openlayers2自带图层开关控件,但是自openlayers3后,不再有这个控件。但是,当了解了openlayers控件开发后,我们可以自己实现这个控件,实现起来也非常之简单。不多说,先看下结果:

文章目录

  • 1、目标
  • 2、控件开发
    • 1)继承
    • 2)控件属性
  • 3、示例
  • 4、存在的问题

1、目标

1)图层开关: 在控件上选中图层,对应的图层显示;取消选中,对应的图层关闭;
2)图层增删联动: 当map中的图层有增删时,控件随之改动。

2、控件开发

1)继承

图层开关控件类:ol.control.LayerSwitch
父类:ol.control.Control

ol.control.LayerSwitch = function(opt_options){var options = opt_options ? opt_options : {};this.element = document.createElement('div');var defaultControlClassName = 'ol-unselectable ol-control';var className = 'ol-control-layerswitch';this.element.className = defaultControlClassName + ' ' + className;ol.control.Control.call(this, {element: this.element,target: options.target})
}
ol.inherits(ol.control.LayerSwitch, ol.control.Control);

2)控件属性

主要有三给属性
1、初始化控件:用来实现控件初始化时的UI设置;
2、增加图层选项:添加图层时自动触发
3、移除图层选项:移除图层时自动触发

初始化:

ol.control.LayerSwitch.prototype.init = function(){var layers = this.getMap().getLayers();layers.forEach(element => {this.addLayerItem(element);});
}

增加图层选项:


/*** 添加选项* @param {ol.layer.Layer} layer*/
ol.control.LayerSwitch.prototype.addLayerItem = function(layer){var div = document.createElement('div');div.className = 'ol-control-layerswitch-opt';div.setAttribute('layerid', ol.getUid(layer).toString());var child = document.createElement('input');child.setAttribute('type', 'checkbox');child.onclick = function(evt){layer.setVisible(evt.target.checked);};child.checked = true;div.appendChild(child);var label = document.createElement('span');label.innerText = layer.get('title');//以图层的title属性作为显示内容div.appendChild(label);this.element.appendChild(div);
}

移除图层选项:

/*** 移除选项* @param {ol.layer.Layer} layer*/
ol.control.LayerSwitch.prototype.removeLayerItem = function(layer){var childs = this.element.getElementsByClassName('ol-control-layerswitch-opt')for (let index = 0; index < childs.length; index++) {const divChild = childs[index];if(divChild.getAttribute('layerid') === ol.getUid(layer).toString()){this.element.removeChild(divChild);}}
}

3、示例

4、存在的问题

ol.getUid(layer)报错
添加或者增删图层时,用ol.getUid(layer)来获取到图层的ID,作为唯一标识,但是发现引用ttps://openlayers.org/en/v4.6.5/build/ol.js这个js时,ol没有这个方法,在官网API中也没找到。但是引用下载到本地的openlayers的v.4.6.5版本中的ol-debug.js,是可以的。
openlayers5中ol已经增加了gitUid方法。

完整代码就示例见:《openlayers图层开关控件》

openlayers图层开关控件相关推荐

  1. openlayer 图层上下_OpenLayers实现图层切换控件

    OpenLayers并没有封装图层切换的控件,所以我们需要自己来实现图层控件. 自定义图层切换控件的原理很简单:显示某个图层时,将其他图层隐藏. 完整代码: layerSwitch.html: 图层切 ...

  2. Qt QWidget实现开关控件SwithButton(SlipButton)

    前言 Qt做界面的时候常常会用到开关控件,类似于CheckButton有两种状态,只是界面表现形式不一样而已.本文通过QWidget类来实现一个开关控件SwitchBtn(有些平台上又称为SlipBu ...

  3. weui-switch开关控件,表单提交后如何取值

    最近在学习weui这个框架,做了一些小的试验,发现weui-switch控件直接提交不能获取到表单信息,在segmentfault上发现也有人提了这个问题,有人说可以设置一个隐含标签来捕获开关的状态, ...

  4. Qt工作笔记-自定义开关控件

    1.自定义开关控件: 2.点击有动画效果: 3.在动画效果中,不再响应信号: 运行截图如下: 输出响应信号: 源码如下: myonoff.h #ifndef MYONOFF_H #define MYO ...

  5. ionic Toggle(开关控件)

    官网地址: https://www.runoob.com/try/try.php?filename=ionic_toggle <html ng-app="ionicApp"& ...

  6. Android自己写的三款实用开关控件

    2019独角兽企业重金招聘Python工程师标准>>> 自定义开关控件,代码简单,比较实用. http://www.see-source.com/androidwidget/list ...

  7. Bootstrap Switch 开关控件

    Bootstrap Switch开关控件网址:http://www.bootcss.com/p/bootstrap-switch/ 引入. Bootstrap Switch插件和依赖插件,并初始化开关 ...

  8. Android 开关控件Switch

    扣扣技术交流群:460189483 目录:     1.应用场景与概述     2.常用属性     3.简单使用     4.更改默认Switch的样式     5.自定义Switch      1 ...

  9. Android 基础 View 系列之 仿IPhone 开关控件

    极力推荐Android 开发大总结文章:欢迎收藏程序员Android 力荐 ,Android 开发者需要的必备技能 自定义View 是Android中常用的方法之一,本章实现类似于IPhone 开关控 ...

最新文章

  1. 解决mysql“Access denied for user‘root‘@‘IP地址‘“问题
  2. EasyUI中Tabs标签页的简单使用
  3. JPA EntityManagers,事务及其周围的一切
  4. SpringMVC 解决中文乱码的过滤器
  5. 线性表(插入/清除数据/快慢指针查找中间数据)
  6. 差分信号,差分对和耦合(一)——基本概念介绍
  7. 微信小助手WeChatExtension中文版安装教程
  8. nandflash oob解析
  9. 字节跳动:雀魂启动!(Python语言实现)
  10. 塞拉菲娜创始人 - 钰儿
  11. 品牌策划中该如何在“细节之处”刺激受众痛点?
  12. 解决java.io.IOException: Cannot run program cygpath: CreateProcess error=2, 系统找不到指定的文件 的错误...
  13. http://jingyan.baidu.com/article/d169e186aa8728436611d8f3.html
  14. 美股网页表格数据爬虫设计
  15. C语言自定义函数的调用
  16. OSChina 周六乱弹 ——泡妞指南
  17. 孙陶然:什么是“三有”人才观
  18. 7-4 Swan学院社团招新 (20 分)
  19. 2021上半年程序员新书大盘点
  20. C语言:字符串数组与字符串指针数组

热门文章

  1. 在哪里设置自动锁定计算机,win10如何设置自动锁定屏幕_win10设置自动锁屏的步骤...
  2. 【总结】计算几何模板
  3. linux命令之hdparm
  4. JavaScript--ES6学习笔记
  5. opencv 直线拟合
  6. html5 lob,GitHub - LobbL/cax: HTML5 Canvas 2D Rendering Engine - 小程序、小游戏以及 Web 通用 Canvas 渲染引擎...
  7. 关于c的烫烫烫烫烫烫
  8. C++中关于类的析构函数无法调用的问题
  9. photoshop android 切图插件,CutSlice me 切图神器(PhotoShop强力割图插件)
  10. 中心开孔方板的Matlab有限元编程