vue+leaflet笔记之地图卷帘

news2024/11/24 19:01:45

vue+leaflet笔记之地图卷帘

本文介绍了Web端使用Leaflet开发库实现地图卷帘效果的方法 (底图来源:中科星图),结合leaflet-side-by-side插件可以快速简单地实现地图分屏对比效果 ,示例效果如下图所示。


开发环境

Vue开发库:3.2.37 & Leaflet开发库:1.9.3

Leaflet插件:leaflet-side-by-side


使用教程

安装依赖库

通过github仓库下载,引入项目中

leaflet-side-by-side仓库 https://github.com/digidem/leaflet-side-by-side

克隆leaflet-side-by-side仓库,下载完毕后,进入leaflet-side-by-side文件夹,将该目录下的leaflet-side-by-side.jsleaflet-side-by-side.min.js引入本地项目中。

# 克隆leaflet-side-by-side仓库
git clone https://github.com/digidem/leaflet-side-by-side.git

使用简介

// 引入leaflet-side-by-side库
import "./store/leaflet-side-by-side.js";
/** 地图卷帘对比,图源可随意切换 */
const leftLayers = L.tileLayer(`https://tiles1.geovisearth.com/base/v1/vec/{z}/{x}/{y}?		token=${geovisearthToken}`);
const rightLayers = L.tileLayer(`https://tiles1.geovisearth.com/base/v1/img/{z}/{x}/{y}?	token=${geovisearthToken}`);
const rightLayersText = L.tileLayer(`https://tiles1.geovisearth.com/base/v1/cia/{z}/{x}/{y}?token=${geovisearthToken}`);
const purplishBlueLayer = L.tileLayer(`https://map.geoq.cn/ArcGIS/rest/services/ChinaOnlineStreetPurplishBlue/MapServer/tile/{z}/{y}/{x}`)
  // 添加图层
  map.addLayer(leftLayers)
  map.addLayer(rightLayers)
  map.addLayer(rightLayersText)
  // 卷帘地图效果(注意:左右图层源不能一致,否则只能显示一个)
let sideBySide = L.control.sideBySide(leftLayers, [rightLayersText, rightLayers], { padding: 0, thumbSize: 42 }).addTo(map);
  map.addLayer(purplishBlueLayer)
// 修改左侧图源
sideBySide.setLeftLayers(purplishBlueLayer)
// 修改右侧图源
// sideBySide.setRightLayers(purplishBlueLayer)

核心方法如下:

// 参数分为别左、右图层(数组)
L.control.sideBySide(leftLayer[s], rightLayer[s])
// 参数分为别左、右图层(数组)、选项配置
L.control.sideBySide(leftLayer[s], rightLayer[s],options)

options选项的参数

参数类型默认描述
paddingInteger0限制往地图边缘左右滑动的范围(以像素为单位)
thumbSizeInteger3滑块的宽度(推荐默认,否则滑块不居于分屏中央)

详细源码(Vue3)

<template>
  <div class="app-contain">
    <!-- leaflet 地图容器 -->
    <div id="myMap"></div>
  </div>
</template>
<script setup>
// 引入样式
import L from 'leaflet';
import 'leaflet/dist/leaflet.css'
// 引入leaflet-side-by-side库
import "./store/leaflet-side-by-side.js";
import { onMounted } from 'vue'
// 星图地球token
let geovisearthToken = 'TOURS_TOKEN'
const initMap = () => {
  let map = L.map('myMap', {  //需绑定地图容器div的id
    attributionControl: false,
    zoomControl: true, // 显示缩放控件
    // 最小显示等级
    minZoom: 1,
    // 最大显示等级
    maxZoom: 18,
    crs: L.CRS.EPSG3857,//设置坐标系类型  EPSG3857伪墨卡托投影
    scrollWheelZoom: true, //默认开启鼠标滚轮缩放
    // 限制显示地理范围
    maxBounds: L.latLngBounds(L.latLng(-90, -180), L.latLng(90, 180)),
    // 限制显示地理范围
  }).setView([28.907459, 120.003576], 6)
  // 比例尺
  L.control.scale({ maxWidth: 240, metric: true, imperial: false, position: 'bottomleft' }).addTo(map);
  /** 地图卷帘对比 */
  const leftLayers = L.tileLayer(`https://tiles1.geovisearth.com/base/v1/vec/{z}/{x}/{y}?token=${geovisearthToken}`);
  const rightLayers = L.tileLayer(`https://tiles1.geovisearth.com/base/v1/img/{z}/{x}/{y}?token=${geovisearthToken}`);
  const rightLayersText = L.tileLayer(`https://tiles1.geovisearth.com/base/v1/cia/{z}/{x}/{y}?token=${geovisearthToken}`);
  const purplishBlueLayer = L.tileLayer(`https://map.geoq.cn/ArcGIS/rest/services/ChinaOnlineStreetPurplishBlue/MapServer/tile/{z}/{y}/{x}`)
  map.addLayer(leftLayers)
  map.addLayer(rightLayers)
  map.addLayer(rightLayersText)
  // 卷帘地图效果(注意:左右图层源不能一致,否则只能显示一个)
  let sideBySide = L.control.sideBySide(leftLayers, [rightLayersText, rightLayers], { padding: 0, thumbSize: 42 }).addTo(map);
  map.addLayer(purplishBlueLayer)
  sideBySide.setLeftLayers(purplishBlueLayer)
  // 修改右侧图源
  // sideBySide.setRightLayers(purplishBlueLayer)
}

onMounted(() => {
  initMap()
})
</script>

<style scoped>
#myMap {
  width: 96vw;
  height: 96vh;
}
</style>

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/708300.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

FPGA-DFPGL22学习5-VERILOG

系列文章之 上章 FPGA-DFPGL22学习4-仿真平台学习 文章目录 系列文章之 上章前言一、Verilog 简介二、Verilog基础1.逻辑值2.进制3.标识符4.数据类型寄存器类型线网类型参数类型 5.运算符 三、Verilog 程序框架1.注释2.关键字3.程序框架 四、Verilog 程序语句1.结构语句2.赋值…

微信小程序+SpringBoot接入后台服务,接口数据来自后端

前言 前两天开发了一个微信小程序项目&#xff0c;只不过接口数据是自己设置的假数据。然后我就想将这些假数据替换掉。这些数据来自接口&#xff0c;之前做过前后端分离的项目&#xff0c;我就想能不能直接调用那些后端数据接口。结果是可以的。以下是自己编写的部分方法 步骤…

卷积神经网络--猫狗系列之下载、导入数据集

(由于是学习&#xff0c;所以文章会有一些报错及解决办法) 在Kaggle()获取数据集&#xff1a;&#xff08;没有账号先去注册一个账号&#xff0c;在注册时可能会出现的问题见Kaggle注册出现一排“Captcha must be filled out.”&#xff01;&#xff09; https://www.kaggle.…

DOM编程事件与简单编程

文章目录 事件绑定绑定式事件监听方法event 事件对象client、offsetkeyCode 键盘事件事件冒泡阻止浏览器默认行为 DOM编程用户名输入框长度限制鼠标移入移出复选框全选DOM编程实现动态时钟第一种&#xff1a;第二种&#xff1a;第三种&#xff1a; 事件绑定 DOM编程中的事件&a…

excel只显示想要的内容

是 后面的FG等列是不需要的&#xff0c;选择F列&#xff0c;ctrl shift 右箭头 。选中后隐藏。

Ansible创建逻辑卷

Ansible创建逻辑卷&#xff1a; 环境准备&#xff1a; 清单文件&#xff1a; [dev] 192.168.110.129 [prod] 192.168.110.132 [all:vars] ansible_userroot ansible_passwordredhat磁盘准备&#xff1a; 在一台主机上添加一块sata接口的磁盘&#xff0c;一块不添加。 192.…

Linux--获取一长串目录的结构指令:tree

注意&#xff1a;这个tree指令不是Linux自带的&#xff0c;需要下载 yum install -y tree (-y的作用是免确定) 示例&#xff1a;

UE5 读写本地JSON,发送HTTP请求(get)

UE5 读写本地JSON&#xff0c;发送HTTP请求&#xff08;get&#xff09; 没有使用插件&#xff0c;就用UE提供的库开发&#xff08;推荐使用插件VaRest在虚幻商城里有&#xff09; PCHUsage PCHUsageMode.UseExplicitOrSharedPCHs;PublicDependencyModuleNames.AddRange(new …

win10 编译hadoop源码报错

报错信息&#xff1a; 信息: 用提供的模式无法找到文件。 "devenv command was not found. Verify your compiler installation level."解决方案 右键&#xff0c;以管理员身份打开 之后再次执行mvn 命令即可. 也可以再打开的时候先执行一下命令&#xff1a; dev…

数字化是信息化的升级吗?数字化信息化这两者有什么联系和区别?

也可以这样说吧&#xff0c;但总是太抽象&#xff0c;不准确的&#xff0c;两者还是有很大区别的。 首先来看信息化、数字化具体是什么意思 想要明白两者之间的差异&#xff0c;首先要搞清楚他们的出处—— 所谓信息化、数字化还有现在提很多的智能化&#xff0c;其实都是从…

如何免费将springboot+vue项目部署上线(云服务器+宝塔面板)

本文整个流程是在博主完成一次项目上线全过程后复盘的记录&#xff0c;有没有写到的细节不清楚的可以私聊提问&#xff0c;这里选用的是阿里云服务器&#xff0c;阿里云对学生用户可以免费使用一个月服务器&#xff0c;不定期也有活动&#xff0c;我白嫖了7个月服务器&#xff…

ZYNQ——脉宽调制之呼吸灯实现

文章目录 原理简介实验代码软件仿真板上验证 原理简介 呼吸灯的实现过程就是把不同占空比的脉冲输出后加在LED上&#xff0c;LED灯就会显示不同的亮度&#xff0c;通过不断地调节方波的占空比&#xff0c;LED灯的亮度也会跟着变化&#xff0c;看起来就像是“呼吸”一样。 要得…

陪诊小程序系统|陪诊软件开发|陪诊系统功能和特点

随着医疗服务的逐步改善和完善&#xff0c;越来越多的人群开始走向医院就诊&#xff0c;而其中不少人往往需要有人陪同前往&#xff0c;这就导致了许多矛盾与问题的发生&#xff0c;比如长时间等待、找不到合适的陪诊人员等。因此为人们提供一种方便快捷的陪诊服务成为了一种新…

如何挽救误剪切的TF卡数据 ?三招救援

在日常使用TF卡过程中&#xff0c;我们可能会遇到误操作导致数据被剪切并丢失的情况。这无疑给我们带来了困扰&#xff0c;因为我们可能丢失了重要的照片、视频、文档等文件。然而&#xff0c;不必过于担心&#xff0c;因为TF卡数据剪切后的恢复仍然有希望。本文将向您介绍几种…

基于DeepLabv3Plus开发构建人脸人像分割系统

在图像分割领域中有不少优秀出色的网络&#xff0c;DeepLab系列就是其中非常经典的分支之一&#xff0c;在之前的很多项目中陆续都已经有接触到了&#xff0c;在处理图像分割中表现出色。 DeepLabV3Plus是一种用于语义分割任务的深度学习模型&#xff0c;它是DeepLab系列模型的…

市场营销书籍推荐,这些书帮你学好营销

市场营销一直是商业运作中的重要环节&#xff0c;因此市场营销的知识一直备受关注。在这篇文章中&#xff0c;小编将向你推荐三本经典市场营销书籍&#xff0c;通过阅读这些书籍能让你更深入了解市场营销的基本概念和策略。 1、《经理人参阅&#xff1a;市场营销》 《经理人参…

高效游戏项目进度管理指南:打造顺畅开发之路!

完成一个游戏项目可能是一项具有挑战性的任务&#xff0c;特别是当你刚刚开始时。为了确保你的项目在预算内按时运行&#xff0c;制定计划并管理你的进度是很重要的。以下是一些帮助你管理游戏项目进度的技巧。 1、明确游戏目标: 在开始之前&#xff0c;你必须明确项目的范围以…

附件类文件存储在环信和不存储在环信时的两种实现方式

场景一: 附件类文件存储在环信服务器 使用环信EMChatManager#downloadAttachment下载附件方案 &#xff08;本篇文章以图片消息为例&#xff0c;其他附件类消息类似&#xff09;&#xff1a; 一、 通过EMFileMessageBody#getLocalUrl判断有没有本地文件&#xff1b; EMImageM…

ROS学习篇之硬件准备(零)-thinkbook16+锐龙版 安装ubuntu20.04遇到的各种坑

文章目录 一.计算机配置二.遇到的问题及解决办法1.键盘失灵2.无法联wifi3.蓝牙搜索不到设备4.无法开热点 三.最后的感想 一.计算机配置 CPU: AMD R7 6800H &#xff08;网卡&#xff0c;娱乐大师读出来的不对&#xff0c;在windos系统下&#xff0c;联想管家读出来网卡的型号是…

C++数据结构笔记(5)栈的顺序存储结构实现

1.对于栈和队列&#xff0c;相比于数组和线性表&#xff0c;使用规则受到了限制&#xff0c;因此也被称为“受限线性表”。 2.对于栈类型来说&#xff0c;元素符合先进后出的规律&#xff0c;且栈中的元素不能自由遍历。 3.栈的顺序存储结构简称为顺序栈&#xff0c;其思想是…