找到纬度和经度的记录

时间:2012-07-16 10:28:19

标签: php mysql location

  

可能重复:
  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帮助我。

1 个答案:

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