vue結(jié)合leaflet實(shí)現(xiàn)熱力圖
本文介紹了Web端使用 Leaflet開(kāi)發(fā)庫(kù)展示熱力圖方法 (底圖來(lái)源:天地圖),結(jié)合leaflet.heat插件可以很容易的做出熱力圖,通過(guò)調(diào)整其配置參數(shù)可以優(yōu)化熱力圖的顯示,以達(dá)到最佳的可視化效果,顯示效果如下圖所示。

開(kāi)發(fā)環(huán)境
- Vue開(kāi)發(fā)庫(kù):3.2.37 & Leaflet開(kāi)發(fā)庫(kù):1.9.3
- Leaflet主要插件:leaflet.heat
代碼簡(jiǎn)介
插件簡(jiǎn)介與安裝
Leaflet.heat是 一個(gè)小巧,簡(jiǎn)單,快速的Leaflet熱圖插件。
官方文檔 https://github.com/Leaflet/Leaflet.heat
# 插件安裝 npm i leaflet.heat # 引入熱力圖插件 import 'leaflet.heat'
使用簡(jiǎn)介
let heatDataList = []
// 構(gòu)造熱力圖數(shù)據(jù)
HeatData.features.forEach((v) => {
// 緯度、經(jīng)度、閾值
let group = [v.properties.lat, v.properties.lon, v.properties.valve]
heatDataList.push(group)
})
// 生成熱力圖圖層,并添加到地圖中
let heat = L.heatLayer(heatDataList, {
radius: 12,
minOpacity: 0.2,
gradient: { // 自定義漸變顏色,區(qū)間為 0~1 之間(也可以不指定顏色,使用默認(rèn)顏色)
'0.2': "#00f",
'0.3': "#0ff",
'0.5': "#0f0",
'0.7': "#ff0",
'1': "#f00"
}
}).addTo(map);此外,Leaflet.heat插件還提供了幾個(gè)別的方法:
| 方法 | 說(shuō)明 |
|---|---|
| setOptions(options) | 設(shè)置新的熱力圖heatmap屬性并重新繪制 |
| addLatLng(latlng) | 向熱力圖heatmap動(dòng)態(tài)添加數(shù)據(jù)并重新繪制 |
| setLatLngs(latlngs) | 重置熱力圖heatmap數(shù)據(jù)并重新繪制 |
| redraw() | 重繪熱力圖 |
詳細(xì)源碼(Vue3)
<template>
? <div class="app-contain">
? ? <!-- leaflet 地圖容器 -->
? ? <div id="myMap"></div>
? </div>
</template>
<script setup>
// 引入熱力圖數(shù)據(jù)點(diǎn)狀geojson
import HeatData from '/@/assets/mapData/heatData.json'
// 引入樣式
import { onMounted } from 'vue'
import L from 'leaflet';
import 'leaflet/dist/leaflet.css'
// 熱力圖
import 'leaflet.heat'
// 天地圖TK
let tdtKey = 'YOURS_TK'
const initMap = () => {
? // 影像地圖
? const sourceMap = L.tileLayer(`https://map.geoq.cn/ArcGIS/rest/services/ChinaOnlineStreetPurplishBlue/MapServer/tile/{z}/{y}/{x}`)
? // 天地圖注記
? const tiandituText = L.tileLayer(`http://t0.tianditu.gov.cn/cia_w/wmts?SERVICE=WMTS&REQUEST=GetTile&VERSION=1.0.0&LAYER=cia&STYLE=default&TILEMATRIXSET=w&FORMAT=tiles&TILEMATRIX={z}&TILEROW={y}&TILECOL={x}&tk=${tdtKey}`)
? const layers = L.layerGroup([sourceMap, tiandituText])
? let map = L.map('myMap', { ?//需綁定地圖容器div的id
? ? center: [25.67052, 121.99804], //初始地圖中心
? ? zoom: 12, //初始縮放等級(jí)
? ? maxZoom: 20,
? ? minZoom: 2,
? ? zoomControl: true, //縮放組件
? ? attributionControl: false, //去掉右下角logol
? ? scrollWheelZoom: true, //默認(rèn)開(kāi)啟鼠標(biāo)滾輪縮放
? ? // 限制顯示地理范圍
? ? maxBounds: L.latLngBounds(L.latLng(-90, -180), L.latLng(90, 180)),
? ? layers: [layers] // 圖層
? })
? // 添加比例尺要素顯示
? L.control.scale({ maxWidth: 200, metric: true, imperial: false }).addTo(map)
? /** 熱力圖 */
? let heatDataList = []
? HeatData.features.forEach((v) => {
? ? let group = [v.properties.lat, v.properties.lon, v.properties.valve]
? ? heatDataList.push(group)
? })
? // 生成熱力圖圖層,并添加到地圖中
? let heat = L.heatLayer(heatDataList, {
? ? radius: 12, minOpacity: 0.2,
? ? /*
? ? gradient: { // 自定義漸變顏色,區(qū)間為 0~1 之間
? ? ? '0.2': "#00f",
? ? ? '0.3': "#0ff",
? ? ? '0.5': "#0f0",
? ? ? '0.7': "#ff0",
? ? ? '1': "#f00"
? ? }
? ? ?*/
? }).addTo(map);
}
onMounted(() => {
? initMap()
})
</script>
<style scoped>
#myMap {
? width: 92vw;
? height: 92vh;
}
</style>到此這篇關(guān)于vue結(jié)合leaflet實(shí)現(xiàn)熱力圖的文章就介紹到這了,更多相關(guān)vue leaflet熱力圖內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
vue3頁(yè)面組件中怎么獲取上一個(gè)頁(yè)面的路由地址
這篇文章主要給大家介紹了關(guān)于vue3頁(yè)面組件中怎么獲取上一個(gè)頁(yè)面的路由地址的相關(guān)資料,文中通過(guò)代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2024-02-02
M1 pro芯片啟動(dòng)Vue項(xiàng)目的方法步驟
本文主要介紹了M1 pro芯片啟動(dòng)Vue項(xiàng)目的方法步驟,文中通過(guò)示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2021-11-11
解決$store.getters調(diào)用不執(zhí)行的問(wèn)題
今天小編就為大家分享一篇解決$store.getters調(diào)用不執(zhí)行的問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2019-11-11
Vue + Echarts頁(yè)面內(nèi)存占用高的問(wèn)題解決方案
點(diǎn)擊左側(cè)的菜單可以切換不同的看板,有些看板頁(yè)面中的報(bào)表比較多,用戶多次切換后頁(yè)面的內(nèi)存占用可以上升為GB級(jí),嚴(yán)重時(shí)導(dǎo)致頁(yè)面內(nèi)存溢出,使得頁(yè)面崩潰,極大影響了用戶體驗(yàn),本文給大家介紹Vue + Echarts頁(yè)面內(nèi)存占用高的問(wèn)題解決方案,感興趣的朋友一起看看吧2024-02-02
淺談vue項(xiàng)目重構(gòu)技術(shù)要點(diǎn)和總結(jié)
這篇文章主要介紹了淺談vue項(xiàng)目重構(gòu)技術(shù)要點(diǎn)和總結(jié),小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2018-01-01

