民航气象报文解码程序代码
民用航空气象信息系统 BSB文本格式
民用航空气象信息系统BSB文本格式说明BSB(公报说明块)用于决定气象公报的处理原则,主要有三种类型:输入宝的BSB、输出报的BSB和产品文件的BSB,下面对BSB文本格式做简要说明。
(1)输入报的BSB文本格式输入报的BSB文本中共有16项,以空格为分隔符,以北京首都机场(ZBAA)飞行气象情报编入TTCI73公报为例:SPCI33 ZBAA IN N Y -1 -1 Y N -1 N N N 54 55第一项:公报报头TTAAii。
第二项:航站的四字代码XXXX.第三项:报类,输入报为IN。
第四项:数据保护。
只对常规气象报有用,如果为Y,则表示请求该报的对方通道号是非特权用户通道,不向对方发送被请求的这份公报,如果为N,则不对数据进行保护,只要对方要求,此公报就被发送。
第五项:重复检测。
如果为Y,则检查收到的公报是否重复,重复收到的公报将不被存储和处理。
如果为N表示对收到的公报不进行重复检查。
第六项:日期时间组检测。
如果为N,则仅对报头时间做常规检查,即01≤YY≤31,00≤GG≤23,00≤gg≤59,则YYGGgg有效。
如果为Y,根据填写的基本时间和间隔时间,检查报头时间,并且需设置第七、八项,否则这两项为-1.。
第七项:基本时间。
当第六项设置为Y时,此项设置为开始检测报的时间,即一天中该公报报头时间GGgg所允许的第一次时间,格式为HH:MM。
第八项:间隔时间。
当第六项设置为Y时,此项为在基本时间的基础上每隔多长时间进行再次检查,即两份采用相同报头的公报之间所允许的时间差,格式为HH:MM。
如果此项为00:00,则表示此公报只允许基本时间。
第九项:存储/转发,如果为Y,则存储并转发此份公报,并且还应填写输出通道号。
如果为N表示对此份公报只存储不转发。
第十项:优先级。
指明该资料转发时的优先级,优先级为1~5。
注意:在地区中心核心服务器上没有该项。
第十一项:报告收集。
如果为Y,表示系统对此每份公报进行报告收集,要对输入公报的TT和该BSB指定的区域索引定义报告规格块,以便对输入公报中的报告进行收集,对于公报中的每一份报告是否收集还要由相应的报告规格块中的站表来决定,收集的报告存放在报告数据文件中。
国际气象报文解码
1) 风向风速:气象风以真北为基准,以风的来向的最近的 10 度取整为单位(三位数 字表示),后跟观测前 10 分钟的地面平均风向风速(两位数字,也有三位数字的 例外)。这些数据后不需要空格紧跟 KT,KMH,MPS 这三种缩写中的一种以强 调用于报告风速的单位。 例如:31015KT
2) 当最大风速超过平均风速 10 节或更多时,在风速后加 G 和两位或三位数字指示 最大阵风风速。 如:31015G27KT
5) 当在观测前 10 分钟时段内风向变化达到 60 度或以上,且平均风速超过 3 节时按 顺时针方向编报两个极值风向,中间用“V”分开。 例如:31015G27KT 280V350
3. 水平能见度:
1) 在 METAR 中,报告的能见度是主导能见度,且在一定的条件下是最小能见度。主 导能见度是指观测到的,达到或超过观测点四周一半或机场地面一半的范围所具有 的能见度值,这些范围可以是连续或不连续的扇区。
CB 或 TCU。 3) 机场或机场附近无重要天气现象。
8. 空气温度/露点
1) 气温和露点以摄氏度表示,M 指示负值。 例如:10/03,01/M01 如果露点温度丢失,应报告:10///。
2) 气温和露点温度以最近的整数摄氏度报告,如观测值中包含 0.5 则向上取整到较高 的整数摄氏度。例如+2.5℃去小数,报 3℃;-2.5℃去小数报-2℃。
2) 地名代码: ICAO 机场四字地名代码
3) 观测时间 观测的日期和时间,用日期/小时/分钟格式表示,加后缀 Z 表示世界协调时。 例如:METAR ZGGG 291020Z 当一份天气通告包含一个或更多机场的天气报告时,编码 METAR 或 SPECI 由缩 写 SA 或 SP 取代,后跟通告识别编码和观测日期及时间,各分项报告中不再出现 编码 METAR 或 SPECI 和观测时间。
(飞行专业)气象通告报文对照
气象通告报文气象通告分两种,一种是机场实况,也就是发报时所在机场的天气实况(METAR);一种是气象预报,由发报单位预测的,报文内限定时间内的机场天气变化趋势(TAF).这两种电报通常比一般的天气预报详细的多,以供飞行员作飞行参考。
以下举例说明如何理解这两种电报的内容:例1:METAR ZGGG 010800Z 05004MPS 280V100 7000 -TSRA FEW033CB BKN03331/24 Q1013 TEMPO 2000 TSRA SCT026CB BKN030例2:TAF ZGGG 010606 20004MPS 6000 BKN033 TEMPO 0616 2000 TSRA SCT026CB 以上两例分别是2002-3-1日广州白云机场的16:00实况和14:00-20:00预报METAR分类代码例1中代码说明识别码METAR/SPECIMETAR实况或特选报(有特殊天气时用),本例为实况CCCC ZGGG机场ICAO四字代码,本例为广州白云机场DDGGGGZ010800Z协调世界时,+8为北京时,本例为北京时间1日16:00地面风DDDFFGFFMPS/KT/KMH05004MPS前3位指风的来向,后2位为风速,G后两位表示阵风,MPS/KT/KMH分别为米/秒,节,公里/小时.本例为050度风4米/秒DDDVDDD280V100风向变化范围,本例指风来自280-100度之间能见度VVVVD 7000 能见度,本例为7000米,如最后带D或TAFWW-天气现象表航空天气报告电码解析METARMETAR是日常航空天气报告的名称,一般每隔一小时或半小时发布一次。
一般包含以下信息:——识别组——地面风——不平能见度——跑道视程(如果有)——现在天气——云(或垂直能见度,如果有)——温度和露点——修正海平面气压——补充信息报文翻译举例METAR ZBAA 212100Z 31004G11MPS 280V350 1400SW 6000N R36L/P1500 +SHRA FEW005 FEW010CB SCT018 BKN025 10/03 Q0995 RETS WS RWY24 BECMG FM2200 26005MPS 6000 -SHRA SCTO10 BKN025=21日21时(世界时)北京的例行航空天气报告:310度风4米/秒、阵风11米/秒,风向从280度变化到350度,西南方向能见度最小为1400米,北方能见度最大为6000米,36L跑道的跑道视程为大于1500米,大阵雨,少云、云底高度为500英尺,少量CB云、云底高度为1000英尺,蔬云云底高度为1800英尺,多云云底高度为2500英尺,温度为10度、露点为3度,修正海平面气压为995百帕,2100时(世界时)前一小时内曾出现雷暴天气,24号跑道的起飞或降落地带或两者都有风切变的影响。
航空天气报告电码解析
航空天气报告电码解析METARMETAR是日常航空天气报告的名称,一般每隔一小时或半小时发布一次。
一般包含以下信息:——识别组——地面风——不平能见度——跑道视程(如果有)——现在天气——云(或垂直能见度,如果有)——温度和露点——修正海平面气压——补充信息报文翻译举例METAR ZBAA 212100Z 31004G11MPS 280V350 1400SW 6000N R36L/P1500 +SHRA FEW005FEW010CB SCT018 BKN025 10/03 Q0995 RETS WS RWY24 BECMG FM2200 26005MPS 6000 -SHRA SCTO10 BKN025=21日21时(世界时)北京的例行航空天气报告:310度风4米/秒、阵风11米/秒,风向从280度变化到350度,西南方向能见度最小为1400米,北方能见度最大为6000米,36L跑道的跑道视程为大于1500米,大阵雨,少云、云底高度为500英尺,少量CB云、云底高度为1000英尺,蔬云云底高度为1800英尺,多云云底高度为2500英尺,温度为10度、露点为3度,修正海平面气压为995百帕,2100时(世界时)前一小时内曾出现雷暴天气,24号跑道的起飞或降落地带或两者都有风切变的影响。
(以下是趋势型着陆预报,其预报有效时间为2100Z--2300Z)从22时(世界时)以后,天气为260度风5米/秒,能见度6000米,小阵雨,蔬云云底高度为1000米,多云云底高度为2500英尺。
典型的电码格式SPECI ZBAA 210825Z 31010G16 280V350 1400S 6000N R36R/P1500 +SHRA FEW005 FEW010CB BKN025 10/03 Q1001 RETS WS RWY36L BECMG FM1103 25015G21 600NSW SKC注:风:平均风向,以相近的10度为单位:VRB为风向不定。
教你阅读气象报文(METAR)
仅在先进机场会有气象预测。以未来两小时的预
BECMG = 天气正在逐渐转变。
NOSIG
= 天气没有变化。
例:
TEMPO 3000 SHRA = 未来两小时将有临时 3000 英尺能见度、阵雨。
BECMG 33035KT
= 未来两小时风向将变为 330 ,风速 35 节。
跑道可视距离显示了跑道真实的能见度。 RVR 总使用 R 为前缀。 格式 : R×× /#### ,×× 为跑道号, #### 为可视距离。
例如: R24/1200 = 24 跑道能见度 1200 米 该项对飞行员很有用。 若 RVR 低于航图规定的值, 则必须等待天气变好或转场。
4 、气象信息
由英文字母和 + ,- 号组成。可能有多组,表明了不同的气象情况。
32007MPS
7000
SCT040 FEW070
05/M04 Q1028 NOSIG
(机场 )
(时间 )
(风向风速 ) (能见度 )
(云
层)
(温度 )
(修压 )
(预测 )
翻译:
上海浦东国际机场,协调世界时 17 日 17:08 。地面风向 320 ,风速 7 米每秒。
能见度 7000 米。 4000 英尺有三四分云。 7000 英尺有一二分云。温度 05 摄氏
2、能见度
格式 :×××× ,四位数字,以米为单位。 0000 = 能见度小于 50 米。 5000 = 能见度 5 公里。
9999 = 能见度大于 10 公里。
若当地能见度很复杂的话可能出现如下情况: 1000NW 6000S = 能见度机场西北部 1000 米,机场南部 6000 米。
航空气象报文
7.第七组 重要天气现象
SA 扬沙 SS 沙暴 VCFG表示机场附近有雾 SHRA 中等阵雨 GR 冰雹
8.第八组 预报的云
SCT 010 (Cb) OVC 120 “SKC” 碧空 “NSC” 无重要的云
9.第九组 CAVOK 好天气
15.第十五组 变化时间
“TT”可表示为“FM”、“TL”和“AT”,分别 指变化开始时间、变化结束时间和在某一 时刻出现。
“GGgg”表示变化的时、分,用世界时。 “BECMG FM 0215”意为
02点15分天气将变为……,
16. 第16组 变化的气象要素组
说明变化的气象要素 “NSW”表示无重要天气现象, “NSC”表示无重要的云。
4.第四组 风向风速
KMH或
dddffGfmfm MPS或
KT
dndndnVdxdxdx
VRB表示风向不定
5.第五组 能见度
VVVVDv VxVxVxVxDv 3500S 表示向南能见度3500米 “0000”,表示能见度<50米; “9999”,表示能见度≥10千米。
日常航空天气 报告
FR
航路天气预报
SP
特殊报告
FA
区域天气预报
FC
航站天气报告 (≤12h)
WS
重要气象情报
FT
航站天气预报 (>12h)
UA
飞机空中报告
AA:地理指示码
“CI”表示中国
KK指AA的各区编号
KK
指示范围
31
北京气象收集中心(第一部分)
32
北京气象收集中心(第二部分)
航空气象报文详解
俯瞰网,愿为民航界撑起一片交流的天!
本资料由俯瞰网为您提。
机场天气预报(TAF)_ ICAO的地址代码
TAF ZBAA 010435Z 010615 20004MPS 6000 BKN033=
TAF电码中用的地址是ICAO的四字代码。
俯瞰网,愿为民航界撑起一片交流的天!
本资料由俯瞰网为您提。
机场天气预报(TAF)_编报日期和时间
TAF ZBAA 010435Z 010615 20004MPS 6000 BKN033=
解释:这组要素是TAF报实际编报时间。 单位:使用的是世界协调时,用Z表示。 格式:前两位数字是日期,后面紧跟表示时间的四位数字,最后是字 母Z(它们之间不加空格)。
俯瞰网,愿为民航界撑起一片交流的天!
本资料由俯瞰网为您提。
机场天气预报(TAF)_天空状况
TAF ZBAA 010135Z 010312 20004MPS 6000 -RA BKN033= 编报格式: TAF报中云的编报格式和第二章METER描述的格式一样。
云量:前3位表示预计的云量,用下列缩写表示: SKC —碧空—— 小于1/8量; FEW——少云—— 1/8至2/8量; SCT——疏云—— 3/8至4/8量; BKN——多云—— 5/8至7/8量; OVC——阴天—— 8/8量; 云底:后3位表示云底高度,以30米(100英尺)为单位。
俯瞰网,愿为民航界撑起一片交流的天!
本资料由俯瞰网为您提。
机场天气预报(TAF)
定义:天气预报是指以塔台为中心,半径50公里 范围内预期24时以内的气象条件简要说明。 类型(根据预报有效时段),有两种类型:
【国际气象报文解码】
【国际⽓象报⽂解码】国际⽓象报⽂解码⼀、ICAO标准METAR⽓象报⽂例⾏观测报(METAR)的内容和格式1:报告位置时间风能见度 RVR类型识别编码METAR EGSS 231020Z 31015G27KT 1400SW6000N R24/P1500天⽓现象云温度/ 露点 QNH 最近风切变趋势跑道状况天⽓SHRA FEW005 10/03 Q0995 RETS WS RWY23 NOSIG 88290928 SCT010CB BKN025例⾏观测报(METAR)的内容和格式2:报告类型位置编码⽇期/时间⾃动观测状态风能见度RVRMETAR EGSS231020Z AUTO31015G27KT280V35060002500SWR24/P1500现在天⽓云温度/露点QNH最近天⽓风切变海洋表⾯温度和洋⾯状况SHRA FEW005SCT010CBBKN02510/03Q0995RETS WS RWY23W07/S4跑道状况趋势R24/6205//NOSIG例⾏观测报(METAR)分项解释:METAR报中有关的编报形式也适⽤与SPECI报和TAF报1. 报头识别部分报头识别部分包括三项内容:1) 报告种类:a. METAR----例⾏观测:⽆论有⽆飞⾏任务,每⼩时观测⼀次,根据⽓象主管部门的要求,也可每半⼩时观测⼀次。
b. SPECI----特殊观测:指在两次例⾏观测之间的时段内,出现下列情况时所进⾏的观测:当能见度(跑道视程)、云、风达到或通过本场特选报规定的数值,或达到、通过本场运⾏最低标准时某些要素达到或通过经空中交通管制部门或其他部门和⽓象部门商定的数值时。
当下列任何⼀种天⽓现象出现、终⽌(消失)或强度有变化时:冻降⽔;冻雾;中或⼤的降⽔(包括阵性降⽔);低吹尘、沙或雪;⾼吹尘、沙或雪;尘暴;沙暴;雷暴(伴有或不伴有降⽔);飑;漏⽃云。
2) 地名代码:ICAO 机场四字地名代码3) 观测时间观测的⽇期和时间,⽤⽇期/⼩时/分钟格式表⽰,加后缀Z表⽰世界协调时。
[航空航天]国际航空气象电码-精品文档
FM 15-Ⅸ Ext. METAR----日常航空天气报告(含或不含趋势预报)FM 16-Ⅸ Ext. SPECI----选定的特殊航空天气报告(含或不含趋势预报)电码型式:METAR KMH 或或 CCCC (YYGGggZ) (AUTO) dddffGf m f m KT 或 d n d n d n Vd x d x d x SPECI MPSN s N s N s h s h s h sRD R D R/V R V R V R V R I 或VVVVD V V X V X V X V X D V 或w'w' VVh s h s h s或 RD R D R/V R V R V R V R VV R V R V R V R i 或CAVOK SKCWS RWYDR D RT'T'/T'd T'd QP H P H P H P H Rew'w' 或WS ALL RWYN s N s N s h s h s h sKMH 或 VVVV W'W' 或(TTTTT TTGGgg dddffGf m f m KT 或或或 VVh s h s h s或 MPS CAVOK NSW 或NOSIG) SKC(或NSC)(RMK……)注释:(1)METAR是日常航空天气报告电码的名称。
SPECI是选定的特殊航空天气报告电码的名称。
METAR和SPECI报告中可以含有趋势预报。
(2)各电码组所含字符数量不等。
当某一要素或现象未出现时,则该报告中的相应电码组或某组的增添部分省略不报。
下面“规则”中将对各组给予详细规定。
带括号的电码组根据区域或国家的决定编报。
按照各组的详细规定有些组可以重复编报。
(3)电码型式包含一个趋势预报段,或以变化指示码(TTTTT=BECMG或TEMPO,根据情况而定),或以字码NOSIG作为识别标志。
(4)SPECI报的发报标准见世界气象组织出版物第49号--《技术规范》[C.3.1]节。
机场预报代码详细解释
机场预报代码详细解释机场预报代码TAF描述了某一机场的预报天气,通常覆盖9或24小时时间,许多后来的TAF仅覆盖了最后18小时,这样较早时间的预报由9小时的TAF来给出,有效期为9小时的TAF不断更新,并每隔3小时重新发布,这样可在12到24小时内有效。
每隔6小时,当需要时,发布对预报的修正。
TAF预报期可用缩写M(from)紧接着时间而分成两隔或更多个部分,TAF和METAR,SPECI是分开发布的,并不能归类于特别报告,但许多METAR缩写也用在TAF中,以下仅注明明显不同的地方。
TAF的内容和格式如下表示报告类型 位置 发布时间 有效期 风 能见度 天气TAF EGSS BO600E BO716 31015 8000 -SHRA云 变化 有效期FEW005 SCT018 BKN025 TEMPO B1116能见度 天气 可能性 有效期 天气 云4000 +SHRA PROB30 B1416 TSRA BKN010CB与METAR区别2.1 在有效期内,前两个数字表示TAF开始日期,紧接的两位数是以UTC时间表示的天气预报开始时间,最后二位数表示的是天气预报截止时间例如:TAF EGLL B0600E B0716如果在一个TAR中,包括一个或多个机场的天气预报,TAR符号将缩写为FC或FT,紧接着的是识别号和发布时间(用UTC表示的小时和分钟)2.2 水平能见度: 和METAR代码一样,但仅预报一个最小值2.3 天气: 如果没有显著天气情况,这部分可省略,如果在天气预报后, 所预报的天气逐渐减弱而变得不显著,用缩写NSW来表示(无显著天气)2.4 云: 当预报天气晴朗时,用SKC来取代云的代码,其他云低于5000英尺或最高扇区最低高度二者中高者 ,可用NSC来表示(无明显云)2.5 显著变化: 缩写FM接着最近的UTC时间,用来表示天气预报另一部分的开始,在这部分之前的预报将被这部分所代替。
气象报文
气象中心 2007-09
常见交换飞行气象情报TAF报(航站预报) ❖ 重要气象情报:SIGMET报 ❖ 区域预报系统产品:高层风温预告图, 中层风
温预告图,高层重要天气预告图 (SWH)和中层 重要天气预告图(SWM))
SPECI ZHHH 060121Z 12004MPS 0800 R04/0800N FG SKC 01/00 Q1027 NOSIG=
METAR报每项含义
METAR ZBAA 200000Z 00000MPS 3000 BR
FEW023 SCT040 12/11 Q1024 NOSIG= 表示实况,如果是SPECI,表示特选报
单位:MPS(1MPS=1.944KT)表示风速的单位是米/秒, 目前我国都采用这种单位。 KMH表示风速的单位是千米/小时。 KT表示风速的单位是海里/小时,目前欧美大部分国家采 用这种单位。
机场天气预报(TAF)_编报日期和时间
TAF ZBAA 010435Z 010615 20004MPS 6000 BKN033=
解释:这组要素是TAF报实际编报时间。 单位:使用的是世界协调时,用Z表示。 格式:前两位数字是日期,后面紧跟表示时间的四位数字,
最后是字母Z(它们之间不加空格)。
机场天气预报(TAF)_报告类型(二)
TAF COR:由于操作失误等原因,已经发布的 TAF有误, 对报文及时更正 ,就应发布报。 例如: TAF ZBAA 010135Z 010312 20004MPS 3000 BKN033= TAF COR ZBAA 010235Z 010312 20004MPS 3000 BR BKN033=
MPS表示风速单位,米/秒,常见:KMH (千米/小时),KT(海里/小时)
航空气象服务报文举例
如有帮助,欢迎支持。
一、风切变警报1.WS WRNG B747 REPORTED MOD WS IN APCH RWY26AT1510风切变警报:波音747报告,1510世界时在26号跑道的进近区域有中度风切变。
2.WS WRNG SUFFACE WIND 320/20KMH WIND AT 60M360/50KMH IN APCH风切变警报:在进近区域,地面风为320度,每小时20公里;在60米高度处风为360度,每小时50公里。
3.WS WRNG SUFRACE WIND 320/10KT WIND AT 60M 360/25KTIN APCH风切变警报:在进近区域,地面风为320度,每小时10节;在60米高度处风为360度,每小时25节。
4.WS WRNG MBST APCH RWY26风切变警报:微下击暴流在26号跑道近进区域。
5.WS WRNG 30KT AIRSPEED LOSS 2NM FINAL RWY13风切变警报:在离13号跑道2海里处,空速损失30节。
二、日常报(例行天气报告)1.ZCZC TYM040GG ZBAAYMYX121005 ZLXYYMYXSA CIZL ZLXY 121000METAR ZLXY 121000Z 05004MPS 280V100 1000 TSRA SCT033(CB)BKN040 30/24 Q1014 BECMG 1314 09001MPS 0900 DZ BKN050 FM16 4000 NSW=电报编号40,收报地址北京民航气象中心,发报时间12日10时05分,发报地址西安民航气象台。
日常报,中国西北,西安,规定观测时间12日10时00分。
实况报,西安机场,121000Z 世界时;地面风为50度,风速4米/秒,风向变化范围风来自280-100度之间,能见度为1000米,天气现象为雷雨,疏云,积雨云,云底高990米;多云云底高1200米。
航空气象信息和解码
航空气象信息和解码1. 实况天气报告(METARS)实况天气报告的格式和内容如下表所示:报告类型位置识别时间风能见度跑道视程天气状况METAR EGSS231020Z31015G27KT1400S6000NR24/P1500SHRA云温度露点QNH最近天气风切变趋势道面状况FEW00510/03Q0995RETS WS RW23NOSIG882909281.1. 报告识别报告识别由三部分组成:(a) 报告类型(i) METAR 航空常规天气报告。
航空气象台开放时间内,在固定的时间每一小时或半小时发布一次。
(ii) SPECI 航空特殊天气报告。
当某一气象要素变好或变坏时,发布特殊天气报告作为常规天气报告的补充。
(b) 位置识别国际民航组织四字代码。
(c) 时间观测时的国际时时和分,后面加识别字母Z。
注:当使用可能包括一个或多个机场的气象公告时,METAR(或SPECI)可能会被SA或SP代替,后面跟的是日期和观测时间,报告类型和时间不再出现在独立的天气报告中。
1.2. 风风向使用真方位,用三位数字表示,取整至最接近的10度。
后面是观测时间之前10分钟风速的平均值。
风速的单位紧随其后由KT,KMH或MPS表示。
例如:31015KT当阵风超过平均风速10KT或更多时,用G及2位或3位数字表示。
例如:31015G27KT静风由“00000”及风速单位缩写表示,风向不定由“VRB”和风速及单位表示。
如果在观测时间前10分钟内风向的变化大于或等于60°,报告会以顺时针的方向给出风向的两个最值(只有风速大于3KT时才给出此项)。
例如:31015G27KT 280V3501.3. 水平能见度当不存在显著的方向上的差别时,能见度以米为单位给出最小值。
当不同方向上能见度存在显著差别时,能见度的最小值后面会以八个方向之一来指明方向。
例如:4000NE当最小能见度小于1500米,而另一方向的能见度大于5000米时,报告会给出最大能见度及其方向作为附加信息。
实况预报代码详细解释.hh
天气资料缩写对照表
WEATHER ABBREVIATIONSBC=patches
实况预报代码详细解释
<一>实况预报代码
实况天气报告的内容和格式如下所示:
报告类型:METAR位置:EGSS时间:231020风:31015G27KT能见度:1400SW6000N RVR:R24/P1500天气:SHRA云:FEW005,SCT010CB,BKN025温度/露点:10/03 QNH:Q0995近期天气:RETS风切变趋势:WSRWY23道面情况:NOSIG88290928
例如:24CLRD93跑道24已扫干净,刹车效益中到好
1.12 AUTO和RMK :如果气象报告完全由自动观测组成,无人工介入时,用AUTO来来表示包含对附加气象元素的可选择部分,它将根据国家规定附加到METAR中,并且将不向国外发送。
1.13丢失的信息:在METAR或SPECI中丢失的信息将由斜线代替。
例如:31015KT
在字母G后的2位数或3位数,给出阵风速度超过平均风速10KT或更多时的最大风速。
例如:31015G25KT
用0000和风速单位表示静风,用缩写VRB来表示风向不定。如果从开始观测时起10分钟内,风向变化60度或更多,有关风的报告中将按顺时针顺序给出所观测到的两个极端方向,风向在这个范围内变化。
例如:R24/1100D
(2)显著变化
当跑道视程发生显著变化,例如观测前10分钟内,某一分钟平均值比10分钟平均值变化多于50米或多于10分钟平均值的20/两者中最大的,这时将按顺序给出一分钟平均值中最小值和最大值,并以V分开。
民航气象taf报文解码纠错算法的开发和应用
民航气象TAF报文解码纠错算法的开发与应用朱国栋民航新疆空中交通管理局气象中心,乌鲁木齐市,新疆,830016摘要:本文按照民航气象行业标准的定义和要求,设计开发TAF报文的解码纠错算法,实现对TAF报文的实时解码分析、纠错告警,以及内容翻译等功能,并将该算法扩展至多种常用的民航气象报文,该算法可广泛应用于民航气象报文发布系统、气象报文监控系统以及气象对外服务系统等业务软件,进而实现报文质量的自动监控以及气象报文的明语解释等工作,提高民航气象的保障能力和对外服务水平。
关键词:TAF报文 解码 纠错 质量控制1 引言民用航空气象业务中,机场气象台对机场天气的预报通常以TAF电码形式对外发布,它包含对机场特定时段内预期气象情况的简要说明,即机场的地面风、能见度、天气现象、云、气温(需要时)以及上述气象要素的预期重要变化。
民航气象用户则通过查阅相关机场TAF预报,了解机场天气的重要变化,为航班计划的执行、调整提供详细的气象情报。
TAF报文由缩写电码组成,管制人员、签派以及其他非气象专业用户在实际工作中,通常需要对其进行相应的专业知识培训,才能较好的查阅理解TAF 报文的具体内容,这就造成TAF报文对非专业用户的可阅读性较差。
另外,由于TAF报文电码内容随机性大,在预报人员编写报文电码中,难免会出现字符错误、报文语法不符合规定等差错。
国内部分地区气象中心尝试开发填空式TAF预报编发系统,可实现TAF预报内容的质量控制,但该方法限制了报文录入速度;目前民航新疆空管局气象中心已有的业务系统,仅能够实现TAF报文的编发和查阅。
为了加强对TAF报文内容的质量控制,改善TAF预报的对非专业用户的可阅读性,本文尝试研究TAF预报报文(以下简称报文)的解码算法,实现报文的解码和质量控制,并能够将报文实时翻译成明语预报,为用户提供简介直观的预报产品。
2 TAF报文解码算法设计结合实际业务需求,TAF报文解码算法(以下简称算法)主要功能为:TAF 报文过滤、分解、质量控制、以及报文内容的实时翻译。
航空气象报文——METAR和SPECI报
例2
MTEAR ZUUU 032330Z 00000MPS 1600 R02/1400 –RA BR SCT020 OVC040 15/13 Q1022 NOSIG=
表示日期(20日)和时间(03时00
分钟),Z表示世界时
METAR报每项含义
地面风向和风速
METAR ZBAA 200300Z 17003MPS 3000 BR FEW023 SCT040 12/11 Q1024 NOSIG=
表示风向风速,00000MPS表示静风,此外, 还可以18004MPS等,31010G18MPS MPS表示风速单位,米/秒,常见:KMH(千 米/小时),KT(海里/小时) VRB表示风向不定 阵风:两分钟或十分钟时段内瞬间风速大于等于 平均风速 5 米/秒时的最大值。
METAR报每项含义
METAR ZBAA 200000Z 00000MPS 3000 BR FEW023 SCT040 12/11 Q1024 NOSIG=
表示修正海平面气压(QNH):是指将观测
到的场面气压,按照标准大气条件修正 到平均海平面的气压。
REw′w′组
可最多编报三组近时天气。如果在上次例行报告后或过 去一小时到本次观测之前的时段(取时间较短的为准)内 观测到下列天气现象,但在本次观测时段内未出现,应 编报近时天气现象的资料。 冻降水; 中或大的降水(包括阵性降水); 吹雪; 尘暴或沙暴; 雷暴; 龙卷云(陆龙卷或水龙卷); 火山灰。 MTEAR ZUUU 032330Z 00000MPS 1600 R02/1400 BR SCT020 OVC040 15/13 Q1022 RERA NOSIG=
教你阅读气象报文(METAR)
教你阅读⽓象报⽂(METAR)在连接FSINN飞⾏的时候,在FS顶部总会弹出⼀串数字和字母混在⼀起的字符串,这就是⽓象报⽂(METAR)。
⽓象报⽂是飞⾏中⾮常重要的数据!⼀定要仔细阅读下⾯的⽂章!最后会有题⽬给出,回答正确者得奖!本⽂为本⼈原创,参考了国外的各类资料,以及英汉词典。
⽓象报⽂(METAR)通常包括以下资料:复制内容到剪贴板1: 机场名称 2: 发布时间 3: 风⼒信息4: 能见度 5: 跑道视距 6: 天⽓7: 云层 8: ⽓温、露点 9: 修正海压10: 过去天⽓ 11: 风切变 12: 未来两⼩时的天⽓预测都是⾮常有⽤的资料吧?所以说METAR对我们来说是⾄关重要的。
先举个例⼦:ZSPD170800Z32007MPS7000SCT040 FEW070 05/M04 Q1028NOSIG(机场)(时间)(风向风速)(能见度)(云层)(温度)(修压)(预测)翻译:上海浦东国际机场,协调世界时17⽇17:08。
地⾯风向320,风速7⽶每秒。
能见度7000⽶。
4000英尺有三四分云。
7000英尺有⼀⼆分云。
温度05摄⽒度,露点-04摄⽒度。
修正海压1028。
未来两⼩时内天⽓⽆显著变化。
注意:METAR包含的12条信息不⼀定全部出现。
跑道视距、过去天⽓、风切变等信息可能会被省略。
当然同种信息有也可能显⽰很多条,例如云层信息(不同⾼度层的云层状况都要写出来)。
看不懂的话请继续往下看。
METAR⽓象报⽂解码下⾯我们对METAR内容来进⾏分节剖析:1、风⼒信息风⼒信息的格式:×××###MPS,×××为风向,###为风速。
不同国家可能使⽤MPS(⽶每秒),KT(节),KMH(千⽶每⼩时),这个要注意⼀下。
00000KT = ⽆风VRB= 风向不定,在风速⼩于3节时使⽤。
例如: VRB03KT。
G= 有阵风,后⾯跟阵风最⼤值。
例如: 25010G15MPS。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
<!-- saved from url=(0054)/manuel/METAR-Decoder.html --><html><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"><!--(c) 2002-2007 Manuel HerasPermission to modify and redistribute is explicitly granted for all purposes.I do not provide any guarantee as to the correctness of the decoding, and donot accept any responsibility.This HTML page contains a JavaScript decoder for the international METARstandard code for reporting of weather observations.I think the decoder is quite complete, according to the unofficialspecifications I have checked against, but I could not thoroughly testevery single field. Should you find any errors, please do not hesitate tocontact me.Use this page for anything you want, with or without modifications. If youimprove it, I would like to hear from you!Manuel Heras (manuel@)August 2002Dec 2006: Parser for "American" expression for altimetercontributed by Ricardo FernandezFeb 2007: Correction to support "0x0d0a-style" end-of-lines by Wim de VriesMar 2007: Parser for "American" Statute-Miles visibilitycontributed by Ricardo Fernandez--><title>METAR Decoding Page</title></head><body bgcolor="#99aabb"><!--/* OpenX Javascript Tag v2.8.2 */--><center><script type="text/javascript"><!--//<![CDATA[var m3_u = (location.protocol=='https:'?'https:///www/delivery/ajs.php':'/www/delivery/ajs.php');var m3_r = Math.floor(Math.random()*99999999999);if (!document.MAX_used) document.MAX_used = ',';document.write ("<scr"+"ipt type='text/javascript' src='"+m3_u);document.write ("?campaignid=1");document.write ('&cb=' + m3_r);if (document.MAX_used != ',') document.write ("&exclude=" + document.MAX_used);document.write (document.charset ? '&charset='+document.charset : (document.characterSet ? '&charset='+document.characterSet : ''));document.write ("&loc=" + escape(window.location));if (document.referrer) document.write ("&referer=" + escape(document.referrer));if (document.context) document.write ("&context=" + escape(document.context));if (document.mmm_fo) document.write ("&mmm_fo=1");document.write ("'><\/scr"+"ipt>");//]]>--></script><script type="text/javascript" src="./METAR Decoding Page_files/ajs.php"></script><ahref="/www/delivery/ck.php?oaparams=2__bannerid=16__zoneid=0__cb=d7c1791835__oadest=http%3A%2F%%2Fdnchosting%2F" target="blank"><img src="./METAR Decoding Page_files/9725b9fdb039a536dbbfeb49fd36c21c.gif" width="728" height="90" alt="directNIC cPanel Hosting" title="directNIC cPanel Hosting" border="0"></a><div id="beacon_d7c1791835" style="position: absolute; left: 0px; top: 0px; visibility: hidden;"><img src="./METAR Decoding Page_files/lg.php" width="0" height="0" alt="" style="width: 0px; height: 0px;"></div><noscript></noscript></center><script language="Javascript1.2">function add_output(text){document.encoded.decreport.value = document.encoded.decreport.value + text;}function is_num_digit(ch){return ( (ch == '0') || (ch == '1') || (ch == '2') || (ch == '3') ||(ch == '4') || (ch == '5') || (ch == '6') || (ch == '7') ||(ch == '8') || (ch == '9') );}function is_alphabetic_char(ch){return ( (ch >= 'A') && (ch <= 'Z') );}function decode_token(token){// Check if token is "calm wind"if(token == "00000KT"){add_output("Calm wind\n");return;}// Check if token is Wind indicationvar reWindKT = /^(\d{3}|VRB)(\d{2,3})(G\d{2,3})?(KT|MPS|KMH)$/;if(reWindKT.test(token)){// Wind token: dddss(s){Gss(s)}KT -- ddd is true direction, ss(s) speed in knotsvar myArray = reWindKT.exec(token);var units = myArray[4];add_output("Wind: ");if(myArray[1]=="VRB")add_output(" Variable in direction");elseadd_output(" True direction = " + myArray[1] + " degrees");add_output(", Speed: " + parseInt(myArray[2],10));if(units=="KT") add_output(" knots");else if(units=="KMH") add_output(" km/h");else if(units=="MPS") add_output(" m/s");if(myArray[3] != null){// I don't have the time nor the energy to investigate why// MSIE and Firefox behave differently with respect to an// omitted regular subexpression. Hence this quick hack to// detect if myArray[3] is not a number.if (myArray[3]!=""){add_output(", with Gusts of maximum speed " + parseInt(myArray[3].substr(1,myArray[3].length),10)); if(units=="KT") add_output(" knots");else if(units=="KMH") add_output(" km/h");else if(units=="MPS") add_output(" m/s");}}add_output("\n"); return;}// Check if token is "variable wind direction"var reVariableWind = /^(\d{3})V(\d{3})$/;if(reVariableWind.test(token)){// Variable wind direction: aaaVbbb, aaa and bbb are directions in clockwise orderadd_output("Wind direction is variable between "+token.substr(0,3)+" and "+token.substr(4,3)+"\n");return;}// Check if token is visibilityvar reVis = /^(\d{4})(N|S)?(E|W)?$/;if(reVis.test(token)){var myArray = reVis.exec(token);add_output("Visibility: ");if(myArray[1]=="9999")add_output("10 km or more");else if (myArray[1]=="0000")add_output("less than 50 m");elseadd_output(parseInt(myArray[1],10) + " m");var dir = "";if(typeof myArray[2] != "undefined"){dir=dir + myArray[2];}if(typeof myArray[3] != "undefined"){dir=dir + myArray[3];}if(dir != ""){add_output(" direction ");if(dir=="N") add_output("North");else if(dir=="NE") add_output("North East");else if(dir=="E") add_output("East");else if(dir=="SE") add_output("South East");else if(dir=="S") add_output("South");else if(dir=="SW") add_output("South West");else if(dir=="W") add_output("West");else if(dir=="NW") add_output("North West");}add_output("\n"); return;}// Check if token is Statute-Miles visibilityvar reVisUS = /(SM)$/;if(reVisUS.test(token)){add_output("Visibility: ");var myVisArray = token.split("S");add_output(myVisArray[0]);add_output(" Statute Miles\n");}// Check if token is QNH indication in mmHg or hPavar reQNHhPa = /Q\d{3,4}/;if(reQNHhPa.test(token)){// QNH token: Qpppp -- pppp is pressure hPaadd_output("QNH (Sea-level pressure): ");add_output(parseInt(token.substr(1,4),10) + " hPa"); add_output("\n"); return;}// Check if token is QNH indication in mmHg: Annnnvar reINHg = /A\d{4}/;if(reINHg.test(token)){add_output("QNH: ");add_output(token.substr(1,2) + "." + token.substr(3,4) + " inHg");add_output("\n"); return;}// Check if token is runway visual range (RVR) indicationvar reRVR = /^R(\d{2})(R|C|L)?\/(M|P)?(\d{4})(V\d{4})?(U|D|N)?$/;if(reRVR.test(token)){var myArray = reRVR.exec(token);add_output("Runway ");add_output(myArray[1]);if(typeof myArray[2] != "undefined"){if(myArray[2]=="L") add_output(" Left");else if(myArray[2]=="R") add_output(" Right");else if(myArray[2]=="C") add_output(" Central");}add_output(", touchdown zone visual range is ");if(typeof myArray[5] != "undefined"){// Variable rangeadd_output("variable from a minimum of ");if(myArray[3]=="P") add_output("more than ");else if(myArray[3]=="M") add_output("less than ");add_output(myArray[4]);add_output(" meters");add_output(" until a maximum of "+myArray[5].substr(1,myArray[5].length)+" meters"); }else{// Single valueif( (typeof myArray[3] != "undefined") &&(typeof myArray[4] != "undefined") ){if(myArray[3]=="P") add_output("more than ");else if(myArray[3]=="M") add_output("less than ");add_output(myArray[4]);add_output(" meters");}}if( (myArray.length > 5) && (typeof myArray[6] != "undefined") ){if(myArray[6]=="U") add_output(", and increasing");else if(myArray[6]=="D") add_output(", and decreasing");}add_output("\n");return;}// Check if token is CAVOKif(token == "CAVOK"){add_output("CAVOK conditions: Visibility 10 km or more,\n no cloud below 5.000 feet or below the MSA (whichever is greater), \n no cumulonimbus, and no significant weather fenomena in\n the aerodrome or its vicinity\n");return;}// Check if token is NOSIGif(token == "NOSIG"){add_output("No significant changes expected in the near future\n");return;}// Check if token is a present weather code - The regular expression is a bit// long, because several precipitation types can be joined in a token, and I// don't see a better way to get all the codes.var reWX =/^(\-|\+)?(VC)?(MI|BC|BL|SH|TS|FZ|PR)?(DZ|RA|SN|SG|IC|PL|GR|GS)?(DZ|RA|SN|SG|IC|PL|GR|GS)?(DZ|RA|SN|SG|IC|PL|GR|GS)?(DZ|RA|SN|SG|IC|PL|GR|GS)?(DZ|RA|SN |SG|IC|PL|GR|GS|BR|FG|FU|VA|DU|SA|HZ|PO|SQ|FC|SS|DS)$/;if(reWX.test(token)){add_output("Weather: ");var myArray = reWX.exec(token);for(var i=1;i<myArray.length; i++){if(myArray[i] == "-") add_output("Light ");if(myArray[i] == "+") add_output("Strong ");if(myArray[i] == "VC") add_output("In the vicinity, ");if(myArray[i] == "MI") add_output("Shallow ");if(myArray[i] == "BC") add_output("Patches of ");if(myArray[i] == "SH") add_output("Showers of ");if(myArray[i] == "TS") add_output("Thunderstorms ");if(myArray[i] == "FZ") add_output("Freezing (or super-cooled) ");if(myArray[i] == "PR") add_output("Partial ");if(myArray[i] == "DZ") add_output("Drizzle ");if(myArray[i] == "RA") add_output("Rain ");if(myArray[i] == "SN") add_output("Snow ");if(myArray[i] == "SG") add_output("Snow grains ");if(myArray[i] == "IC") add_output("Ice Crystals ");if(myArray[i] == "PL") add_output("Ice Pellets ");if(myArray[i] == "GR") add_output("Hail ");if(myArray[i] == "GS") add_output("Small hail (< 5 mm diameter) and/or snow pellets ");if(myArray[i] == "BR") add_output("Mist ");if(myArray[i] == "FG") add_output("Fog ");if(myArray[i] == "FU") add_output("Smoke ");if(myArray[i] == "VA") add_output("Volcanic Ash ");if(myArray[i] == "DU") add_output("Widespread dust ");if(myArray[i] == "SA") add_output("Sand ");if(myArray[i] == "HZ") add_output("Haze ");if(myArray[i] == "PO") add_output("Dust/Sand whirls ");if(myArray[i] == "SQ") add_output("Squall ");if(myArray[i] == "FC") add_output("Funnel clouds ");if(myArray[i] == "SS") add_output("Sandstorm ");if(myArray[i] == "DS") add_output("Duststorm ");}add_output("\n"); return;}// Check if token is recent weather observationvar reREWX =/^RE(\-|\+)?(VC)?(MI|BC|BL|SH|TS|FZ|PR)?(DZ|RA|SN|SG|IC|PL|GR|GS)?(DZ|RA|SN|SG|IC|PL|GR|GS)?(DZ|RA|SN|SG|IC|PL|GR|GS)?(DZ|RA|SN|SG|IC|PL|GR|GS)?(DZ|RA| SN|SG|IC|PL|GR|GS|BR|FG|FU|VA|DU|SA|HZ|PO|SQ|FC|SS|DS)?$/;if(reREWX.test(token)){add_output("Since the previous observation (but not at present), the following\nmeteorological phenomena were observed: ");var myArray = reREWX.exec(token);for(var i=1;i<myArray.length; i++){if(myArray[i] == "-") add_output("Light ");if(myArray[i] == "+") add_output("Strong ");if(myArray[i] == "VC") add_output("In the vicinity, ");if(myArray[i] == "MI") add_output("Shallow ");if(myArray[i] == "BC") add_output("Patches of ");if(myArray[i] == "SH") add_output("Showers of ");if(myArray[i] == "TS") add_output("Thunderstorms ");if(myArray[i] == "FZ") add_output("Freezing (or super-cooled) ");if(myArray[i] == "PR") add_output("Partial ");if(myArray[i] == "DZ") add_output("Drizzle ");if(myArray[i] == "RA") add_output("Rain ");if(myArray[i] == "SN") add_output("Snow ");if(myArray[i] == "SG") add_output("Snow grains ");if(myArray[i] == "IC") add_output("Ice Crystals ");if(myArray[i] == "PL") add_output("Ice Pellets ");if(myArray[i] == "GR") add_output("Hail ");if(myArray[i] == "GS") add_output("Small hail (< 5 mm diameter) and/or snow pellets "); if(myArray[i] == "BR") add_output("Mist ");if(myArray[i] == "FG") add_output("Fog ");if(myArray[i] == "FU") add_output("Smoke ");if(myArray[i] == "VA") add_output("Volcanic Ash ");if(myArray[i] == "DU") add_output("Widespread dust ");if(myArray[i] == "SA") add_output("Sand ");if(myArray[i] == "HZ") add_output("Haze ");if(myArray[i] == "PO") add_output("Dust/Sand whirls ");if(myArray[i] == "SQ") add_output("Squall ");if(myArray[i] == "FC") add_output("Funnel clouds ");if(myArray[i] == "SS") add_output("Sandstorm ");if(myArray[i] == "DS") add_output("Duststorm ");}add_output("\n"); return;}// Check if token is temperature / dewpoint pairvar reTempDew = /^(M?\d\d|\/\/)\/(M?\d\d)?$/;if(reTempDew.test(token)){var myArray = reTempDew.exec(token);if(myArray[1].charAt(0)=='M')add_output("Temperature: -" + myArray[1].substr(1,2) + " degrees Celsius\n");elseadd_output("Temperature: " + myArray[1].substr(0,2) + " degrees Celsius\n");if(myArray[2]!=""){if(myArray[2].charAt(0)=='M')add_output("Dewpoint: -" + myArray[2].substr(1,2) + " degrees Celsius\n");elseadd_output("Dewpoint: " + myArray[2].substr(0,2) + " degrees Celsius\n");}return;}// Check if token is "sky clear" indicationif(token=="SKC"){add_output("Clear sky\n");return;}// Check if token is "vertical visibility" indicationvar reVV = /^VV(\d{3}|\/{3})$/;if(reVV.test(token)){// VVddd -- ddd is vertical distance, or /// if unspecifiedvar myArray = reVV.exec(token);add_output("Sky is obscured -- vertical visibility");if(myArray[1] == "///")add_output(" cannot be assessed\n");elseadd_output(": " + (100*parseInt(myArray[1],10)) + " feet\n");return;}// Check if token is cloud indicationvar reCloud = /^(FEW|SCT|BKN|OVC)(\d{3})(CB|TCU)?$/;if(reCloud.test(token)){// Clouds: aaadddkk -- aaa indicates amount of sky covered, ddd distance over// aerodrome level, and kk the type of cloud.var myArray = reCloud.exec(token);add_output("Clouds: ");if(myArray[1] == "FEW") add_output("A few ");else if(myArray[1] == "SCT") add_output("Scattered ");else if(myArray[1] == "BKN") add_output("Broken sky ");else if(myArray[1] == "OVC") add_output("Overcast sky ");add_output(", at " + (100*parseInt(myArray[2],10)) + " feet above aerodrome level");if(myArray[3] == "CB") add_output(", cumulonimbus");else if(myArray[3] == "TCU") add_output(", towering cumulus");add_output("\n"); return;}// Check if token is part of a wind-shear indicationvar reRWY = /^RWY(\d{2})(L|C|R)?$/;if(token=="WS") { add_output("There is wind-shear in "); return; }else if(token=="ALL") { add_output("all "); return; }else if(token=="RWY") { add_output("runways\n"); return; }else if (reRWY.test(token)){var myArray = reRWY.exec(token);add_output("runway "+myArray[1]);if(myArray[2]=="L") add_output(" Left");else if(myArray[2]=="C") add_output(" Central");else if(myArray[2]=="R") add_output(" Right");add_output("\n");return;}// Check if token is no-significant-weather indicationif(token=="NSW"){add_output("No significant weather phenomena are observed at present\n");return;}// Check if token is no-significant-clouds indicationif(token=="NSC"){add_output("No significant clouds are observed below 5000 feet or below the minimum sector altitude (whichever is higher)\n"); return;}// Check if token is part of trend indicationif(token=="BECMG"){add_output("The following weather phenomena are expected to arise soon:\n");return;}if(token=="TEMPO"){add_output("The following weather phenomena are expected to arise temporarily:\n"); return;}var reFM = /^FM(\d{2})(\d{2})Z?$/;if(reFM.test(token)){var myArray = reFM.exec(token);add_output(" From "+myArray[1]+":"+myArray[2]+" UTC, ");return;}var reTL = /^TL(\d{2})(\d{2})Z?$/;if(reTL.test(token)){var myArray = reTL.exec(token);add_output("Until "+myArray[1]+":"+myArray[2]+" UTC, ");return;}var reAT = /^AT(\d{2})(\d{2})Z?$/;if(reAT.test(token)){var myArray = reAT.exec(token);add_output("At "+myArray[1]+":"+myArray[2]+" UTC, ");return;}// Check if item is runway state groupvar reRSG = /^(\d\d)(\d|C|\/)(\d|L|\/)(\d\d|RD|\/)(\d\d)$/;if(reRSG.test(token)){var myArray = reRSG.exec(token);add_output("Runway state:\n");// Runway designator (first 2 digits)var r = parseInt(myArray[1],10);if(r < 50) add_output(" Runway " + myArray[1] + " (or "+myArray[1]+" Left): "); else if(r < 88) add_output(" Runway " + (r-50) + " Right: ");else if(r == 88) add_output(" All runways: ");// Check if "CLRD" occurs in digits 3-6if(token.substr(2,4)=="CLRD") add_output("clear, ");else{if(myArray[2]=="0") add_output("clear and dry, ");else if(myArray[2]=="1") add_output("damp, ");else if(myArray[2]=="2") add_output("wet or water patches, ");else if(myArray[2]=="3") add_output("rime or frost covered, ");else if(myArray[2]=="4") add_output("dry snow, ");else if(myArray[2]=="5") add_output("wet snow, ");else if(myArray[2]=="6") add_output("slush, ");else if(myArray[2]=="7") add_output("ice, ");else if(myArray[2]=="8") add_output("compacted or rolled snow, ");else if(myArray[2]=="9") add_output("frozen ruts or ridges, ");else if(myArray[2]=="/") add_output("deposit not reported, ");// Extent of runway contamination (fourth digit)if(myArray[3]=="1") add_output("contamination 10% or less, ");else if(myArray[3]=="2") add_output("contamination 11% to 25%, ");else if(myArray[3]=="5") add_output("contamination 26% to 50%, ");else if(myArray[3]=="9") add_output("contamination 51% to 100%, ");else if(myArray[3]=="/") add_output("contamination not reported, ");// Depth of deposit (fifth and sixth digits)if(myArray[4]=="//") add_output("depth of deposit not reported, ");else{var d = parseInt(myArray[4],10);if(d == 0) add_output("deposit less than 1 mm deep, ");else if ((d > 0) && (d < 91)) add_output("deposit is "+d+" mm deep, ");else if (d == 92) add_output("deposit is 10 cm deep, ");else if (d == 93) add_output("deposit is 15 cm deep, ");else if (d == 94) add_output("deposit is 20 cm deep, ");else if (d == 95) add_output("deposit is 25 cm deep, ");else if (d == 96) add_output("deposit is 30 cm deep, ");else if (d == 97) add_output("deposit is 35 cm deep, ");else if (d == 98) add_output("deposit is 40 cm or more deep, ");else if (d == 99) add_output("runway(s) is/are non-operational due to snow, slush, ice, large drifts or runway clearance, but depth of deposit is not reported, ");}}// Friction coefficient or braking action (seventh and eighth digit)if(myArray[5]=="//") add_output("braking action not reported");else{var b = parseInt(myArray[5],10);if(b<91) add_output("friction coefficient 0."+myArray[5]);{if(b == 91) add_output("braking action is poor");else if(b == 92) add_output("braking action is medium/poor");else if(b == 93) add_output("braking action is medium");else if(b == 94) add_output("braking action is medium/good");else if(b == 95) add_output("braking action is good");else if(b == 99) add_output("braking action figures are unreliable"); }}add_output("\n"); return;}if(token=="SNOCLO"){add_output("Aerodrome is closed due to snow on runways\n");return;}// Check if item is sea status indicationreSea = /^W(M)?(\d\d)\/S(\d)/;if(reSea.test(token)){var myArray = reSea.exec(token);add_output("Sea surface temperature: ");if(myArray[1]=="M")add_output("-");add_output(parseInt(myArray[2],10) + " degrees Celsius\n");add_output("Sea waves have height: ");if(myArray[3]=="0") add_output("0 m (calm)\n");else if(myArray[3]=="1") add_output("0-0,1 m\n");else if(myArray[3]=="2") add_output("0,1-0,5 m\n");else if(myArray[3]=="3") add_output("0,5-1,25 m\n");else if(myArray[3]=="4") add_output("1,25-2,5 m\n");else if(myArray[3]=="5") add_output("2,5-4 m\n");else if(myArray[3]=="6") add_output("4-6 m\n");else if(myArray[3]=="7") add_output("6-9 m\n");else if(myArray[3]=="8") add_output("9-14 m\n");else if(myArray[3]=="9") add_output("more than 14 m (huge!)\n");return;}}function metar_decode(text)document.encoded.decreport.value = "";// Join newline-separated pieces...// var newlineJoined = text.replace(/\n/, " ");var newlineJoined = text.replace(/(\x0d\x0a)|\x0D|\x0A/, " ");// An '=' finishes the reportvar equalPosition = newlineJoined.indexOf("=");if (equalPosition > -1){alert("End of a METAR report is indicated by '='. We only decode until the first '='!!"); newlineJoined = newlineJoined.substr(0,equalPosition);}var arrayOfTokens;arrayOfTokens = newlineJoined.split(" ");var numToken = 0;// Check if initial token is non-METAR datevar reDate = /^\d\d\d\d\/\d\d\/\d\d/;if (reDate.test(arrayOfTokens[numToken]))numToken++;// Check if initial token is non-METAR timevar reTime = /^\d\d:\d\d/;if (reTime.test(arrayOfTokens[numToken]))numToken++;// Check if initial token indicates type of reportif(arrayOfTokens[numToken] == "METAR")numToken++;else if(arrayOfTokens[numToken] == "SPECI"){add_output("Report is a SPECIAL report\n");numToken++;}// Parse location tokenif (arrayOfTokens[numToken].length == 4){add_output("Location: " + arrayOfTokens[numToken] + "\n");numToken++;}elseadd_output("Invalid report: malformed location token '" + arrayOfTokens[numToken] + "' \n-- it should be 4 characters long!"); return;}// Parse date-time token -- we allow time specifications without final 'Z'if ( (( (arrayOfTokens[numToken].length == 7) &&(arrayOfTokens[numToken].charAt(6) == 'Z') ) ||( arrayOfTokens[numToken].length == 6 )) &&is_num_digit(arrayOfTokens[numToken].charAt(0)) &&is_num_digit(arrayOfTokens[numToken].charAt(1)) &&is_num_digit(arrayOfTokens[numToken].charAt(2)) &&is_num_digit(arrayOfTokens[numToken].charAt(3)) &&is_num_digit(arrayOfTokens[numToken].charAt(4)) &&is_num_digit(arrayOfTokens[numToken].charAt(5)) ){add_output("Day of month: " + arrayOfTokens[numToken].substr(0,2) + "\n");add_output("Time: " + arrayOfTokens[numToken].substr(2,2) +":" +arrayOfTokens[numToken].substr(4,2) + " UTC");if(arrayOfTokens[numToken].length == 6)add_output(" (Time specification is non-compliant!)");add_output("\n");numToken++;}else{add_output("Time token not found or with wrong format!");return;}// Check if "AUTO" or "COR" token comes next.if (arrayOfTokens[numToken] == "AUTO"){add_output("Report is fully automated, with no human intervention or oversight\n");numToken++;}else if (arrayOfTokens[numToken] == "COR"){add_output("Report is a correction over a METAR or SPECI report\n");。