热力图
示例
TIP
leaflet-heatmap docs 是一个 Leaflet 插件,用于创建热力图。
代码实现
vue
<template>
<div id="map" class="w-full h-96"></div>
</template>
<script setup>
import L from "leaflet";
import "leaflet/dist/leaflet.css";
import { onMounted, ref } from "vue";
import "leaflet-heatmap/leaflet-heatmap.css"; // 引入热力图样式
import HeatmapOverlay from "leaflet-heatmap"; // 引入热力图插件
const map = ref(null);
onMounted(() => {
const urlLayer =
"http://t0.tianditu.gov.cn/vec_w/wmts?SERVICE=WMTS&REQUEST=GetTile&VERSION=1.0.0&LAYER=vec&STYLE=default&TILEMATRIXSET=w&FORMAT=tiles&TILEMATRIX={z}&TILEROW={y}&TILECOL={x}&tk=d32c6748c80f81a44acd8633cea41dfd";
map.value = L.map("map", {
center: [39.094899, 117.33083], // 天津
zoom: 4, // 缩放比列
zoomControl: true,
doubleClickZoom: false, // 禁用双击放大
attributionControl: false, // 不展示版权信息
});
const baseLayer = L.tileLayer(urlLayer, {
maxZoom: 18,
minZoom: 0,
attribution: "天地图",
subdomains: ["0", "1", "2", "3", "4", "5", "6", "7"],
}).addTo(map.value);
const testData = {
data: [
{ lat: 23.1291, lng: 113.2644, count: 1037000 }, // 广东省
{ lat: 34.757, lng: 113.6249, count: 695000 }, // 河南省
{ lat: 26.8154, lng: 106.3315, count: 411000 }, // 贵州省
{ lat: 39.0949, lng: 117.3308, count: 61000 }, // 天津
{ lat: 29.6469, lng: 91.1322, count: 76000 }, // 西藏
{ lat: 43.666, lng: 126.1924, count: 88000 }, // 吉林
{ lat: 36.62, lng: 95.66, count: 89000 }, // 青海
{ lat: 20.044, lng: 110.1999, count: 96000 }, // 海南
{ lat: 31.2304, lng: 121.4737, count: 98000 }, // 上海
{ lat: 43.793, lng: 87.6, count: 109000 }, // 新疆
{ lat: 38.469, lng: 106.2782, count: 113000 }, // 宁夏
{ lat: 40.8183, lng: 111.6704, count: 123000 }, // 内蒙古
{ lat: 39.9042, lng: 116.4074, count: 123000 }, // 北京
{ lat: 41.8057, lng: 123.4315, count: 175000 }, // 辽宁
{ lat: 29.563, lng: 106.55, count: 178000 }, // 重庆
{ lat: 36.0583, lng: 102.4572, count: 191000 }, // 甘肃
{ lat: 37.8734, lng: 112.562, count: 213000 }, // 山西
{ lat: 34.3293, lng: 108.9402, count: 273000 }, // 陕西
{ lat: 29.1042, lng: 115.8221, count: 295000 }, // 江西
{ lat: 30.5928, lng: 114.3055, count: 326000 }, // 湖北
{ lat: 30.2741, lng: 120.1551, count: 383000 }, // 浙江
{ lat: 24.882, lng: 102.8329, count: 385000 }, // 云南
{ lat: 31.82, lng: 117.2272, count: 395000 }, // 安徽
{ lat: 27.6104, lng: 112.9834, count: 399000 }, // 湖南
{ lat: 23.1242, lng: 108.32, count: 405000 }, // 广西
{ lat: 32.0603, lng: 118.7969, count: 409000 }, // 江苏
{ lat: 26.5783, lng: 106.7135, count: 412000 }, // 贵州
{ lat: 38.4161, lng: 115.4839, count: 418000 }, // 河北
],
};
testData.data.forEach((item) => {
const marker = L.marker([item.lat, item.lng]).bindPopup(item.count);
markers.addLayer(marker);
});
const cfg = {
radius: 2,
maxOpacity: 0.8,
scaleRadius: true,
useLocalExtrema: true,
latField: "lat",
lngField: "lng",
valueField: "count",
};
const heatmapLayer = new HeatmapOverlay(cfg);
map.value.addLayer(heatmapLayer);
heatmapLayer.setData(testData);
});
</script>