2

私はPHPでプロジェクトをやっています。LATとフィールドを持つレストランテーブルがありLONGます。からの距離が5km未満の10 個のレストラン (特定の を含む)を取得したいと考えています。以下の関数を使用して距離を計算しています:cuisine_idUSER

// Function for Getting distance between two coordinates.
function getDistance( $latitude1, $longitude1, $latitude2, $longitude2 ) {   
    $earth_radius = 6371;
    $dLat = deg2rad( $latitude2 - $latitude1 );  
    $dLon = deg2rad( $longitude2 - $longitude1 );  

    $a = sin($dLat/2) * sin($dLat/2) + cos(deg2rad($latitude1)) * cos(deg2rad($latitude2)) * sin($dLon/2) * sin($dLon/2);  
    $c = 2 * asin(sqrt($a));  
    $d = $earth_radius * $c;  
    return $d;  
} 

データベースからレコードを選択しながら機能を使用することはできますか?

5 km以下LIMITの距離にある (値として使用して) レストラン(ユーザーと利用可能) を一度に (可能であれば、上記の関数を使用して)取得するためのサンプル クエリを教えてください。LATLONGgetDistance

4

3 に答える 3

1

SQL サーバー クエリと php 関数の実行は 2 つの別個のものであり、混在させることはできません。そのタスクを別々のステップで実行する必要がある (最初に計算してからクエリを実行する) か、関数を PHP 内ではなく SQL サーバー内に実装する必要があります。それが可能で、ストアド プロシージャと呼ばれます。

于 2013-07-31T13:10:45.580 に答える
1

この質問はmysql-great-circle-distance-haversine-formulaと似ています

SELECT id, ( 3959 * acos( cos( radians(37) ) * cos( radians( lat ) ) * cos( radians( lng ) - radians(-122) ) + sin( radians(37) ) * sin( radians( lat ) ) ) ) AS distance 
FROM markers HAVING distance < 25 ORDER BY distance LIMIT 0 , 20;
于 2013-07-31T13:21:10.533 に答える