2012-07-16 50 views
1

可能重複:
Fastest distance lookup given latitude/longitude?找到lattitude記錄和logintude

我有位置表,包括所有的緯度和logitude值的位置。我得到特定的位置經緯度。 LOGN。和半徑。現在,我想要找到這個半徑內的所有reocords以及給定的lat。和長。值。我正在使用以下查詢。但我不確定它是否給了我正確的結果。

從指定緯度和長我lat.min找出和最大的 -

$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

你必須使用這樣的事情來獲得最近的結果給定的位置

$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