如何根据纬度和经度应用过滤器?

时间:2018-12-27 10:09:23

标签: php mysql

我想基于纬度和经度应用过滤器。有一个具有列ID,标题,纬度,经度(MySql)的表,由于要提供当前位置的纬度和经度,因此我希望得到4公里范围内的结果。

key

3 个答案:

答案 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"