场景

Vue+Openlayers+el-checkbox实现多选配置图层的显示和隐藏:

Vue+Openlayers+el-checkbox实现多选配置图层的显示和隐藏_BADAO_LIUMANG_QIZHI的博客-CSDN博客

上面实现图层的隐藏和显示,如果将图层换为各个地图的图层,那就可以实现切换地图的效果。

首先ol中至少实现加载两种地图。

Vue中使用Openlayers加载OSM(Open Street Map)显示街道地图:

Vue中使用Openlayers加载OSM(Open Street Map)显示街道地图_BADAO_LIUMANG_QIZHI的博客-CSDN博客

Vue+Openlayers实现加载天地图WMTS服务显示:

Vue+Openlayers实现加载天地图WMTS服务显示_BADAO_LIUMANG_QIZHI的博客-CSDN博客

结合以上两种地图加载显示,怎样实现如下切换地图效果

注:

博客:
BADAO_LIUMANG_QIZHI的博客_霸道流氓气质_CSDN博客-C#,SpringBoot,架构之路领域博主
关注公众号
霸道的程序猿
获取编程相关电子书、教程推送与免费下载。

实现

1、页面中添加el-radio-group单选按钮组以及地图map

<template><div><div><el-radio-group v-model="currentMap" @change="changeMap"><el-radio :label="1">天地图</el-radio><el-radio :label="2">OSM地图</el-radio></el-radio-group></div><div id="map" class="map"></div></div>
</template>

2、引入相关依赖

import "ol/ol.css";
import Map from "ol/Map";
import TileLayer from "ol/layer/Tile";
import View from "ol/View";
import WMTS from "ol/source/WMTS";
import WMTSTileGrid from "ol/tilegrid/WMTS";
import { get as getProjection } from "ol/proj.js";
import { getWidth, getTopLeft } from "ol/extent.js";
import OSM from "ol/source/OSM";

3、声明地图、当前选中地图、天地图图层、OSM图层

  data() {return {map: null,currentMap: 1,tiandiLayer: null,osmLayer: null,};

4、声明map

      this.map = new Map({layers: [],target: "map",view: new View({center: [0, 0],zoom: 2,}),});

5、声明天地图

​//天地图参数配置var projection = getProjection("EPSG:3857");var projectionExtent = projection.getExtent();var size = getWidth(projectionExtent) / 256;var resolutions = new Array(18);var matrixIds = new Array(18);for (var z = 1; z < 19; ++z) {resolutions[z] = size / Math.pow(2, z);matrixIds[z] = z;}//天地图图层this.tiandiLayer = new TileLayer({opacity: 0.7,source: new WMTS({url: "http://t0.tianditu.gov.cn/vec_w/wmts?tk=你申请的key",layer: "vec", //注意每个图层这里不同matrixSet: "w",format: "tiles",style: "default",projection: projection,tileGrid: new WMTSTileGrid({origin: getTopLeft(projectionExtent),resolutions: resolutions,matrixIds: matrixIds,}),wrapX: true,}),});​

6、声明OSM

      this.osmLayer = new TileLayer({source: new OSM(),});

7、将图层添加到地图

      this.map.addLayer(this.tiandiLayer);this.map.addLayer(this.osmLayer);

8、判断当前默认显示地图,控制图层显示与隐藏

      if (this.currentMap == 1) {this.tiandiLayer.setVisible(true);this.osmLayer.setVisible(false);}if (this.currentMap == 2) {this.tiandiLayer.setVisible(false);this.osmLayer.setVisible(true);}

9、编写el-radio-group的change事件

    changeMap: function (value) {debuggerswitch (value) {case 1:this.tiandiLayer.setVisible(true);this.osmLayer.setVisible(false);break;case 2:this.tiandiLayer.setVisible(false);this.osmLayer.setVisible(true);break;default:this.tiandiLayer.setVisible(true);this.osmLayer.setVisible(false);}},

10、完整示例代码

​
<template><div><div><el-radio-group v-model="currentMap" @change="changeMap"><el-radio :label="1">天地图</el-radio><el-radio :label="2">OSM地图</el-radio></el-radio-group></div><div id="map" class="map"></div></div>
</template><script>
import "ol/ol.css";
import Map from "ol/Map";
import TileLayer from "ol/layer/Tile";
import View from "ol/View";
import WMTS from "ol/source/WMTS";
import WMTSTileGrid from "ol/tilegrid/WMTS";
import { get as getProjection } from "ol/proj.js";
import { getWidth, getTopLeft } from "ol/extent.js";
import OSM from "ol/source/OSM";
export default {name: "olMapSwitchMap",data() {return {map: null,currentMap: 1,tiandiLayer: null,osmLayer: null,};},mounted() {this.initMap();},methods: {initMap() {this.map = new Map({layers: [],target: "map",view: new View({center: [0, 0],zoom: 2,}),});//天地图参数配置var projection = getProjection("EPSG:3857");var projectionExtent = projection.getExtent();var size = getWidth(projectionExtent) / 256;var resolutions = new Array(18);var matrixIds = new Array(18);for (var z = 1; z < 19; ++z) {resolutions[z] = size / Math.pow(2, z);matrixIds[z] = z;}//天地图图层this.tiandiLayer = new TileLayer({opacity: 0.7,source: new WMTS({url: "http://t0.tianditu.gov.cn/vec_w/wmts?tk=你申请的key",layer: "vec", //注意每个图层这里不同matrixSet: "w",format: "tiles",style: "default",projection: projection,tileGrid: new WMTSTileGrid({origin: getTopLeft(projectionExtent),resolutions: resolutions,matrixIds: matrixIds,}),wrapX: true,}),});this.osmLayer = new TileLayer({source: new OSM(),});this.map.addLayer(this.tiandiLayer);this.map.addLayer(this.osmLayer);if (this.currentMap == 1) {this.tiandiLayer.setVisible(true);this.osmLayer.setVisible(false);}if (this.currentMap == 2) {this.tiandiLayer.setVisible(false);this.osmLayer.setVisible(true);}},changeMap: function (value) {debuggerswitch (value) {case 1:this.tiandiLayer.setVisible(true);this.osmLayer.setVisible(false);break;case 2:this.tiandiLayer.setVisible(false);this.osmLayer.setVisible(true);break;default:this.tiandiLayer.setVisible(true);this.osmLayer.setVisible(false);}},},
};
</script><style scoped>
.map {width: 100%;height: 400px;
}
</style>​

Vue+Openlayers+el-radio实现切换地图显示相关推荐

  1. Vue+Openlayers+Draw实现画笔切换功能,切换画笔为点、线、面

    场景 Vue+Openlayer使用Draw实现交互式绘制线段: Vue+Openlayer使用Draw实现交互式绘制线段_霸道流氓气质的博客-CSDN博客 Vue+Openlayer使用Draw实现 ...

  2. WebGIS实战:Vue+Openlayers实现网络地图的加载与切换

    目录 前言 1.效果图 2.实现步骤 3.下一步计划 相关Web GIS实战信息: 上一篇博客:WebGIS实战:Web GIS开发环境配置 下一篇博客:WebGIS实战:Vue+Openlayers ...

  3. vue实现1-4-9宫格切换

    vue实现1-4-9宫格切换 <!DOCTYPE html> <html lang="en"><head><meta charset=&q ...

  4. vue openlayers 加载高德地图等 gcj02 的图层偏移问题

    vue openlayers 加载高德地图等 gcj02 的图层偏移问题 这个问题是在使用 openlayers 地图引擎加载高德地图或者是谷歌地图都会遇到的问题,所以说呢这篇博文稍微说一下解决办法. ...

  5. 151:vue+openlayers 使用图片来标识不同地图,点击更换底图

    第151个 点击查看专栏目录 本示例的目的是介绍演示如何在vue+openlayers中根据visible的值来显示不同的地图,hover按钮弹出切换弹窗, 每种地图用图片来标识,hover到图片上后 ...

  6. Vue+Openlayers+HIKVSION实现点击摄像头进行预览

    场景 SpringBoot+Vue+HIKVSION实现摄像头多选并多窗口预览(插件版): SpringBoot+Vue+HIKVSION实现摄像头多选并多窗口预览(插件版)_霸道流氓气质的博客-CS ...

  7. Vue+Openlayers+el-checkbox实现多选配置图层的显示和隐藏

    场景 Vue+Openlayers实现地图上绘制线: Vue+Openlayers实现地图上绘制线_BADAO_LIUMANG_QIZHI的博客-CSDN博客 在上面实现加载多个图层的基础上,可以实现 ...

  8. Vue+Openlayers中实现地图旋转

    场景 Vue+Openlayers实现地图上绘制线: Vue+Openlayers实现地图上绘制线_BADAO_LIUMANG_QIZHI的博客-CSDN博客 在上面实现的效果是这样的 此地图的显示时 ...

  9. Vue+Openlayers实现地图上绘制线

    场景 Vue+Openlayers实现显示图片并分优先级多图层加载: Vue+Openlayers实现显示图片并分优先级多图层加载_BADAO_LIUMANG_QIZHI的博客-CSDN博客 上面是添 ...

最新文章

  1. pyspark 核心概念
  2. altium designer 原理图和PCB 多通道设计
  3. BZOJ3233【AHOI2013】找硬币
  4. coreldraw x4怎么会蓝屏_CorelDRAW广告条幅批量制作插件
  5. MySQL中 JSON 数据类型应用
  6. 马云谈 5G 危机;腾讯推出车载版微信;Ant Design 3.22.1 发布 | 极客头条
  7. 经典算法——斐波那契数列
  8. flex图表坐标轴样式设置
  9. 如何在Mac视频中添加表情符号
  10. atitit.html5 vs 原生 app的区别与选择
  11. Linux管理用户组的安装
  12. 利用loic工具进行doss教程(附下载链接官方无后门)
  13. Oracle数据库进行简单优化,Oracle数据库性能优化
  14. 新媒体运营数据分析怎么做?
  15. PS青山绿水婚片处理
  16. 苏州Uber优步司机奖励政策(8月31日至9月6日)
  17. 电子发票全流程电子化管理指南-摘要
  18. 技术总监是干什么的?
  19. hadoop实战(二)
  20. pyspark实现iv特征筛选

热门文章

  1. 期末Java面向对象程序设计复习稳过不挂指南(更新中)
  2. Spring 使用注解@DependsOn控制Bean加载顺序
  3. php扩展实现hook,ThinkPHP3.2 扩展(钩子,HOOK)
  4. Java设计模式-责任链模式
  5. qfile 计算文件有多少行_肉牛不喂精料行吗?如何计算肉牛一天喂多少精料?
  6. 怎么通过id渲染页面_「快页面」动态配置化页面渲染器原理介绍
  7. slicer安装_3D Slicer教程【软件安装及设置】
  8. python url加密解密_小叮当Python进阶(二):爬虫与加密算法Part2之URL与Base64
  9. cstatic 不调用onpaint_干货 | U盘中毒?不可能的事
  10. android 桌面图标创建,android创建桌面图标