การ plot ตำแหน่งพิกัดลงบน Google Map โดยใช้ Python อย่างง่าย


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

โปรแกรมที่ต้องใช้

  • Pygmaps – เป็น API ที่ใช้สร้างไฟล์ HTML จากพิกัดของเรา ซึ่งไฟล์ HTML นี้สามารถเปิดดูใน browser หรือนำไปวางบน web server ก็ได้

การติดตั้ง ให้แตกไฟล์ออกมาแล้วใช้คำสั่ง

python setup.py install

การใช้งาน Pygmaps

ในที่นี้จะถือว่าเรามีตำแหน่งพิกัดจาก GPS มาเรียบร้อยแล้ว และพร้อมจะนำไป plot ในแผนที่ เช่น สมมุติว่ามี 7 จุดดังนี้

(18.78209, 98.98156),
(18.78174, 98.98156),
(18.78158, 98.98535),
(18.78142, 98.99007),
(18.78150, 98.99267),
(18.78150, 98.99267),
(18.78250, 98.99287)

โปรแกรม python ที่ต้องใช้คือ

import pygmaps

# initialize the map view
# map location = 18.78158, 98.98535
# zoom level = 16
mymap = pygmaps.maps(18.78158, 98.98535, 16)

# create a list of locations
path = [(18.78209, 98.98156),
        (18.78174, 98.98156),
        (18.78158, 98.98535),
        (18.78142, 98.99007),
        (18.78150, 98.99267),
        (18.78150, 98.99267),
        (18.78250, 98.99287)]

# add each point to the map
for point in path:
    mymap.addpoint(point[0], point[1])

# save the HTML file
mymap.draw('./mymap.html')

print "OK"

เมื่อเปิดไฟล์ mymap.html ใน browser ก็จะได้ผลออกมาดังภาพ

pygmap plot ex

หากต้องการวาดเส้นที่เชื่อมต่อพิกัดเหล่านี้ก็ให้เปลี่ยนคำสั่ง addpoint ให้เป็น addpath ดังนี้

import pygmaps

# initialize the map view
# map location = 18.78158, 98.98535
# zoom level = 16
mymap = pygmaps.maps(18.78158, 98.98535, 16)

# create a list of locations
path = [(18.78209, 98.98156),
        (18.78174, 98.98156),
        (18.78158, 98.98535),
        (18.78142, 98.99007),
        (18.78150, 98.99267),
        (18.78150, 98.99267),
        (18.78250, 98.99287)]

# add points as a path
# path color = red (#FF0000)
mymap.addpath(path,"#FF0000")

# save the HTML file
mymap.draw('./mymap.html')

print "OK"

ก็จะได้ผลลัพท์ดังนี้

pygmap path ex

ทดลองกับข้อมูลจริง

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

ข้อมูลจากโทรศัพท์มือถือ (ใช้โปรกรม GPS logger for Android) เริ่มจากมหาวิทยาลัยเชียงใหม่ ไปแถวๆ บ้านผู้เขียน กำหนดให้โทรศัพท์เก็บจุดทุกๆ 3 วินาที และระยะห่างจากจุดเดิมอย่างน้อย 5 เมตร เมื่อนำไฟล์จากโทรศัพท์มาประมวล โดยใช้ Excel ตัดข้อมูลที่ไม่ต้องการทิ้งให้เหลือแต่ Lat และ long ก็ทำการปรับโปรแกรมเพื่อให้อ่านค่าพิกัดจากไฟล์ดังนี้

import pygmaps

# initialize the map view
mymap = pygmaps.maps(18.7623, 98.9728, 14)

infile = open('gps_test_data.csv')
lines = infile.read().split('\n')

for coord in lines:
    loc = coord.split(',')
    mymap.addpoint(float(loc[0]), float(loc[1]))

# save the HTML file
mymap.draw('./mymap.html')

print "OK"

เมื่อเปิดไฟล์ HTML ขึ้นมาดูใน browser ก็ได้ผลดังภาพต่อไปนี้

pygmap plot cnx data ex

การนำไปประยุกต์ใช้ติดตามตำแหน่งแบบ real time

แม้ว่าวิธีนี้จะไม่ใช่การ plot ที่มีการ update แบบ real time แต่ก็น่าจะพอนำไปประยุกต์ได้ เช่น อาจเขียน python ให้คอยสร้างไฟล์ HTML ใหม่ตามพิกัดล่าสุดที่ได้รับมา ส่วนตัว HTML เองก็ใส่ code เพิ่มให้ reload ตัวเองบ่อยๆ  เพียงเท่านี้ก็น่าจะพอใช้เป็นระบบติดตามตำแหน่ง GPS ได้

สรุป

บทความนี้นำเสนอวิธีการง่ายๆ ในการนำพิกัด GPS มา plot ใน google maps โดยใช้ภาษา Python ผลที่ได้มีความถูกต้องและสวยงาม น่าจะสามารถนำไปใช้ในโครงงานที่มีการติดตามตำแหน่งได้เป็นอย่างดี