2017-01-19 31 views
1

誰でも私にこの質問を正しく手伝ってもらえますか?Laravel、MySQL Spatial Point距離:orderByと距離を取得

ConcertモデルとLocationモデルがあります。コンサートは場所に属します。ロケーションテーブルには、空間ポイントフィールドがあります。

は、私は三つ実行する必要があります。

  • は、ユーザーの場所からいくつかの所定の距離にあるコンサートを取得し、ユーザーの場所からユーザーの場所からの距離によって
  • 表示距離を

    • 順序を

    これまでのところ私はデータベースを設定し、ユーザーから一定の距離にあるコンサートを次のように取得しました:

    $condition = ($lat != null && $lon != null && $distance != null); 
    Concert::when($condition, function ($query) use ($distance,$lat,$lon) { 
         return $query->whereHas('location', function($query) use ($distance,$lat,$lon) { 
          $query->whereRaw('st_distance(location,POINT('.$lat.','.$lon.')) < '.$distance); 
         }); 
        }) 
    ->get(); 
    

    このst_distanceをビューに表示する方法を教えてもらえますか?

    どのように私は距離でこれを注文するのですか?

    $distanceをマイル/キロメートルで取得する適切な方法は、st_distanceの度数は?

  • 答えて

    0

    を選択できST_DISTANCEまたはST_DISTANCE_SPHEREMySQL Spatial Convenience Functions)、その後:HAVING SQL句(why can't use WHERE clause here

    $raw = 'SELECT 
        ST_X(location) AS longitude, 
        ST_Y(location) AS latitude, 
        ST_DISTANCE_SPHERE(location, POINT(?, ?)) AS dist 
    FROM 
        concerts, 
        locations 
    WHERE 
        concerts.id = locations.id 
    HAVING 
        dist < ? 
    ORDER BY 
        dist'; 
    $pointsWithDist = DB::select($raw, [$lon, $lat, $distance]); 
    

    を使用して、距離の制約を追加ORDER BY SQL句

  • を使用して

    • 注文結果注:

      • 、データを表示するためのGoogleマップを使用することができ、デフォルト

      によって経度POINT空間関数

    • の第PARAMとして最初PARAM及び緯度等の店舗メートルともST_DISTANCEST_DISTANCE_SPHERE戻り距離