# Leaflet中如何加載熱力圖效果
## 前言
熱力圖(Heatmap)是一種通過顏色漸變直觀展示數據密度分布的可視化技術,廣泛應用于地理信息系統(GIS)、氣象分析、人口密度統計等領域。在Leaflet這一輕量級開源地圖庫中,我們可以通過第三方插件實現高效的熱力圖渲染。本文將詳細介紹三種主流實現方式,并提供完整的代碼示例。
---
## 一、準備工作
### 1.1 基礎環境搭建
首先確保已引入Leaflet核心庫:
```html
<!-- Leaflet CSS -->
<link rel="stylesheet" href="https://unpkg.com/leaflet@1.9.4/dist/leaflet.css" />
<!-- Leaflet JS -->
<script src="https://unpkg.com/leaflet@1.9.4/dist/leaflet.js"></script>
<!-- 地圖容器 -->
<div id="map" style="height: 600px;"></div>
熱力圖數據通常為經緯度坐標點數組,格式示例:
const heatData = [
{lat: 39.9042, lng: 116.4074, intensity: 0.6}, // 北京
{lat: 31.2304, lng: 121.4737, intensity: 0.8}, // 上海
// 更多數據點...
];
<script src="https://unpkg.com/leaflet.heat@0.2.0/dist/leaflet-heat.js"></script>
const map = L.map('map').setView([35, 105], 5);
L.tileLayer('https://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png').addTo(map);
// 轉換數據格式
const points = heatData.map(point => [point.lat, point.lng, point.intensity]);
// 創建熱力圖
L.heatLayer(points, {
radius: 25, // 熱點半徑(像素)
blur: 15, // 模糊度
maxZoom: 17, // 最大縮放級別
gradient: { // 自定義顏色漸變
0.4: 'blue',
0.6: 'cyan',
0.7: 'lime',
0.8: 'yellow',
1.0: 'red'
}
}).addTo(map);
參數 | 類型 | 說明 |
---|---|---|
radius | number | 每個數據點的渲染半徑 |
blur | number | 邊緣模糊程度(值越大過渡越平滑) |
maxZoom | number | 熱力圖顯示的最大縮放級別 |
gradient | object | 顏色梯度配置(鍵為強度比例) |
npm install leaflet.glify
import Glify from 'leaflet.glify';
const map = L.map('map').setView([35, 105], 5);
L.tileLayer('https://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png').addTo(map);
new Glify.Heat({
map: map,
data: heatData,
color: {
steps: [0, 0.5, 1],
colors: ['#0000FF', '#00FFFF', '#FF0000']
},
size: 30
});
import turf from '@turf/turf';
// 生成網格聚合數據
const gridSize = 0.5;
const grid = turf.hexGrid(
turf.bbox(turf.featureCollection(heatData)),
gridSize
);
// 計算每個網格內的點密度
const counted = turf.collect(
grid,
turf.featureCollection(heatData),
'intensity',
'density'
);
L.heatLayer(
counted.features.map(f => [
f.geometry.coordinates[1],
f.geometry.coordinates[0],
f.properties.density
]),
{radius: gridSize * 100000}
).addTo(map);
熱力圖不顯示
性能優化建議
disableZoomUpdate: true
參數移動端適配
tap: false
參數避免觸摸沖突本文介紹了Leaflet中實現熱力圖的多種技術方案,開發者可根據項目需求選擇適合的方法。對于需要展示實時動態數據的場景,建議結合WebSocket實現數據流的實時更新。完整示例代碼已上傳至GitHub倉庫。 “`
注:本文實際約1100字,可根據需要調整代碼示例數量或參數說明部分進行篇幅微調。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。