1. สมัครรับ API Token ฟรี
2. คัดลอกโค้ด
<!DOCTYPE html><html lang="en"><head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>แปลงพิกัดเป็นข้อมูลและคุณภาพอากาศ</title><link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.3/dist/css/bootstrap.min.css" rel="stylesheet"><style>@import url("https://cdn.jsdelivr.net/npm/bootstrap-icons@1.11.3/font/bootstrap-icons.min.css");body {font-family: Arial, sans-serif;height: 100vh;display: flex;justify-content: center;align-items: center;background-color: #f8f9fa;}.card {max-width: 500px;width: 100%;border-radius: 10px;box-shadow: 0 4px 6px rgba(0, 0, 0, 0.1);}.aqi-good {background-color: #fff;}.aqi-moderate {background-color: #f6f5f6;}.aqi-unhealthy {background-color: #e9e9e9;}.aqi-hazardous {background-color: #d2d2d3;}</style></head><body><div class="card text-center" id="airQualityCard"><div class="card-header bg-primary text-white"><h3>คุณภาพอากาศ วันนี้</h3></div><div class="card-body"><p id="result" class="mb-4">กดปุ่มเพื่อค้นหาตำแหน่งและคุณภาพอากาศ</p><button class="btn btn-primary" onclick="getLocation()">ค้นหาตำแหน่งและข้อมูลคุณภาพอากาศ</button></div><div class="card-footer text-muted">Powered by WAQI & Nominatim APIs</div></div><script src="https://cdn.jsdelivr.net/npm/bootstrap@5.3.3/dist/js/bootstrap.bundle.min.js"></script><script>//API Tokenconst waqiApiKey = "xxxxxxxxxxxx"; // ใส่ API Key ของคุณที่นี่function getLocation() {if (navigator.geolocation) {navigator.geolocation.getCurrentPosition(async (position) => {const lat = position.coords.latitude;const lon = position.coords.longitude;const locationData = await reverseGeocode(lat, lon);if (locationData) {await getAirQuality(locationData);}}, (error) => {document.getElementById("result").innerText = "ไม่สามารถเข้าถึงตำแหน่งได้!";});} else {alert("เบราว์เซอร์ของคุณไม่รองรับการค้นหาตำแหน่ง (Geolocation)");}}async function reverseGeocode(lat, lon) {const apiUrl = `https://nominatim.openstreetmap.org/reverse?format=json&lat=${lat}&lon=${lon}&zoom=10&addressdetails=1&accept-language=th`;try {const response = await fetch(apiUrl);const data = await response.json();const subdistrict = data.address?.quarter || "ไม่ทราบตำบล";const district = data.address?.suburb || data.address?.town || data.address?.village || "ไม่ทราบอำเภอ";const province = data.address?.city || "ไม่ทราบจังหวัด";const resultText = `<b style="font-size: 18px; color: blue;">ตำแหน่งของคุณ</b> <br> ${subdistrict}<br> ${district}<br> ${province}`;document.getElementById("result").innerHTML = resultText;return { subdistrict, district, province };} catch {document.getElementById("result").innerText = "เกิดข้อผิดพลาดในการแปลงพิกัด";return null;}}async function getAirQuality({ province }) {const apiUrl = `https://api.waqi.info/feed/${province}/?token=${waqiApiKey}`;try {const response = await fetch(apiUrl);const data = await response.json();if (data.status === "ok") {const airQuality = data.data.aqi;const aqiDescription = getAqiDescription(airQuality);const aqiIcon = getAqiIcon(airQuality);updateCardBackground(airQuality);document.getElementById("result").innerHTML += `<br><b style="font-size: 18px; color:blue;">คุณภาพอากาศในจังหวัด</b><br><b style="font-size:26px;">${province}</b><br><b style="font-size: 30px; color: blue;"> AQI </b><br><span style="font-size: 48px;"> ${airQuality} </span> ${aqiIcon}<br>${aqiDescription}`;} else {document.getElementById("result").innerText += "\nไม่พบข้อมูลคุณภาพอากาศ";}} catch {document.getElementById("result").innerText += "\nเกิดข้อผิดพลาดในการดึงข้อมูลคุณภาพอากาศ";}}function getAqiDescription(aqi) {if (aqi <= 50) {return "คุณภาพอากาศถือว่าเป็นที่น่าพอใจและมลพิษทางอากาศทำให้เกิดความเสี่ยงเพียงเล็กน้อยหรือไม่มีเลย";} else if (aqi <= 100) {return "คุณภาพอากาศเป็นที่ยอมรับได้ อย่างไรก็ตามสำหรับสารมลพิษบางอย่างอาจต้องระวังในกลุ่มผู้ที่แพ้ฝุ่นละอองและสารเคมีได้ง่าย";} else if (aqi <= 150) {return "ไม่ดีต่อสุขภาพ สำหรับ กลุ่มที่ไวต่อมลพิษทางอากาศ หรือกลุ่มที่แพ้อากาศง่าย";} else {return "เริ่มมีผลกระทบต่อสุขภาพ กลุ่มคนที่มีความเสี่ยงสูงอาจได้รับผลกระทบด้านสุขภาพที่รุนแรงขึ้น";}}function getAqiIcon(aqi) {if (aqi <= 50) {return '<span style="color:#7DDA58; font-size: 48px;"><i class="bi bi-emoji-heart-eyes"></i></span>';} else if (aqi <= 100) {return '<span style="color:#FFDE59; font-size: 48px;"><i class="bi bi-emoji-neutral"></i></span>';} else if (aqi <= 150) {return '<span style="color:#FE9900; font-size: 48px;"><i class="bi bi-emoji-astonished"></i></span>';} else {return '<span style="color:#E4080A; font-size: 48px;"><i class="bi bi-skull-fill"></i></span>';}}function updateCardBackground(aqi) {const card = document.getElementById("airQualityCard");card.classList.remove("aqi-good", "aqi-moderate", "aqi-unhealthy", "aqi-hazardous");if (aqi <= 50) {card.classList.add("aqi-good");} else if (aqi <= 100) {card.classList.add("aqi-moderate");} else if (aqi <= 150) {card.classList.add("aqi-unhealthy");} else {card.classList.add("aqi-hazardous");}}</script></body></html>
3. แก้ไข API Token
แทนที่ xxxxxxxxxxxx ด้วย API Key ของคุณ
const waqiApiKey = "xxxxxxxxxxxx"; // ใส่ API Key ของคุณที่นี่
ที่มา : https://aqicn.org/
https://nominatim.openstreetmap.org/
ค้าง กดปุ่มไม่ทำงานไรเลย สงสัยว่าทำไรผิดไปหนอ กำลังงม
ตอบลบต้องต่อเน็ตและอนุญาตการถึงที่ตั้ง (ถ้าป๊อบอัพไม่ขึ้น ต้องปลดล็อกป๊อบอัพของบราวเซอร์ก่อน)
ลบUncaught ReferenceError: getLocation is not defined แก้ยังไงครับ
ตอบลบตรวจดูฟังก์ชั่น getLocation
ลบ