一尘不染

MySQL-从数据库中查找半径内的点

mysql

我有一个表,该表的POINT列包含各个位置的纬度和经度。

然后,我还会从浏览器中的地理位置获得一个用户位置。

我需要做的是从表中找到所有记录,其中的POINT值在10 km半径(或X km半径)内,并按距离最近的顺序排序。

我的表SPATIALPOINT列上有一个索引。


阅读 666

收藏
2020-05-17

共1个答案

一尘不染

我目前正在从事一个项目,该项目正在计算多个位置之间的距离。我正在使用以下查询来选择给定半径内的object_id。

SELECT id, 
( 6371 * 
    ACOS( 
        COS( RADIANS( db_latitude ) ) * 
        COS( RADIANS( $user_latitude ) ) * 
        COS( RADIANS( $user_longitude ) - 
        RADIANS( db_longitude ) ) + 
        SIN( RADIANS( db_latitude ) ) * 
        SIN( RADIANS( $user_latitude) ) 
    ) 
) 
AS distance FROM the_table HAVING distance <= $the_radius ORDER BY distance ASC"

我无法解释ACOS公式本身,因为我是从研究中得到的。

db_latitude = database latitude field
db_longitude = database longitude field
$user_latitude = browser latitude coördinate
$user_longitude = browser longitude coördinate
$the_radius = the radius that you want to search in

这是公里。

2020-05-17