我有一个名为
tbl_places
的 mySql 表
这包含字段
Place_id
,PlaceName
,Place_LATITUDE
,place_LONGITUDE
。
我现在想在
place detail
页面使用它
如果当前打开页面的 place_id
是 4,那么我想要距离该位置最近的最多 6 条记录。
假设当前地点是:
place_id = 4
place_name = Lal Killa
place_LATITUDE = 77.2413969039917
place_LONGITUDE = 28.653838307772872
我不明白如何找到距离当前地点最近的地点??
使用以下查询:
SELECT
Place_id,
PlaceName,
(
3959
* acos(
cos( radians(37) )
* cos( radians( Place_LATITUDE ) )
* cos( radians( Place_LONGITUDE ) - radians(-122) )
+ sin( radians(37) )
* sin( radians( Place_LATITUDE ) )
)
) AS distance
FROM tbl_places
HAVING distance < 25
ORDER BY distance
LIMIT 0 , 20;
注意 - 这里纬度 = 37 & 经度 = -122
此外,请查看此处以获取更多参考。
您可以使用 Cohen–Sutherland(点裁剪)算法来了解附近的人,如果您想最小化结果,请将其设置为从 0 到 YOUR_LIMIT 的增量顺序。
它比将极坐标[(即)纬度和经度]转换为 XY 的公式更好
我们可以找到以英里和公里为单位的距离
一英里
$query = sprintf("SELECT address, name, lat, lng, ( 3959 * acos( cos( radians('%s') ) * cos( radians( lat ) ) * cos( radians( lng ) - radians('%s') ) + sin( radians('%s') ) * sin( radians( lat ) ) ) ) AS distance FROM markers HAVING distance < 25 ORDER BY distance LIMIT 0 , 20",
mysql_real_escape_string($center_lat),
mysql_real_escape_string($center_lng),
mysql_real_escape_string($center_lat),
mysql_real_escape_string($radius));*/
$result = mysql_query($query);
公里
$query = sprintf("SELECT usermail, res_name, lat, lng, ( 6371 * acos( cos( radians('%s') ) * cos( radians( lat ) ) * cos( radians( lng ) - radians('%s') ) + sin( radians('%s') ) * sin( radians( lat ) ) ) ) AS distance FROM mstuser HAVING distance < '%s' ORDER BY distance LIMIT 0 , 20",
mysql_real_escape_string($center_lat),
mysql_real_escape_string($center_lng),
mysql_real_escape_string($center_lat),
mysql_real_escape_string($radius));