พยากรณ์อากาศสำหรับวันพรุ่งนี้

เว็บไซด์สำหรับดูพยากรณ์อากาศสำหรับวันพรุ่งนี้ โดยเอา api มาจากกรมอุตุนิยมวิทยา จากนั้นเขียนโค๊ดให้แสดงแผนที่ประเทศไทย และมือคลิ๊กลงบนแผนที่ประเทศไทย จะแสดงการพยากรณ์อากาศสำหรับวันพรุ่งนี้ ตามแลตติจูดและลองติจูด ที่ทำการคลิ๊ก โดยมีข้อมูลที่แสดงการพยากรณ์อากาศเฉพาะประเทศไทยเท่านั้น

ทดลองใช้งานได้ที่ Weather Map (radarstudio.online)

Code index.php

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Weather Map</title>
    <!-- Include Leaflet CSS and JS -->
    <link rel="stylesheet" href="https://unpkg.com/leaflet/dist/leaflet.css" />
    <script src="https://unpkg.com/leaflet/dist/leaflet.js"></script>
</head>
<body>
    <div id="map" style="height: 900px;"></div>

    <script>
        var map = L.map("map").setView([13.40, 100.10], 6.5); // Set the initial view to Thailand
        L.tileLayer("https://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png", {
            attribution: "© OpenStreetMap contributors"
        }).addTo(map);

        // Add a click event listener to the map
        map.on('click', function(e) {
            var lat = e.latlng.lat.toFixed(2);
            var lon = e.latlng.lng.toFixed(2);

            // Call the PHP script with the lat and lon values
            fetch('your_php_script.php?lat=' + lat + '&lon=' + lon)
                .then(response => response.text())
                .then(data => {
                    // Output the result (if needed)
                    console.log(data);

                    // Clear existing markers
                    map.eachLayer(function (layer) {
                        if (layer instanceof L.Marker) {
                            map.removeLayer(layer);
                        }
                    });

                    // Add a new marker at the clicked location
                    var marker = L.marker([lat, lon]).addTo(map);

                    // Add a popup with the data from the API response
                    marker.bindPopup(data).openPopup();
                })
                .catch(error => console.error('Error:', error));
        });
    </script>
	<center><b>การใช้งาน :</b>ใช้เมาส์คลิ๊กบนแผนที่เพื่อดูการพยากรณ์อากาศสำหรับวันพรุ่งนี้ ตรงตำแหน่งนั้น (<b>มีข้อมูลเฉพาะประเทศไทยเท่านั้น</b>) </center>
	</body>
</html>

Code your_php_script.php

<?php
$lat = $_GET['lat'];
$lon = $_GET['lon'];
// Get the current date
//$currentDate = date("Y-m-d");
$tomorrowDate = date("Y-m-d", strtotime($currentDate . ' +1 day'));
// Check if lat and lon are within the specified range
if ($lat < 5.61 || $lat > 20.47 || $lon < 97.34 || $lon > 105.64) {
    echo "ไม่มีข้อมูล";
    exit;
}

$curl = curl_init();

curl_setopt_array($curl, array(
    CURLOPT_URL => "https://data.tmd.go.th/nwpapi/v1/forecast/location/daily/at?lat=$lat&lon=$lon&fields=tc,tc_max,tc_min,rh,slp,rain,cond&date=$tomorrowDate&duration=1",
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_ENCODING => "",
    CURLOPT_MAXREDIRS => 10,
    CURLOPT_TIMEOUT => 30,
    CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
    CURLOPT_CUSTOMREQUEST => "GET",
    CURLOPT_HTTPHEADER => array(
       "accept: application/json",
    "authorization: Bearer YourAPIกรมอุตุฯ",
  ),
));

$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);

if ($err) {
    echo "cURL Error: $err";
} else {
    $data = json_decode($response, true);

    if ($data && isset($data['WeatherForecasts'][0]['forecasts'])) {
        $popupContent = '';

        foreach ($data['WeatherForecasts'][0]['forecasts'] as $forecast) {
            $timestamp = strtotime($forecast['time']);
            $formattedTime = date('l, j F Y H:i:s', $timestamp + (7 * 3600));
            $temperature = $forecast['data']['tc'];
            $temperatureMAX = $forecast['data']['tc_max'];
            $temperatureMIN = $forecast['data']['tc_min'];
            $humidity = $forecast['data']['rh'];
            $pressure = $forecast['data']['slp'];
            $rainfall = $forecast['data']['rain'];
            $conditionCode = $forecast['data']['cond'];

            switch ($conditionCode) {
                case 1:
                    $conditionText = 'ท้องฟ้าแจ่มใส';
                    break;
                case 2:
                    $conditionText = 'มีเมฆบางส่วน';
                    break;
                case 3:
                    $conditionText = 'เมฆเป็นส่วนมาก';
                    break;
                case 4:
                    $conditionText = 'มีเมฆมาก';
                    break;
                case 5:
                    $conditionText = 'ฝนตกเล็กน้อย';
                    break;
                case 6:
                    $conditionText = 'ฝนปานกลาง';
                    break;
                case 7:
                    $conditionText = 'ฝนตกหนัก';
                    break;
                case 8:
                    $conditionText = 'ฝนฟ้าคะนอง';
                    break;
                case 9:
                    $conditionText = ' อากาศหนาวจัด';
                    break;
                case 10:
                    $conditionText = 'อากาศหนาว';
                    break;
                case 11:
                    $conditionText = 'อากาศเย็น ';
                    break;
                case 12:
                    $conditionText = 'อากาศร้อนจัด';
                    break;
                default:
                    $conditionText = 'ไม่มีข้อมูล';
                    break;
            }

            $popupContent .= "<table style='border-collapse: collapse; width: 100%; border: 1px solid #ddd;'>" .
                "<tr style='background-color: #f2f2f2;'><td colspan='2' style='padding: 10px; text-align: center;'><b style='color: #333;'>พรุ่งนี้ : $formattedTime</b></td></tr>" .
                "<tr><td style='padding: 10px;'><b>อุณหภูมิสูงสุด:</b></td><td style='padding: 10px; color: #e44d26;'>$temperatureMAX °C</td></tr>" .
                "<tr><td style='padding: 10px;'><b>อุณหภูมิต่ำสุด: </b></td><td style='padding: 10px; color: #2f9e44;'>$temperatureMIN °C</td></tr>" .
                "<tr><td style='padding: 10px;'><b>ความชื้นสัมพัทธ์: </b></td><td style='padding: 10px; color: #007bff;'>$humidity%</td></tr>" .
                "<tr><td style='padding: 10px;'><b>ความกดอากาศ:</b></td><td style='padding: 10px; color: #ff9800;'>$pressure hPa</td></tr>" .
                "<tr><td style='padding: 10px;'><b>ปริมาณฝน:</b></td><td style='padding: 10px; color: #795548;'>$rainfall mm</td></tr>" .
                "<tr><td style='padding: 10px;'><b>สภาพอากาศทั่วไป:</b></td><td style='padding: 10px; color: #673ab7;'>$conditionText</td></tr>" .
                "</table><br>";

        }

       echo $popupContent;
    } else {
        echo "No data available";
    }
}
?>