วิธีการเบื้องต้นในการหาจุดในโพลิกอน

วันนี้เราจะนำเสนอวิธีการหาจุดบนโพลิกอนหรือที่เรียกว่า “Map matching” ซึ่งวิธีการนี้ได้รับความสนใจอย่างมากในงานวิจัยด้าน GIS ทำให้อัลกอริทึมได้ถูกพัฒนาอย่างต่อเนื่อง

ในบทความนี้จะขอเสนอแนวความคิดเบื้องต้น เป็นวิธีที่ไม่ซับซ้อน สามารถทำได้โดยใช้เพียง google maps, postgres database และทักษะการโปรแกรมซึ่งใช้เป็นตัวกลางในการเชื่อมต่อกับฐานข้อมูลและการแสดงผล ในที่นี้ที่เราเลือกใช้คือ Java ค่ะ

ขั้นตอนการ Map matching

  1. เมื่อเชื่อมต่อกับฐานข้อมูลได้แล้วให้สร้าง Schema ชื่อ DataGeo และตารางซึ่งชื่อ rawPoint และ  singlePolygon ที่จะใช้เก็บจุดและโพลิกอน กำหนดชนิดของ Attributes ดังนี้

singlePolygon

Meaning

rawPoint

Meaning

[PK] id : integer

Polygon id

[PK] p_id : integer

Point id

latlong : geometry

Polygon

eventCode : text,

Car’s unexpected event

 

speed : real

Car’s velocity

 

heading : real

Car’s direction

 

c_id : text

Car id

 

dateTime : timestamp without TZ Date and time of GPS sending

 

status : boolean

Is in the desired route?

 

curr_position : geometry

Point

* ถ้าตารางใดมี data type เป็น geometry หรือ geography ให้กำหนด index ด้วยทุกครั้ง ไม่เช่นนั้นอาจจะทำให้การเข้าถึงข้อมูลช้ามาก

2. การสร้าง polygon ใช้ Google maps โดยหาจุดละติจูดและลองจิจูดตั้งแต่มหาวิทยาลัยธรรมศาสตร์รังสิตไปจนถึงอนุสาวรีย์ชัยสมรภูมิ โดยจำเป็นต้องจุดไปรอบๆถนนที่ต้องการสร้าง polygon ล้อมรอบและต้องเป็นพื้นที่ปิด

เมื่อเราเก็บข้อมูลเรียบร้อยแล้ว จากนั้นก็เก็บเข้าฐานข้อมูล และเมื่อนำมาแสดงผลใน Quantum GIS จะเป็นลักษณะดังภาพ

3. จากนั้นเอาข้อมูลจุดใส่ลงฐานข้อมูล และใช้ Java โดยจะเลือกใช้ IDE อะไรก็ได้ ในที่นี้ใช้ Eclipse เป็นสื่อกลางในการเข้าถึงข้อมูล โดยโปรแกรมนี้จะตรวจสอบว่าจุดๆหนึ่งอยู่ใน polygon หรือไม่

ตัวอย่าง SQL Query หาว่าจุดอยู่ใน polygon หรือไม่

Input select ST_within((select st_astext(curr_position) from “DataGeo”.”rawPoint” where p_id = 1),(select st_astext(latlong) from “DataGeo”.”singlePolygon”))
Output true (ถ้าอยู่ใน polygon) หรือ false (ถ้าไม่อยู่ใน polygon)