给定用户的位置,选择在其半径中包含该用户的行

时间:2015-04-23 10:36:29

标签: php mysql location coordinates

我有一个包含行latitudelongituderadius的MySQL表。纬度和经度属于DOUBLE类型; radius的类型为INT,以米为单位。基本上,每行代表地球上的一个圆圈。

鉴于user_latitudeuser_longitude的值,如何在圈子中选择包含该用户的所有行?

我做了一个快速图表来说明以防我的问题不清楚。每个红点代表user_latitudeuser_longitude点,每个圆圈代表数据库中的latitudelongituderadius行。

diagram

1 个答案:

答案 0 :(得分:0)

步骤1:实施半径距离公式

delimiter //
create function DistanceInKm(
        lat1 FLOAT, lon1 FLOAT,
        lat2 FLOAT, lon2 FLOAT
     ) returns float
    NO SQL DETERMINISTIC
begin
    return degrees(acos(
              cos(radians(lat1)) *
              cos(radians(lat2)) *
              cos(radians(lon2) - radians(lon1)) +
              sin(radians(lat1)) * sin(radians(lat2))
            )) * 111.045;
END//
delimiter ;

(幻数111.045将其转换为km,使用69英里)

第2步:使用功能

select * from areas where distance(lat, long, USERLAT, USERLONG) < radius

reference