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

Bik*_*ash 5 php mysql geolocation elasticsearch

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

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
Run Code Online (Sandbox Code Playgroud)

现在我还有另外两个问题.

  1. 如果只有MySQL查询就够了,或者我必须用它设置弹性搜索?
  2. 如果有任何库或包可以帮助我解决这个特定的问题?

如果您可以为搜索性能提出任何可能有用的建议.

jis*_*ion 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;
Run Code Online (Sandbox Code Playgroud)

哪里

$ lat =用户纬度

$ long =用户经度


Bik*_*ash 5

我已经去了下面 -

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;
Run Code Online (Sandbox Code Playgroud)

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