【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
英文地址,請注明出處:http://en.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和復雜的分布式訓練技術。 而現在&…