API

วิธีการแสดงผลข้อมูลแบบ Heatmap บน Map API V3

longdo-map-heatmap

แผนที่ออนไลน์ Longdo Map API version 3 (รุ่น Vector tile) นอกจากจะรองรับการทำงานที่หลากหลายแล้ว อาทิ ข้อมูล แสดงข้อมูล 3 มิติ, ขอบเขตการปกครอง, การสร้างหมุด (Marker) และอื่น ๆ อีกมากมาย แล้ว อีกการแสดงผลหนึ่งที่เป็นยอดนิยมก็คือ “Heatmap”

Heatmap คืออะไร ?

Heatmap หรือแผนที่ความร้อน คือการแสดงข้อมูลที่ใช้สีเพื่อแสดงระดับความเข้มข้นของข้อมูลในพื้นที่ต่างๆ ของภาพหรือแผนที่ ซึ่งเป็นวิธีที่มีประสิทธิภาพในการสื่อสารข้อมูลที่ซับซ้อนอย่างรวดเร็วและชัดเจน โดยทั่วไปแผนที่ความร้อนจะใช้สเปกตรัมของสีที่แตกต่างกันเพื่อแสดงระดับของค่าตัวแปรที่สนใจ ตัวอย่างเช่น สีที่อบอุ่นเช่นแดงหรือส้มอาจใช้แสดงค่าสูง ในขณะที่สีเย็นเช่นน้ำเงิน เป็นต้น

ตัวอย่างภาพ Heatmap แสดงข้อมูลอุบัติเหตุในกรุงเทพมหานคร

ตัวอย่างเว็บไซต์ การแสดงข้อมูลอุบัติเหตุ 100 จุดสูงสุด ในกรุงเทพมหานคร

วิธีการเรียกใช้

1. สร้างแผนที่พื้นฐาน ดูวิธีการเริ่มต้นใช้งาน

<script type="text/javascript" src="https://api.longdo.com/map3/?key=[YOUR-KEY-API]"></script>

สมัครคีย์ได้ที่ https://map.longdo.com/console

2. สร้าง JavaScript function สำหรับสร้าง longdo.Map object ภายใน tag <head>

var map;
function init() {
  map = new longdo.Map({
    placeholder: document.getElementById('map')
  });
}

3. สร้าง div element สำหรับวางแผนที่ ภายใน tag <body> และใส่ onload ใน tag <body>

<body onload="init();">
    <div id="map"></div>
</body>

เมื่อได้แผนที่พื้นฐานแล้ว สิ่งถัดไปที่ต้องทำคือ การเรียกชั้นข้อมูล Heatmp

4. เรียกใช้ Heatmap และใส่ต้นทางข้อมูลที่เป็น geojson

<script>
    var map

    function init() {
        map = new longdo.Map({
            placeholder: document.getElementById('map')
        });

        map.Event.bind("ready", function () {
            map.Layers.insert(1,
                new longdo.Layer({
                    sources: {
                        earthquakes: {
                            type: "geojson",
                            data: "https://maplibre.org/maplibre-gl-js-docs/assets/earthquakes.geojson",
                        },
                    },
                    layers: [{
                            'id': 'earthquakes-heat',
                            'type': 'heatmap',
                            'source': 'earthquakes',
                            'maxzoom': 9,
                            'paint': {
                                // Increase the heatmap weight based on frequency and property magnitude
                                'heatmap-weight': [
                                    'interpolate',
                                    ['linear'],
                                    ['get', 'mag'],
                                    0,
                                    0,
                                    6,
                                    1
                                ],
                                // Increase the heatmap color weight weight by zoom level
                                // heatmap-intensity is a multiplier on top of heatmap-weight
                                'heatmap-intensity': [
                                    'interpolate',
                                    ['linear'],
                                    ['zoom'],
                                    0,
                                    1,
                                    9,
                                    3
                                ],
                                // Color ramp for heatmap.  Domain is 0 (low) to 1 (high).
                                // Begin color ramp at 0-stop with a 0-transparancy color
                                // to create a blur-like effect.
                                'heatmap-color': [
                                    'interpolate',
                                    ['linear'],
                                    ['heatmap-density'],
                                    0,
                                    'rgba(33,102,172,0)',
                                    0.2,
                                    'rgb(103,169,207)',
                                    0.4,
                                    'rgb(209,229,240)',
                                    0.6,
                                    'rgb(253,219,199)',
                                    0.8,
                                    'rgb(239,138,98)',
                                    1,
                                    'rgb(178,24,43)'
                                ],
                                // Adjust the heatmap radius by zoom level
                                'heatmap-radius': [
                                    'interpolate',
                                    ['linear'],
                                    ['zoom'],
                                    0,
                                    2,
                                    9,
                                    20
                                ],
                                // Transition from heatmap to circle layer by zoom level
                                'heatmap-opacity': [
                                    'interpolate',
                                    ['linear'],
                                    ['zoom'],
                                    7,
                                    1,
                                    9,
                                    0
                                ]
                            }
                        },
                        {
                            'id': 'earthquakes-point',
                            'type': 'circle',
                            'source': 'earthquakes',
                            'minzoom': 7,
                            'paint': {
                                // Size circle radius by earthquake magnitude and zoom level
                                'circle-radius': [
                                    'interpolate',
                                    ['linear'],
                                    ['zoom'],
                                    7,
                                    ['interpolate', ['linear'],
                                        ['get', 'mag'], 1, 1, 6, 4
                                    ],
                                    16,
                                    ['interpolate', ['linear'],
                                        ['get', 'mag'], 1, 5, 6, 50
                                    ]
                                ],
                                // Color circle by earthquake magnitude
                                'circle-color': [
                                    'interpolate',
                                    ['linear'],
                                    ['get', 'mag'],
                                    1,
                                    'rgba(33,102,172,0)',
                                    2,
                                    'rgb(103,169,207)',
                                    3,
                                    'rgb(209,229,240)',
                                    4,
                                    'rgb(253,219,199)',
                                    5,
                                    'rgb(239,138,98)',
                                    6,
                                    'rgb(178,24,43)'
                                ],
                                'circle-stroke-color': 'white',
                                'circle-stroke-width': 1,
                                // Transition from heatmap to circle layer by zoom level
                                'circle-opacity': [
                                    'interpolate',
                                    ['linear'],
                                    ['zoom'],
                                    7,
                                    0,
                                    8,
                                    1
                                ]
                            }
                        },
                    ],
                })
            );

        })
    }

</script>

ผลลัพธ์ที่ท่านได้คือข้อมูล Heatmap ของพิกัดแผ่นดินไหว

คู่มือพัฒนาระบบ https://map.longdo.com/docs3/javascript/marker/heatmap-marker