我想基于纬度和经度应用过滤器。有一个具有列ID,标题,纬度,经度(MySql)的表,由于要提供当前位置的纬度和经度,因此我希望得到4公里范围内的结果。
key
答案 0 :(得分:1)
是的,那是可能的。
SELECT a.title,
111.111 *
DEGREES(ACOS(LEAST(COS(RADIANS(a.Latitude))
* COS(RADIANS(b.Latitude))
* COS(RADIANS(a.Longitude - b.Longitude))
+ SIN(RADIANS(a.Latitude))
* SIN(RADIANS(b.Latitude)), 1.0))) AS distance_in_km
FROM table AS a
JOIN table AS b ON a.id <> b.id
HAVING distance_in_km <= 4
在这里,HAVING distance_in_km <= 4
4是KM范围。
答案 1 :(得分:0)
使用MySQL查找附近的位置
这是SQL语句,该语句将找到距离37,-122坐标25英里范围内的最近20个位置。它根据该行的纬度/经度和目标纬度/经度计算距离,然后仅查询距离值小于25的行,按距离对整个查询进行排序,并将其限制为20个结果。要按公里而不是英里进行搜索,请将3959替换为6371。
表结构:
id,title,lat,lng
注意-这里的纬度= 37&经度= -122。因此,您只需传递自己的密码即可。
SELECT id,
( 3959 * acos( cos( radians(37) ) *
cos( radians( lat ) ) *
cos( radians( lng ) - radians(-122) ) +
sin( radians(37) ) *
sin( radians( lat ) ) ) )
AS distance FROM your_table_name HAVING
distance < 25 ORDER BY distance LIMIT 0 , 20;
此处有更多详细信息:https://en.wikipedia.org/wiki/Haversine_formula
3959 - Miles = 6371 - Kilometers
答案 2 :(得分:0)
$latitude='28.5410297';//yours latitude
$longitude='-81.37857600000001';//yours longitude
SELECT *,(((acos(sin((" . $latitude . "*pi()/180)) * sin((`Latitude`*pi()/180))+cos((" . $latitude . "*pi()/180)) * cos((`Latitude`*pi()/180)) * cos(((" . $longitude . "- `Longitude`)*pi()/180))))*180/pi())*60*1.1515*1.609344) as distance from table_name having distance < 4 ORDER BY distance ASC"