logo
ホーム •  フォーラム •  日本語wikiトップ •  アカウント情報 •  サイト内検索 •  新規登録
 ログイン
ユーザー名:

パスワード:


パスワード紛失

新規登録
 メインメニュー
 米国サイト
 オンライン状況
181 人のユーザが現在オンラインです。 (6 人のユーザが フォーラム を参照しています。)

登録ユーザ: 0
ゲスト: 181

もっと...

Re: METAR の更新

このトピックの投稿一覧へ

通常 Re: METAR の更新

msg# 1.1.1.1.1.1.1.1.1.1.1.2.1.1
depth:
13
前の投稿 - 次の投稿 | 親投稿 - 子投稿.1 | 投稿日時 2008-2-7 0:52
toshi  長老   投稿数: 1522
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 より引用:
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;
・age > max_age なら METAR data too old (age min) というログを吐き、METARデータを破棄する。
・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;
}
・「age」=(「time()関数から得られたunix timeの現在時刻(秒)」−「METARデータの更新時刻(秒)」) ÷ 60。

同じく Environment/fgmetar.cxx より引用:
_time = sgTimeGetGMT(_year - 1900, _month - 1, _day, _hour, _minute, 0);
・「METARデータの更新時刻」はGMTである。

結局のところ、time(0)の代わりにこの sgTimeGetGMT を以下のような感じで使えばGMTの現在時刻を戻せるような気がします。
fg_init.cxx より引用:
time_t currGMT = sgTimeGetGMT( gmtime(&cur_time) );

投票数:19 平均点:2.11

投稿ツリー

  条件検索へ


 検索

高度な検索
 新しい登録ユーザ
petrovz358 2024-3-29
hirafahad 2024-3-29
iakovleva8 2024-3-29
mostbet3 2024-3-29
almon2 2024-3-29
asukysu 2024-3-29
Garyarcuri 2024-3-29
riabovasb4 2024-3-29
igyxybav 2024-3-29
ygutohu 2024-3-29
 最近の画像(画像付)
自作11機目 F/A-18... (2022-5-27)
自作11機目 F/A-18...
飛んでみる八尾空港 (2022-4-10)
飛んでみる八尾空港
作ってみる八尾空港 (2022-4-2)
作ってみる八尾空港
F117 nighthawk (2021-5-19)
F117 nighthawk
HiTouchさん宛の画像... (2020-11-8)
HiTouchさん宛の画像...
Powered by XOOPS Cube 2.1© 2001-2006 XOOPS Cube Project
Theme designed by OCEAN-NET