0

重複の可能性:
2 つの緯度/経度ポイント間の距離を見つける最速の方法

緯度と経度の値を持つすべての場所で構成される場所テーブルがあります。特定の場所を緯度で取得しています。ログインします。と半径。今、私はこの半径内のすべてのレコードを見つけたいと思っています。そして長い。値。次のクエリを使用しています。しかし、正しい結果が得られるかどうかはわかりません。

与えられた緯度と経度から、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

ロケーション ID は、merchant_brach テーブルの外部キーです。

得られた結果について混乱しています。助けてください。

4

1 に答える 1

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 にあります

于 2012-07-16T10:32:04.803 に答える