sql >> データベース >  >> RDS >> Mysql

Laravelで座標距離を計算する

    まず、staticを削除することを忘れないでください 関数呼び出しからのキーワードであるLaravelは、魔法のような静的な外観を扱います Profile::distance 電話してください。

    以下は、同じ問題を解決するための2つの異なるオプションです。いずれの場合も、\App\Profile::distance($latitude, $longitude, 50)を呼び出します。 コントローラから。

    オプション1

    サブクエリを処理する代わりに、メモリ内で計算を行うことができます。

    public function scopeDistance($query, $lat, $long, $distance) {
        return Profile::all()->filter(function ($profile) use ($lat, $long, $distance) {
            $actual = 3959 * acos(
                cos(deg2rad($lat)) * cos(deg2rad($profile->latitude))
                * cos(deg2rad($profile->longitude) - deg2rad($long))
                + sin(deg2rad($lat)) * sin(deg2rad($profile->latitude))
            );
            return $distance < $actual;
        });
    }
    

    オプション2

    SQLサブクエリを実行できます。必ずget()で呼び出しを終了してください。 :

    public function scopeDistance($query, $lat, $long, $distance) {
        return $query->having('distance', '<', $distance)
                 ->select(DB::raw("*,
                         (3959 * ACOS(COS(RADIANS($lat))
                               * COS(RADIANS(latitude))
                               * COS(RADIANS($long) - RADIANS(longitude))
                               + SIN(RADIANS($lat))
                               * SIN(RADIANS(latitude)))) AS distance")
                 )->orderBy('distance', 'asc')
                  ->get();
    }
    



    1. 画像とjQueryオートコンプリートの統合

    2. mysqlで特定の値の出現率を取得します

    3. PHPWebサイト内のデータベース資格情報を安全に保存する場所

    4. x要素のグループをバッチで返す場合はMySQLSelectQuery