Re: METAR の更新
toshi
投稿数: 1540
toshiです。
MacのスレッドをすっかりMETARネタで埋めてしまってスミマセン。
今日は時間があったので、もう少しMETARの更新の不具合についてソースコードを見ながら考えてみました。
Tatさん:
> RJTT の場合は http://weather.noaa.gov/pub/data/observations/metar/stations/RJTT.txt
> です。
具体的なURLは知りませんでした。情報ありがとうございます。
ちなみに、拡張子は大文字のようですね。
http://weather.noaa.gov/pub/data/observations/metar/stations/RJTT.TXT
> ということで、プログラム上は何の問題もないでしょう。toshi さんの設定ファイル変更でもとりあえず更新できますが、 9時間以上前の気象データを参照することになります。
はい、ちゃんと断っておくべきでした。
何も問題の起きていないマシンでは、設定ファイルの変更を「しないでください」。
METARの更新に問題の生じているマシンでは、とりあえずの回避策として試してみても良いでしょう。
> ひとつ気になるのが BIOS の時間設定です。この値が GMT なのか Local time なのかで OSによりGMT の計算が違ってくるかもしれません 。
はい、それはあるかもしれませんね。
sambarさんの書き込みにもありましたが、私もWindows環境で、biosもOSも Local time のJSTで設定しています。
環境の違いによってMETAR読込時の挙動が変わることは分かってきているわけですが、その要因は色々ありますね。
場合によっては、複数の要因が関係する可能性だって考えられます。
・BIOSの時刻設定 (私はJST)
・OSのタイムゾーンと時刻設定 (私はタイムゾーンも時刻もJST)
・OSの種類 (私は Wiondows XP Media Center Edition 2002 SP2 日本語版)
・ひょっとするとコンパイラの種類とコンパイル時の設定 (コンパイル済みバイナリしか使ったことがないのでよく分かりませんが)
・etc...
どの要因が効いているのか、あるいはどの程度の割合のユーザ環境で不具合が生じていそうかは、残念ながら私には分かりません。
ただ、「少なくとも現在の私の環境では」常に、 --log-level=warn としたときに METAR data too old (age min)のように表示される経過時間"age"は、本来のMETARデータの経過時間よりも必ず9時間多くなります。
・本来のage (分)=GMTの現在時刻−METARデータ内の更新時間
・表示されるage (分)=GMTの現在時刻−METARデータ内の更新時間+540=JSTの現在時刻−METARデータ内の更新時間
ですので、「少なくとも現在の私の環境では」設定ファイルで800分まで許容するようにしても、実際には260分(4時間20分)以上古いMETARデータが破棄されるため、9時間以上前のMETARデータを参照することにはならないはずだ、と思っています。
4時間20分以内であれば許容して良いものか、という話もありますけどね。
ちなみに、LFPG (シャルル・ド・ゴール国際空港)で起動してパリ周辺をうろうろした時も、9時間多い"age"が表示されました。
ここからは先は推測(というより妄想かも)です。
特に困っているわけではないので、雑談と思っていただいて結構です。
time()関数の戻り値が、Tatさんの環境ではGMTに、私の環境では Local time (JST=GMT+9) になっているのではないかな、という気がします。
コンパイル環境が無く、かつまともにソースコードが読めないので、ホントに想像です。
environment_ctrl.cxx より引用:・age > max_age なら METAR data too old (age min) というログを吐き、METARデータを破棄する。
・max_age は preferences.xml で設定可能で、デフォルトは240。
Environment/fgmetar.cxx より引用:・「age」=(「time()関数から得られたunix timeの現在時刻(秒)」−「METARデータの更新時刻(秒)」) ÷ 60。
同じく Environment/fgmetar.cxx より引用:・「METARデータの更新時刻」はGMTである。
結局のところ、time(0)の代わりにこの sgTimeGetGMT を以下のような感じで使えばGMTの現在時刻を戻せるような気がします。
fg_init.cxx より引用:
MacのスレッドをすっかりMETARネタで埋めてしまってスミマセン。
今日は時間があったので、もう少しMETARの更新の不具合についてソースコードを見ながら考えてみました。
Tatさん:
> RJTT の場合は http://weather.noaa.gov/pub/data/observations/metar/stations/RJTT.txt
> です。
具体的なURLは知りませんでした。情報ありがとうございます。
ちなみに、拡張子は大文字のようですね。
http://weather.noaa.gov/pub/data/observations/metar/stations/RJTT.TXT
> ということで、プログラム上は何の問題もないでしょう。toshi さんの設定ファイル変更でもとりあえず更新できますが、 9時間以上前の気象データを参照することになります。
はい、ちゃんと断っておくべきでした。
何も問題の起きていないマシンでは、設定ファイルの変更を「しないでください」。
METARの更新に問題の生じているマシンでは、とりあえずの回避策として試してみても良いでしょう。
> ひとつ気になるのが BIOS の時間設定です。この値が GMT なのか Local time なのかで OSによりGMT の計算が違ってくるかもしれません 。
はい、それはあるかもしれませんね。
sambarさんの書き込みにもありましたが、私もWindows環境で、biosもOSも Local time のJSTで設定しています。
環境の違いによってMETAR読込時の挙動が変わることは分かってきているわけですが、その要因は色々ありますね。
場合によっては、複数の要因が関係する可能性だって考えられます。
・BIOSの時刻設定 (私はJST)
・OSのタイムゾーンと時刻設定 (私はタイムゾーンも時刻もJST)
・OSの種類 (私は Wiondows XP Media Center Edition 2002 SP2 日本語版)
・ひょっとするとコンパイラの種類とコンパイル時の設定 (コンパイル済みバイナリしか使ったことがないのでよく分かりませんが)
・etc...
どの要因が効いているのか、あるいはどの程度の割合のユーザ環境で不具合が生じていそうかは、残念ながら私には分かりません。
ただ、「少なくとも現在の私の環境では」常に、 --log-level=warn としたときに METAR data too old (age min)のように表示される経過時間"age"は、本来のMETARデータの経過時間よりも必ず9時間多くなります。
・本来のage (分)=GMTの現在時刻−METARデータ内の更新時間
・表示されるage (分)=GMTの現在時刻−METARデータ内の更新時間+540=JSTの現在時刻−METARデータ内の更新時間
ですので、「少なくとも現在の私の環境では」設定ファイルで800分まで許容するようにしても、実際には260分(4時間20分)以上古いMETARデータが破棄されるため、9時間以上前のMETARデータを参照することにはならないはずだ、と思っています。
4時間20分以内であれば許容して良いものか、という話もありますけどね。
ちなみに、LFPG (シャルル・ド・ゴール国際空港)で起動してパリ周辺をうろうろした時も、9時間多い"age"が表示されました。
ここからは先は推測(というより妄想かも)です。
特に困っているわけではないので、雑談と思っていただいて結構です。
time()関数の戻り値が、Tatさんの環境ではGMTに、私の環境では Local time (JST=GMT+9) になっているのではないかな、という気がします。
コンパイル環境が無く、かつまともにソースコードが読めないので、ホントに想像です。
environment_ctrl.cxx より引用:
long max_age = metar_max_age->getLongValue();
long age = result.m->getAge_min();
if (max_age && age > max_age) {
SG_LOG( SG_GENERAL, SG_WARN, "METAR data too old (" << age << " min).");
delete result.m;
result.m = NULL;
・max_age は preferences.xml で設定可能で、デフォルトは240。
Environment/fgmetar.cxx より引用:
long FGMetar::getAge_min() const
{
time_t now = _x_proxy ? _rq_time : time(0);
return (now - _time) / 60;
}
同じく Environment/fgmetar.cxx より引用:
_time = sgTimeGetGMT(_year - 1900, _month - 1, _day, _hour, _minute, 0);
結局のところ、time(0)の代わりにこの sgTimeGetGMT を以下のような感じで使えばGMTの現在時刻を戻せるような気がします。
fg_init.cxx より引用:
time_t currGMT = sgTimeGetGMT( gmtime(&cur_time) );
投票数:27
平均点:2.59
投稿ツリー
-
FlightGear Mac OS X 1.0.0
(Tat, 2007-12-20 11:50)
-
Re: FlightGear Mac OS X 1.0.0
(BBCTV, 2007-12-20 18:20)
-
FlightGear Mac OS X 1.0.0-r150
(Tat, 2008-1-5 13:44)
-
FlightGear Mac OS X 1.0.0-r151
(Tat, 2008-1-10 17:24)
-
FlightGear Mac OS X 1.0.0-r152
(Tat, 2008-1-17 12:48)
-
Re: FlightGear Mac OS X 1.0.0-r152
(takehiro, 2008-2-1 3:02)
-
Re: FlightGear Mac OS X 1.0.0-r152
(Tat, 2008-2-1 4:07)
-
Re: FlightGear Mac OS X 1.0.0-r152
(takehiro, 2008-2-2 23:07)
-
Re: FlightGear Mac OS X 1.0.0-r152
(Tat, 2008-2-3 4:59)
-
Re: FlightGear Mac OS X 1.0.0-r152
(takehiro, 2008-2-3 21:54)
-
METAR の更新
(toshi, 2008-2-3 22:28)
-
Re: METAR の更新
(toshi, 2008-2-3 23:53)
- Re: METAR の更新 (takehiro, 2008-2-4 0:24)
-
Re: METAR の更新
(Tat, 2008-2-5 5:25)
-
Re: METAR の更新
(sambar, 2008-2-6 1:09)
-
Re: METAR の更新
(toshi, 2008-2-7 0:52)
-
Re: METAR の更新
(Tat, 2008-2-7 13:03)
-
Re: METAR の更新
(Tat, 2008-2-14 0:43)
-
Re: METAR の更新
(toshi, 2008-2-23 2:16)
-
Re: METAR の更新
(takehiro, 2008-2-25 5:47)
- Re: METAR の更新 (toshi, 2008-3-5 23:16)
-
Re: METAR の更新
(takehiro, 2008-2-25 5:47)
-
Re: METAR の更新
(toshi, 2008-2-23 2:16)
-
Re: METAR の更新
(Tat, 2008-2-14 0:43)
-
Re: METAR の更新
(Tat, 2008-2-7 13:03)
-
Re: METAR の更新
(toshi, 2008-2-7 0:52)
-
Re: METAR の更新
(sambar, 2008-2-6 1:09)
-
Re: METAR の更新
(toshi, 2008-2-3 23:53)
- Mac OS X 10.5.2 更新後の問題について (Tat, 2008-2-14 8:56)
-
METAR の更新
(toshi, 2008-2-3 22:28)
-
Re: FlightGear Mac OS X 1.0.0-r152
(takehiro, 2008-2-3 21:54)
-
Re: FlightGear Mac OS X 1.0.0-r152
(Tat, 2008-2-3 4:59)
-
Re: FlightGear Mac OS X 1.0.0-r152
(takehiro, 2008-2-2 23:07)
-
Re: FlightGear Mac OS X 1.0.0-r152
(Tat, 2008-2-1 4:07)
-
Re: FlightGear Mac OS X 1.0.0-r152
(takehiro, 2008-2-1 3:02)
-
FlightGear Mac OS X 1.0.0-r152
(Tat, 2008-1-17 12:48)
-
FlightGear Mac OS X 1.0.0-r151
(Tat, 2008-1-10 17:24)
-
FlightGear Mac OS X 1.0.0-r150
(Tat, 2008-1-5 13:44)
-
Re: FlightGear Mac OS X 1.0.0
(BBCTV, 2007-12-20 18:20)