基於高德地圖api的熱力圖配置及顯示調優


因為做到一個大屏數據業務 用於記錄 發現一個大神寫的特別細致 自己記下來用於保存,轉載於: https://blog.csdn.net/snowin1994/article/details/101361811

使用熱力圖的基本配置

在官方熱力圖api實例中有標准代碼。

<!doctype html>
<html>
<head>
    <meta charset="utf-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="initial-scale=1.0, user-scalable=no, width=device-width">
    <title>熱力圖</title>
    <link rel="stylesheet" href="https://a.amap.com/jsapi_demos/static/demo-center/css/demo-center.css"/>
    <style>
        html,
        body,
        #container {
            margin: 0;
            padding: 0;
            width: 100%;
            height: 100%;
        }
    </style>
</head>
<body>
<div id="container"></div>
<div class="input-card" style="width: auto;">
    <div class="input-item">
        <button class="btn" onclick="heatmap.show()">顯示熱力圖</button>
    </div>
    <div class="input-item">
        <button class="btn" onclick="heatmap.hide()">關閉熱力圖</button>
    </div>
</div>
<script src="//webapi.amap.com/maps?v=1.4.15&key=您申請的key值"></script>
<script src="//a.amap.com/jsapi_demos/static/resource/heatmapData.js"></script>
<script>
    var map = new AMap.Map("container", {
        resizeEnable: true,
        center: [116.418261, 39.921984],
        zoom: 11
    });

    if (!isSupportCanvas()) {
        alert('熱力圖僅對支持canvas的瀏覽器適用,您所使用的瀏覽器不能使用熱力圖功能,請換個瀏覽器試試~')
    }

    var heatmap;
    map.plugin(["AMap.Heatmap"], function () {
        //初始化heatmap對象
        heatmap = new AMap.Heatmap(map, {
            radius: 25, //給定半徑
            opacity: [0, 0.8]
            /*,
            gradient:{
                0.5: 'blue',
                0.65: 'rgb(117,211,248)',
                0.7: 'rgb(0, 255, 0)',
                0.9: '#ffea00',
                1.0: 'red'
            }
             */
        });
        heatmap.setDataSet({
            data: heatmapData,
            max: 100
        });
    });

    //判斷瀏覽區是否支持canvas
    function isSupportCanvas() {
        var elem = document.createElement('canvas');
        return !!(elem.getContext && elem.getContext('2d'));
    }
</script>
</body>
</html>

 

主要需要注意的地方如下

加載js組件和數據

加載組件

<script src="//webapi.amap.com/maps?v=1.4.15&key=您申請的key值"></script>

其中需要的key,可以注冊高德地圖開發者后,在我的應用中找到(需要創建一個應用)

加載數據

<script src="//a.amap.com/jsapi_demos/static/resource/heatmapData.js"></script>

js中根據自己的代碼修改路徑和名字,其中直接返回json數據即可。例如:

var heatmapData = [
    {"lng":"116.311322","lat":"39.957033","count":1},
    {"lng":"116.16741","lat":"39.89261","count":2}
];

字段含義

字段 含義
lng 經度
lat 緯度
count 出現次數

重要參數說明

剩下的js代碼注意做兩件事

  • 加載地圖
  • 加載熱點圖

下面着重說明其中出現的幾個參數的含義。js代碼列舉如下,說明請注意注釋。

    var map = new AMap.Map("container", {
        resizeEnable: true,
        center: [116.418261, 39.921984],
        zoom: 11    // zoom表示地圖打開時候默認的縮放級別,數值變大,地圖相當於放大,看見的實際面積減小,內容變詳細
    });

    if (!isSupportCanvas()) {
        alert('熱力圖僅對支持canvas的瀏覽器適用,您所使用的瀏覽器不能使用熱力圖功能,請換個瀏覽器試試~')
    }

    var heatmap;
    map.plugin(["AMap.Heatmap"], function () {
        //初始化heatmap對象
        heatmap = new AMap.Heatmap(map, {
            radius: 25, // 每個點的覆蓋范圍半徑,單位是像素
            /**
             * 熱力圖的透明度,包含兩個值(取值范圍從0到1),表示透明度從完全透明到完全不透明的變化值。
             * 這個選項對應着熱力圖顏色的漸變。
             * 舉個例子,opacity: [0, 1],則坐標點的數目在最小梯度的區域是完全透明的,在最大梯度的區域是完全不透明的。
             * 再舉個例子,opacity: [1, 1],則整個熱點圖的區域都是完全不透明的。
             * 所謂梯度見下面的gradient配置說明。
             */
            opacity: [0, 0.8],

            /**
             * 顏色梯度配置,我們設目標值(某點范圍內點數目/下面配置的max)為x。
             * key是x的區間配置,value是對應區間的顏色。
             * 舉個例子,假設gradient和max的配置均是下面的代碼。
             * 當某個點出現的數目為10時,x = 某點范圍內點數目 / 下面配置的max = 10/10 = 1, 
             * x > 0.9,則目標區域顯示的顏色為紅色。
             * 具體的范圍如下:
             * x > 0.9             red
             * 0.9 > x > 0.7     yellow
             * 0.7 > x > 0.5    green
             * 0.5 > x > 0.3     blue
             * 0.3 > x            blue
             * 注意,即使x的值小於0.3還是會有顏色。
             */
            gradient:{
                0.3: 'blue',
                0.5: 'green',
                0.7: 'yellow',
                0.9: 'red'
            }
        });
        //設置數據集:該數據為北京部分“公園”數據
        heatmap.setDataSet({
            data: heatmapData,    // 加載數據一節中,js文件內保存所有數據的變量。
            max: 10        // 見gradient的例子
        });
    });

顯示調優

要配置出顯示合適的熱力圖,注意關注三個參數(radius、gradient、max)。如果配置不當,會導致熱力圖的重點區域不突出。熱點圖中的顏色顯示規則如下:
我們設 (某點范圍內點數目 / max) 為x。gradient的配置為

gradient:{
    0.3: 'blue',
    0.5: 'green',
    0.7: 'yellow',
    0.9: 'red'
}

max的配置為 10

heatmap.setDataSet({
    data: heatmapData,    // 加載數據一節中,js文件內保存所有數據的變量。
    max: 10        // 見gradient的例子
});

舉個例子,當某個點出現的次數為10時,x = 10 / 10 = 1,
x > 0.9,則目標區域顯示的顏色為紅色。具體的范圍如下:

范圍 顏色
x > 0.9 red
0.9 > x > 0.7 yellow
0.7 > x > 0.5 green
0.5 > x > 0.3 blue
0.3 > x blue

 

redius

redius控制單個點的籠罩半徑,半徑范圍內所有的點都會算作此點的數目,變相增大 x 的值。設置合適的半徑,確定每個點的籠罩范圍。

max

max代表熱點圖區分熱度的界限,某地區的點數超過max一定比例,即顯示對應gradient配置的顏色。

 

參考

高德地圖熱力圖官方文檔
高德地圖熱力圖api實例

 

 

var heatmapData =[{"lng":"116.311322","lat":"39.957033","count":1},{"lng":"116.16741","lat":"39.89261","count":2}];


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM