2017-01-17 6 views
-2

私のアプリケーションでは、ユーザーの移動中に自分のジオロケーションを記録します。座標の間のすべての距離を合計するMySQL - キロバイト駆動

今、1日の駆動キロを含むレポートを作成する必要があります。

検索私はこのクエリを見つけましたが、実際には動作しますが、私の計算とは異なる浮動小数点数を返します(私はキロメートルではないと思います)。

SELECT SUM(SQRT(POW(A.LAT - B.LAT, 2)+POW(A.LON - B.LON, 2))) 
FROM LOCATIONS A 
JOIN LOCATIONS B ON (A.ID = B.ID - 1) 

私は基本的に同じことが必要ですが、キロメートルです。

誰でも手伝ってもらえますか?

PS:私の英語は理解できますか?

編集: クエリの結果は0.09276581556846489で、5.35 kmのようになります。

私はクライアント側で距離を計算するためにjavascriptを使用しています。

function getDistanceFromLatLonInKm(lat1, lon1, lat2, lon2) { 
    var p = 0.017453292519943295; // Math.PI/180 
    var c = Math.cos; 
    var a = 0.5 - c((lat2 - lat1) * p)/2 + 
     c(lat1 * p) * c(lat2 * p) * 
     (1 - c((lon2 - lon1) * p))/2; 

    return 12742 * Math.asin(Math.sqrt(a)); // 2 * R; R = 6371 km 
} 
+0

スクリプト言語を使用していますか? –

+0

質問を編集し、サンプルデータと希望の結果を提供してください。 –

+0

あなたの英語は理解できますが、あなたのスキーマは理解できません。テーブルにid 1のポイントx、y、zが含まれている場合、xとzの間の距離は計算されませんが、xからz、zからx、y、y、z、 y。 – symcbean

答えて

1

赤道で約111キロメートルです。あなたは非常に基本的な計算を行っているので、この値を乗算するだけで十分でしょう。

しかし、空間データを使って作業している場合は、実際にmysql 5.7にアップグレードして、spatial functionsの組み込み関数を使用すると、作業が楽になります。

+0

私は空間関数を使うことができますが、どうしたらいいですか?私はポイントと呼ばれる行を行いPOINT(緯度、経度)を挿入しました。今私はキロメートルを計算する方法は? –

+0

私はそれについて別の質問を投稿するべきだと思います – e4c5

+0

私は投稿を編集しました...クエリは結果的に0.09276581556846489のようなものでなければなりません。まだ111で乗算:間違っている:/ –

関連する問題