ดึง 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 จะแสดงข้อมูลต่าง ๆ ที่เอกสารระบุไว้
บทความนี้ใช้โมดูลในภาษาไพทอนดังนี้
- requests สำหรับดึงข้อมูลจาก API (อ่านเพิ่มเติมได้ที่ https://python3.wannaphong.com/2015/04/urllib-เข้าถึงอินเทอร์เน็จ-python-3.html)
- folium สำหรับใช้สร้างแผนที่แสดงข้อมูล (อ่านเพิ่มเติมได้ที่ https://python3.wannaphong.com/2015/09/สร้างแผนที่-html-ด้วย-folium-python.html)
ไฟล์ข้อมูล 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 ตัวหนึ่ง
โค้ดฉบับเต็ม
ความคิดเห็น
แสดงความคิดเห็น