选择纬度 - 经度值在半径10km范围内的行?

时间:2012-01-23 02:34:16

标签: mysql

我有一个网站,显示某个城市的帖子。我正在考虑从城市到用户所在位置的半径(在这种情况下为10公里)。

我不知道如何使用radius进行查询。我只能考虑用两个条件进行查询并得到一个正方形。 e.g:

SELECT fields
FROM points
WHERE lat BETWEEN LAT1 AND LAT2
AND lon BETWEEN LON1 AND LON2

是否可以从某个位置选择半径为X km / mi的行?

2 个答案:

答案 0 :(得分:1)

通常,您可以在任何条件下使用WHERE查询。因此,假设您有一个可以计算两个地理点之间距离的函数distance(),您可以这样做:

SELECT fields
FROM points
WHERE distance(lat, lon, city_lat, city_lon) <= 10

其中city_latcity_lon是市中心的位置。

PostgreSQL包含一个名为earthdistance()的附加功能,可以提供帮助。

答案 1 :(得分:0)

$users = DB::table('users')
        ->select('id','name','phone','latitude','longitude')
        ->SQRT("POW(69.1 * (latitude - 24.900110), 2) +
        POW(69.1 * (67.099760 - longitude) * COS(latitude / 57.3), 2)) AS distance")
        ->having("distance < 25")
        ->orderBy("distance")
        ->get();