ดึง Open Data รายงานสภาวะอากาศมารายงานบนแผนที่ด้วย Python


          

          หลังจากที่ทางภาครัฐได้มีการส่งเสริมการขับเคลื่อนนโยบายดิจิทัลเพื่อเศรษฐกิจและสังคม (Digital Economy) และมาในวันนี้ทางกรมอุตุนิยมวิทยาได้มีการเปิด API สำหรับเข้าถึงข้อมูลสภาวะอากาศ ปรากฏการณ์ธรรมชาติ แผ่นดินไหว พยากรณ์อากาศ ในชื่อ "TMDAPI" (ปัจจุบันยังไม่มีการเปิดให้บริการอย่างเป็นทางการ)

หน้าเว็บ Open Data ของกรมอุตุนิยมวิทยา  http://data.tmd.go.th/api/index1.php

แนะนำให้ทำการลงทะเบียนการใช้งาน API ตัวนี้ได้ที่  http://data.tmd.go.th/api/index1.php


ในบทความนี้ขอใช้ API ที่ชื่อว่า Weather3Hours ซึ่งเป็นระบบรายงานผลการตรวจวัดลักษณะอากาศราย 3 ชั่วโมงทุกสถานี

*อ่านเอกสารการใช้งาน Weather3Hours ได้ที่  http://data.tmd.go.th/api/doc/reference/Weather3Hours.pdf


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


ไฟล์ข้อมูล API อยู่ที่ http://data.tmd.go.th/api/Weather3Hours/V1/  เป็นไฟล์ข้อมูลชนิด json
โดยเริ่มแรกทำการ import โมดูลเข้ามาก่อน แล้วเข้าคำสั่งให้โมดูล requests ทำการดึงไฟล์ข้อมูล API เข้ามา

แต่หากใช้คำสั่ง r.text ออกมาเลย เป็นข้อมูลสตริง แต่ภายในสตริงมีข้อมูลชนิด dict อยู่ จึงไม่สามารถนำไปใช้งาน ต้องใช้คำสั่ง eval() เข้ามาช่วยดึงข้อมูล dict ออกมา และจากเอกสารการใช้งาน Weather3Hours จะเห็นได้ว่าข้อมูลที่ต้องการอยู่ในคีย์ Stations จึงต้องกำหนดตัวแปรสำหรับใช้เก็บค่าไว้ขึ้นมา

ต่อไปสร้างแผนที่ประเทศไทย และสร้างตัวแปรสำหรับการลูป
                           

ต่อไปลูปสร้าง Markers ผมขออธิบายคำสั่งของโมดูล folium เพิ่มเติมสั้น ๆ ตามนี้ครับ
คำสั่ง

เมื่อได้อ่านรายละเอียดไฟล์จะเห็นได้ว่า ข้อมูลตำแหน่งของสถานีอยู่คนละคีย์กับข้อมูลสภาพอากาศ แต่มีสิ่งที่เหมือนกันคือ เมื่อกำหนดคีย์ เราสามารถดึงค่าข้อมูลได้โดยใช้คีย์ Value
*อ่านเอกสารการใช้งาน Weather3Hours ได้ที่ http://data.tmd.go.th/api/doc/reference/Weather3Hours.pdf
หลังจากนั้นลงมือเขียนโค้ดกันต่อ



หลังลูปเสร็จแล้วใช้คำสั่งสร้างแผนที่ออกมาในรูปแบบ HTML
เมื่อแสดงไฟล์ thai_weather3hours.html (สามารถดูตัวอย่างได้ที่ https://python3.wannaphong.com/lab/thai_weather3hours.html


เมื่อคลิกที่ Markers ตัวหนึ่ง



โค้ดฉบับเต็ม




ความคิดเห็น