使用PHP和MySQL进行地理位置半径搜索

时间:2015-04-28 10:04:36

标签: php mysql elasticsearch geolocation

我正在开发一个职位门户,最终用户将根据他们的位置和接近半径搜索工作。目前,REST API由SLIM和MySQL提供支持。 在Jobs表中,每行都有纬度和经度。我在这里搜索了这个,偶然发现了Geo Distance search with MySQL

SELECT latitude, longitude, SQRT(
POW(69.1 * (latitude - $lat), 2) +
POW(69.1 * ($long - $long) * COS(latitude / 57.3), 2)) AS distance
FROM TableName HAVING distance < 25 ORDER BY distance;


Where 

$lat =  User latitude

$long = User longitude

现在我还有两个问题。

  1. 如果只有MySQL查询就够了,或者我必须用它设置弹性搜索?
  2. 如果有任何图书馆或软件包可以帮助我解决这个特定问题吗?
  3. 如果您可以为搜索性能提出任何可能有用的建议。

3 个答案:

答案 0 :(得分:7)

SELECT latitude, longitude, SQRT(
POW(69.1 * (latitude - $lat), 2) +
POW(69.1 * ($long - longitude) * COS(latitude / 57.3), 2)) AS distance
FROM TableName HAVING distance < 25 ORDER BY distance;

哪里

$ lat =用户纬度

$ long =用户经度

答案 1 :(得分:2)

$(document).ready(function(){
    $(".main_box").on("mousedown",function(){
        $(document).on("mousemove",function(event){
            $(".dragable_box").css({
                left: event.pageX,
                top: event.pageY
            })
        })
    })
})

答案 2 :(得分:0)

我已经离开了 -

SELECT id,name,lat,lng, ROUND(( 6371 * acos( cos( radians($lat) ) * cos( radians( lat ) ) * cos( radians( lng ) — radians($lng) ) + sin( radians($lat) ) * sin( radians( lat ) ) ) ),(2) ) AS distance FROM jobs HAVING distance < 50 ORDER BY distance;

我已经对数据进行了基准测试,发现这比Mukesh的答案略快,比@jision的答案好2倍。