可能重复:
Fastest Way to Find Distance Between Two Lat/Long Points
我有位置表,其中包含所有位置及其纬度和经度值。我得到特定的位置lat。 LOGN。和半径。现在,我想找到这个半径范围内的所有reocords以及给定的lat。而且很长。值。我使用以下查询。但我不确定它是否能给我正确的结果。
从给定的lat和long我发现lat.min和max为 -
$lng_min = $longitude - $radius / abs(cos(deg2rad($latitude)) * 69);
$lng_max = $longitude + $radius / abs(cos(deg2rad($latitude)) * 69);
$lat_min = $latitude - ($radius / 69);
$lat_max = $latitude + ($radius / 69);
然后使用以下查询 -
SELECT * FROM merchant_branches,locations
where locations."coorX" BETWEEN $lng_min AND $lng_max
AND
locations."coorY" BETWEEN $lat_min AND $lat_max
and merchant_branches.location_id = locations.id
其中location id是merchant_brach表中的外键。
我对我得到的结果感到困惑。 Plz帮助我。
答案 0 :(得分:1)
你必须使用这样的东西来获得最接近给定位置的结果
$query = sprintf(
"SELECT foo,
6371 * ACOS( Cos(RADIANS(lat)) * COS(RADIANS(%f))
* COS(RADIANS(%f) - RADIANS(lng)) + SIN(RADIANS(lat))
* SIN(RADIANS(%f)) ) * 1000 AS distance
FROM `%s`
ORDER BY distance",
$lat, $lag, $lng, $table
);
您必须根据表格结构设置$lat
,$lng
和$table
,并可能对结果设置限制。
您在此处获得了详细的解释Geo Distance Search with MySQL。