26 กันยายน 2558

Published กันยายน 26, 2558 by with 0 comment

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

สวัสดีผู้อ่านทุกท่านครับ หลังจากที่ทางภาครัฐได้มีการส่งเสริมการขับเคลื่อนนโยบายดิจิทัลเพื่อเศรษฐกิจและสังคม (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 เข้ามา
import requests,folium
r = requests.get('http://data.tmd.go.th/api/Weather3Hours/V1/')

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

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

สร้างแผนที่ HTML ด้วย Folium ในภาษาไพทอน


imap = folium.Map(location=[15.0000, 100.0000], zoom_start=7)
i = 0

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

ตัวแปรแผนที่.simple_marker(location=[ละติจูด,ลองติจูด],popup=ข้อมูลที่แสดง)

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

มาลงมือเขียนโค้ดกันต่อครับ

หลังลูปเสร็จแล้วใช้คำสั่งสร้างแผนที่ออกมาในรูปแบบ HTML

imap.create_map(path='thai_weather3hours.html')

เมื่อแสดงไฟล์ thai_weather3hours.html (สามารถดูตัวอย่างได้ที่ https://python3.wannaphong.com/lab/thai_weather3hours.html)

thaiรายงานสภาวะอากาศมารายงานบนแผนที่ด้วยภาษาไพทอน

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

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

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

ติดตามบทความภาษาไพทอนกับ Open Data ของภาครัฐไทย ได้ที่นี่เร็ว ๆ นี้
ลองนำความรู้ที่ได้ไปประยุกต์ใช้งานกันดูครับ

ติดตามบทความต่อไปนะครับ
ขอบคุณครับ

0 ความคิดเห็น:

แสดงความคิดเห็น

แสดงความคิดเห็นได้ครับ :)