現在の場所からの距離で並べ替えられた店舗のリストを提供するクエリを作成しようとしています。私はphpで作業しており、データベースにMySQLを使用しています。
2 つの店舗間の距離を計算するには、2 つの店舗の経度と緯度を使用して距離を導き出します。これは、自己定義関数に含まれていますdistance($lat1, $lng1, $lat2, $lng2)
。この関数の結果は距離ですkm
。
この関数を使用してクエリ結果に追加の列を作成し、現在の場所の最も後ろにある店舗から現在の場所から最も遠い店舗にすべての店舗を並べ替えることができるようにします。両方の関数が同じファイルで宣言されていますが、結果が得られません。私が行った方法で宣言することにより、SELECT 句で関数を呼び出すことは可能ですか?
function getSortedStores($cur_lat, $cur_lng)
{
$query = "SELECT Store.ID, Store.Name, distance($cur_lat, $cur_lng, Address.Latitude, Address.Longitude) AS Distance FROM Store INNER JOIN Address ON Store.ID=Address.StoreID ORDER BY Distance";
$result = mysql_query($query);
return $result;
}
function distance($lat1, $lng1, $lat2, $lng2)
{
$toRadians = M_PI / 180;
$lat1 *= $toRadians;
$lng1 *= $toRadians;
$lat2 *= $toRadians;
$lng2 *= $toRadians;
$r = 6371; // mean radius of Earth in km
$dlat = $lat2 - $lat1;
$dlng = $lng2 - $lng1;
$a = sin($dlat / 2) * sin($dlat / 2) + cos($lat1) * cos($lat2) * sin($dlng / 2) * sin($dlng / 2);
$c = 2 * atan2(sqrt($a), sqrt(1 - $a));
$km = $r * $c;
$km = round($km, 1);
return $km;
}