我有一个名为 users
的数据库,其中包含latitude
和longitude
列,我想计算出距离 $_POST
提供的某个纬度和经度 50 公里半径内的最近用户(users
表中的用户)。
你能告诉我我该怎么做吗?是否有需要使用某个数学函数,或者MySQL中的函数,如latitude_compare()
之类的函数?
你可以做这样的事情:
SELECT *,
(ACOS((SIN(RADIANS(ref_latitude))*SIN(RADIANS(latitude))) +
(COS(RADIANS(ref_latitude))*COS(RADIANS( latitude ))*COS(RADIANS( longitude)
-RADIANS(ref_longitude)))) * 6371) AS distance
FROM table
ORDER BY distance ASC
A点:ref_latituderef_longitude
B点:纬度经度
我的纬度/纬度值以度为单位,如下所示:
德累斯顿: 13.721067614881400/51.060033646337900
这是我一直在使用的代码,以英里为单位。它选择给定半径内的所有纬度和液化天然气。
$q = "SELECT * ( 3959 * acos( cos( radians($current_lat) ) * cos( radians( lat ) ) * cos( radians( lng ) - radians($current_lng) ) + sin( radians($current_lat) ) * sin( radians( lat )))) AS distance FROM users HAVING distance < $radius";