【WebGIS】Vue3使用 VueLeaflet + 天地图 搭建地图可视化平台(基础用法)

初始化

创建项目

  • nodejs 18.0.6
  • npm 9.5.1
    在这里插入图片描述

引入地图服务

VueLeaflet

GitHub - vue-leaflet/vue-leaflet: vue-leaflet 与 vue3 兼容

Vue Leaflet (vue2-leaflet)

  1. package.josn安装版本

直接添加四个依赖

{// ..."scripts": {// ...},"dependencies": {"leaflet-velocity": "^2.1.4","ts-debounce": "^4.0.0",// ...},"devDependencies": {"@types/leaflet": "^1.9.0","leaflet": "^1.9.4",// ... }
}
  1. 直接在 src 目录下引入 VueLeaflt 包本地 VueLeaflt组件压缩包
  2. 新建 map 地图组件使用 VueLeaflet 地图框架
<template><div id="map"><div class="map-container"><!-- 地图组件 --><div class="map"><l-mapref="map"v-model:zoom="zoom":center="mapCenter":attribution-control="false":zoom-control="false"><l-layer-group v-for="(item, index) in baseLayers" :key="index"><!-- 地图底图 --><l-layer-group><l-tile-layerv-if="item.show":url="item.url"layer-type="base":name="item.name"></l-tile-layer></l-layer-group></l-layer-group></l-map></div></div></div></template>

JavaScript 引入

<script setup lang="ts">
import { ref, onUnmounted } from 'vue'
import { LMap, LLayerGroup, LTileLayer } from '@/VueLeaflet/components/index'
import 'leaflet/dist/leaflet.css'</srcipt>
  1. 切记使用标签时需要先引入
import {LMap,LLayerGroup,LTileLayer,// ...
} from '@/VueLeaflet/components/index';

天地图

天地图 开发管理平台 (tianditu.gov.cn)

天地图API (tianditu.gov.cn)

创建应用获取 key 密钥, 绘制地图地图

// 获取env密钥
const TIANDITU_KEY = import.meta.env.VITE_TIANDITU_KEY;// 地图底图
const baseLayers = ref([{index: 1,name: '行政图',url: `https://t0.tianditu.gov.cn/DataServer?T=vec_w&X={x}&Y={y}&L={z}&tk=${TIANDITU_KEY}`,// url: '/map/{z}/{x}/{y}.png',// 矢量注记anno: `https://t0.tianditu.gov.cn/DataServer?T=cva_w&X={x}&Y={y}&L={z}&tk=${TIANDITU_KEY}`,show: true,},{index: 2,name: '影像图',url: `https://t0.tianditu.gov.cn/DataServer?T=img_w&X={x}&Y={y}&L={z}&tk=${TIANDITU_KEY}`,anno: `https://t0.tianditu.gov.cn/DataServer?T=cia_w&X={x}&Y={y}&L={z}&tk=${TIANDITU_KEY}`,show: false,},{index: 3,name: '地形图',url: `https://t0.tianditu.gov.cn/DataServer?T=ter_w&X={x}&Y={y}&L={z}&tk=${TIANDITU_KEY}`,anno: `https://t0.tianditu.gov.cn/DataServer?T=cta_w&X={x}&Y={y}&L={z}&tk=${TIANDITU_KEY}`,show: false,},
])

结合组件

创建地图组件map 使用VueLeaflet嵌套天地图服务

供其他页面使用

<template><div id="map"><div class="map-container"><!-- 地图组件 --><div class="map"><l-mapref="map"v-model:zoom="zoom":center="mapCenter":attribution-control="false":zoom-control="false"><l-layer-group v-for="(item, index) in baseLayers" :key="index"><!-- 地图底图 --><l-layer-group><l-tile-layerv-if="item.show":url="item.url"layer-type="base":name="item.name"></l-tile-layer><!--   省市标注图层    --><l-tile-layerv-if="item.anno && item.show":url="item.anno"layer-type="annotation":name="item.name + '标注'"></l-tile-layer></l-layer-group></l-layer-group></l-map></div></div></div></template><script setup lang="ts">
import { ref, onUnmounted } from 'vue'
import { LMap, LLayerGroup, LTileLayer } from '@/VueLeaflet/components/index'
import 'leaflet/dist/leaflet.css'const map = ref()
const mapCenter = ref([24.611, 113.5387])
const zoom = ref(9)const TIANDITU_KEY = import.meta.env.VITE_TIANDITU_KEY;// 地图底图
const baseLayers = ref([{index: 1,name: '行政图',url: `https://t0.tianditu.gov.cn/DataServer?T=vec_w&X={x}&Y={y}&L={z}&tk=${TIANDITU_KEY}`,// url: '/map/{z}/{x}/{y}.png',// 矢量注记anno: `https://t0.tianditu.gov.cn/DataServer?T=cva_w&X={x}&Y={y}&L={z}&tk=${TIANDITU_KEY}`,show: true,},{index: 2,name: '影像图',url: `https://t0.tianditu.gov.cn/DataServer?T=img_w&X={x}&Y={y}&L={z}&tk=${TIANDITU_KEY}`,anno: `https://t0.tianditu.gov.cn/DataServer?T=cia_w&X={x}&Y={y}&L={z}&tk=${TIANDITU_KEY}`,show: false,},{index: 3,name: '地形图',url: `https://t0.tianditu.gov.cn/DataServer?T=ter_w&X={x}&Y={y}&L={z}&tk=${TIANDITU_KEY}`,anno: `https://t0.tianditu.gov.cn/DataServer?T=cta_w&X={x}&Y={y}&L={z}&tk=${TIANDITU_KEY}`,show: false,},
])</script><style lang="scss" scoped>
#map {
}.map-container {position: relative;height: 100vh;width: 100vw;overflow: hidden;
}.map {height: 100%;width: 100%;
}</style>

地图API处理

marker叠加标记点

基础叠加: 叠加marker图片

示例叠加 雷电图标 自动站图标, 提供 宽度、高度、经度、纬度、图标路径

        <!--   marker图层    --><l-layer-group><l-markerv-for="(marker, markerIndex) in markers":key="markerIndex":lat-lng="[marker.latitude, marker.longitude]"><!--  展示雷达 自动站 marker   --><l-ico:icon-size="[marker.width, marker.height]":icon-anchor="[18, 18]":class-name="'my-div-icon'":icon-url="marker.iconPath"/></l-marker></l-layer-group>

pinia全局管理 雷电数据内容

  const getAllThunderData = () => {const width = 20;const height = 20;thunderData.value = thunderData.value.map((point, index) => ({...point,id: index + 1, // 累加idwidth,height: point.intensity < 0 ? height / 5 : height, // 负号是长方形iconPath:point.intensity >= 0? '/src/assets/images/icon/windArrow/positive.png' // intensity雷暴强度 >= 0: '/src/assets/images/icon/windArrow/negative.png',type: 'thunder',}));return thunderData.value;};

基础叠加显示数值,不显示图标

示例展示 降水数据,直接将降水数值叠加在地图上

也是使用 l-icon 标签,只不过不添加 :icon-url 字段

直接在icon里面使用 div 展示数据即可

        <!--   marker图层    --><l-layer-group><l-markerv-for="(marker, markerIndex) in markers":key="markerIndex":lat-lng="[marker.latitude, marker.longitude]"><!-- 显示降水数值 --><l-iconv-if="marker.type === 'rain'":icon-size="[20, 28]":icon-anchor="[28, 28]":class-name="'my-div-icon'"><div class="rain-marker">{{ marker.rainfall }}</div></l-icon></l-marker></l-layer-group>

绘制区域轮廓

DataV.GeoAtlas地理小工具系列 (aliyun.com)

访问网址, 下载所需区域的GeoJSON数据并保存, 最细颗粒度为 区

  1. 读取 assets 下的 json 数据
import {LGeoJson,
} from '@/VueLeaflet/components/index';
import type { GeoJSON } from 'geojson';// GeoJSON 数据
const geoJsonData = ref<GeoJSON | null>(null);// 样式
const geoJsonOptions = ref({style: {color: '#3388ff',weight: 2,opacity: 1, // 边界透明度fillColor: '#3388ff',fillOpacity: 0.2 // 填充透明度}
});// 加载  GeoJSON 数据
const loadGeoJsonData = async () => {try {const response = await fetch('/src/assets/json/xxxx.json');const data = await response.json();geoJsonData.value = data;} catch (error) {console.error('加载 GeoJSON 数据失败:', error);}
};onMounted(() => {loadGeoJsonData();
});
  1. 在地图上进行绘制
<l-layer-group v-for="(item, index) in baseLayers" :key="index"><!--  GeoJSON 图层轮廓 --><l-layer-group><l-geo-jsonv-if="geoJsonData":geojson="geoJsonData":options="geoJsonOptions"/></l-layer-group>// ......

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

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

相关文章

OpenCV 开发 -- 图像阈值处理

文章目录[toc]1 基本概念2 简单阈值处理cv2.threshold3 自适应阈值处理cv2.adaptiveThreshold更多精彩内容&#x1f449;内容导航 &#x1f448;&#x1f449;OpenCV开发 &#x1f448;1 基本概念 图像阈值处理&#xff08;Thresholding&#xff09;是图像处理中的一种基本技术…

单串口服务器-工业级串口联网解决方案

在工业自动化、智能电网、环境监测等领域&#xff0c;传统串口设备&#xff08;如PLC、传感器、仪表等&#xff09;的网络化升级需求日益增长。博为智能单串口服务器凭借高性能硬件架构、多协议支持和工业级可靠性&#xff0c;为RS485设备提供稳定、高效的TCP/IP网络接入能力&a…

第 9 篇:深入浅出学 Java 语言(JDK8 版)—— 吃透泛型机制,筑牢 Java 类型安全防线

简介&#xff1a;聚焦 Java 泛型这一“类型安全保障”核心技术&#xff0c;从泛型解决的核心痛点&#xff08;非泛型代码的运行时类型错误、强制类型转换冗余&#xff09;切入&#xff0c;详解泛型的本质&#xff08;参数化类型&#xff09;、核心用法&#xff08;泛型类/接口/…

MySQL和Redis的数据一致性问题与业界常见解法

一、为什么会出现数据不一致&#xff1f; 根本原因在于&#xff1a;这是一个涉及两个独立存储系统的数据更新操作&#xff0c;它无法被包装成一个原子操作&#xff08;分布式事务&#xff09;。更新数据库和更新缓存是两个独立的步骤&#xff0c;无论在代码中如何排列这两个步骤…

coolshell文章阅读摘抄

coolshell文章阅读摘抄打好基础学好英语限制你的不是其它人&#xff0c;也不是环境&#xff0c;而是自己Java打好基础 程序语言&#xff1a;语言的原理&#xff0c;类库的实现&#xff0c;编程技术&#xff08;并发、异步等&#xff09;&#xff0c;编程范式&#xff0c;设计模…

数据库造神计划第六天---增删改查(CRUD)(2)

&#x1f525;个人主页&#xff1a;寻星探路 &#x1f3ac;作者简介&#xff1a;Java研发方向学习者 &#x1f4d6;个人专栏&#xff1a;《从青铜到王者&#xff0c;就差这讲数据结构&#xff01;&#xff01;&#xff01;》、 《JAVA&#xff08;SE&#xff09;----如此简单&a…

使用Rust实现服务配置/注册中心

Conreg 使用 Rust 实现的配置与注册中心&#xff0c;参考了 Nacos 的设计&#xff0c;简单易用&#xff0c;使用 Raft 保证集群节点数据一致性。 支持的平台&#xff1a; UbuntuCentOS其他常见的 Linux 发行版&#xff08;我们使用 musl 编译&#xff0c;理论上支持所有主流…

三色标记算法

在 JVM 并发垃圾收集&#xff08;GC&#xff09;中&#xff0c;三色标记算法是实现 “GC 线程与用户线程并行执行” 的关键技术&#xff0c;它解决了并发场景下 “如何准确标记存活对象” 的核心问题&#xff0c;是 CMS、G1 等现代收集器的底层基础。一、三色标记的核心&#x…

OpenStack 管理与基础操作学习笔记(一):角色、用户及项目管理实践

OpenStack实验 OpenStack命令 admin-openrc.sh 进入管理员视图查看当前 OpenStack 中的项目列表&#xff0c;验证是否已经登录成功切换用户 修改文件切换用户上传文件切换用户OpenStack 认证管理 实验介绍 通过 OpenStack Dashboard 和 OpenStack CLI 两种方式创建角色、用户、…

直接查找试卷且可以免费下载

有什么网站可以直接查找试卷且可以免费下载&#xff1f; SearXNG开源元搜索引擎 This website shows the SearXNG public instances searx一个可定制的搜索引擎 分享一个基于Blockstack的DApp-searx,一个可定制的搜索引擎。 1- 链接 官网地址&#xff1a;https://searx.worl…

【独立版】智创云享知识付费小程序 v5.0.23+小程序 搭建教程

介绍智创云享知识付费小程序v5.0.23 含PC、小程序、H5 、前端&#xff0c;系统独立版已修复已知bug问题。框架是一款基于ThinkPHP框架开发的虚拟资源知识付费小程序&#xff0c;为广大创业者、自媒体及培训机构提供知识付费、内容付费、资源变现等领域的行业解决方案&#xff1…

布尔运算-区间dp

面试题 08.14. 布尔运算 - 力扣&#xff08;LeetCode&#xff09; Solution 这题的思路比较直接&#xff0c;就是枚举最后一个进行计算的运算符&#xff0c;但是在实现过程中需要注意&#xff0c;定义范式f(l,r)表示l到r范围&#xff0c;l和r必须为数字&#xff0c;l1,r-1为运…

MyBatis-Plus 扩展全局方法

1.文件内容package com.ruoyi.business.mybatisplus.base;import com.baomidou.mybatisplus.core.conditions.Wrapper; import com.baomidou.mybatisplus.extension.service.IService;import java.util.List;/*** 扩展的 Service 接口* 所有自定义 Service 接口都需要继承此接口…

13.Linux OpenSSH 服务管理

文章目录Linux OpenSSH 服务管理环境准备OpenSSH 服务介绍SSH 介绍SSH 建立连接的过程加密类型双向加密过程使用 ssh 访问远端CLIssh 工具演示ssh工具配置文件配置 ssh 密钥认证ssh 故障模拟故障模拟排故故障自定义 SSH 服务配置文件禁止 root 登录禁止密码登录只允许特定用户登…

速通ACM省铜第五天 赋源码(MEX Count)

目录 引言&#xff1a; MEX Count 题意分析 逻辑梳理 代码实现 结语&#xff1a; 引言&#xff1a; 本来&#xff0c;今天我是想着出俩题或三题题解的&#xff0c;但是在打第一题的时候就天塌了&#xff0c;导致今天就只搓了一道题&#xff0c;这题的难度在CF中为1300的水准&…

【数据结构与算法-Day 27】堆的应用:从堆排序到 Top K 问题,一文彻底搞定!

Langchain系列文章目录 01-玩转LangChain&#xff1a;从模型调用到Prompt模板与输出解析的完整指南 02-玩转 LangChain Memory 模块&#xff1a;四种记忆类型详解及应用场景全覆盖 03-全面掌握 LangChain&#xff1a;从核心链条构建到动态任务分配的实战指南 04-玩转 LangChai…

企业即时通讯保障企业通讯安全,提升企业部门协作效率

在当今数字化转型的大潮中&#xff0c;企业即时通讯软件已从单纯的沟通工具&#xff0c;逐步演变为保障企业数据安全的核心基础设施。吱吱企业即时通讯软件通过“私有化部署全流程加密”的双重机制&#xff0c;为企业构建了一套集“通讯安全”与“部门协作”于一体的数字化解决…

《华为变革法:打造可持续进步的组织》读书笔记

推荐序一&#xff1a;变革是企业活下去的基础&#xff08;胡彦平&#xff09;华为前常务副总裁、变革指导委员会成员胡彦平在序言中强调&#xff0c;企业存续的核心命题是应对不确定性&#xff0c;而变革能力是破解这一命题的唯一答案。他以华为 30 余年的发展历程为例&#xf…

第二篇:排序算法的简单认识【数据结构入门】

排序算法的分类标准 时间复杂度分类 a. 简单排序算法&#xff1a;时间复杂度O(n)&#xff0c;冒泡排序、选择排序、插入排序&#xff1b; b. 高级排序算法&#xff1a;时间复杂度O(n logn)&#xff0c;快速排序、归并排序、堆排序&#xff1b; c. 线性排序算法&#xff1a;时间…

快速掌握Dify+Chrome MCP:打造网页操控AI助手

你是否曾经希望那些强大的开源大模型能更贴合你的专业领域&#xff0c;或者学会模仿你的行文风格&#xff1f;其实&#xff0c;实现这个目标的关键就在于“微调”。曾几何时&#xff0c;微调模型是大公司的专属游戏——动不动就需要几十张GPU和复杂的分布式训练技术。 而现在&…