Menu

Thursday, May 30, 2019

[Database - SQL] วิธีคำนวณระยะทางระหว่างพิกัด (Latitude, Longitude) 2 พิกัด
[Database - SQL] How to Calculate Distance between 2 Points of (Latitude, Longitude)

เนื่องจากผิวโลกมีความโค้ง จึงต้องใช้ haversine formula ในการคำนวณระยะทางที่สั้นที่สุดระหว่างพิกัดสองพิกัดบนผิวโลก

สมมติว่า ตาราง location ประกอบด้วยคอลัมน์ lat และ lon ที่เก็บค่า Latitude และ Longitude ตามลำดับของแต่ละพิกัด และพิกัดที่สนใจอยู่ที่ตำแหน่ง ([lat0], [lon0])

เราสามารถค้นหาพิกัดที่อยู่ใกล้เคียงกับพิกัดที่เราสนใจ ภายในรัศมี 1 กิโลเมตร โดยใช้ SQL ดังต่อไปนี้

SELECT *, 6373  * 2 * ATAN2(
    SQRT(
        POW(SIN((lat - [lat0]) * PI() / 180 / 2), 2) +
        COS(ABS([lat0]) * PI() / 180) *
        COS(ABS(lat) * PI() / 180) *
        POW(SIN((lon - [lon0]) * PI() / 180 / 2), 2)
    ),
    SQRT(1-(
        POW(SIN((lat - [lat0]) * PI() / 180 / 2), 2) +
        COS(ABS([lat0]) * PI() / 180) *
        COS(ABS(lat) * PI() / 180) *
        POW(SIN((lon - [lon0]) * PI() / 180 / 2), 2))
    )
) as dist
FROM `location`
HAVING  dist < 1 
ORDER BY dist

โดยที่
  •     6373 เป็นรัศมีของโลก มีหน่วยเป็นกิโลเมตร
  •     lat เป็นค่า Latitude ของ record ในตาราง location
  •     lon เป็นค่า Longitude ของ record ในตาราง location
  •     [lat0] เป็นค่า Latitude ของพิกัดที่เราสนใจ
  •     [lon0] เป็นค่า Longitude ของพิกัดที่เราสนใจ
  •     dist เป็นระยะทางระหว่างพิกัดที่เราสนใจกับพิกัดของ record ในตาราง location มีหน่วยเป็นกิโลเมตร

No comments:

Post a Comment