新しい行に 10 秒ごとの風向 (他の気象値の中でも) を含むテーブルがあります。方向は、0 ~ 360 度の単位で保存されます。
目的
この平均の意味は何ですか?データベースは、10 秒ごとに 1 行の情報を格納します。パフォーマンスの問題については、5 日より古いデータを 1 時間あたり 1 行 (平均) に集約したいと考えています。
温度を使用すると、達成するのは簡単です。 avg(temp) は、温度が大幅に異なる値の間でジャンプしないため、トリックを行います。
卓越風では、この「平均」を取得するのははるかに困難です。
度単位の平均風向の計算は、集計関数 avg() を使用するほど単純ではありません。例:
dir1 = 10; dir2 = 350;
avg() = (10+350)/2 = 180;
これは正確ではありません。0 または 360 である必要があります。
だから、私の頭の後ろにある大学の三角法のクラスで、それをラジアンに変換し、x と y 成分を計算すれば、平均方向を再計算できるだろうと考えました。
$w['w'] はデータベースに保存されている方向です。
while($w = $stmt->fetch()){
$x += cos(deg2rad($w['w']));
$y += sin(deg2rad($w['w']));
}
$angle = atan2($y, $x);
$angle = 360 + round(rad2deg($angle));
この式は正しいですか?
この式が正しい場合。理想的には、完全な機能を MySQL に提供したいと考えています。私はそれからこれを作りました。()がたくさん出てきますが…
(360 + degrees(atan2(sum(sin(radians(W))), sum(cos(radians(W))))))) AS angle