我有一个展示某个城市帖子的网站。我在考虑将它从城市更改为围绕用户位置的半径(在这种情况下为10公里)。
我不知道如何使用半径进行查询。我只能想到使用两个条件进行查询并获得一个正方形。例如:
SELECT fields
FROM points
WHERE lat BETWEEN LAT1 AND LAT2
AND lon BETWEEN LON1 AND LON2
是否有可能从某个位置选择X公里/英里半径内的行?
我有一个展示某个城市帖子的网站。我在考虑将它从城市更改为围绕用户位置的半径(在这种情况下为10公里)。
我不知道如何使用半径进行查询。我只能想到使用两个条件进行查询并获得一个正方形。例如:
SELECT fields
FROM points
WHERE lat BETWEEN LAT1 AND LAT2
AND lon BETWEEN LON1 AND LON2
是否有可能从某个位置选择X公里/英里半径内的行?
通常情况下,您可以在任何条件上使用WHERE
查询。因此,假设您有一个函数distance()
,可以计算两个地理点之间的距离,则可以执行以下操作:
SELECT fields
FROM points
WHERE distance(lat, lon, city_lat, city_lon) <= 10
city_lat
和 city_lon
是城市中心的位置。
PostgreSQL 包含一个叫做 earthdistance()
的插件函数可以帮助解决问题。
$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();
(lat*111)^2+(lon*111)^2=distance^2
。不过我不确定如何CREATE FUNCTION
。 - lisovaccaro