สมมติว่า ตาราง 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