SuperAPI AI 工具集

metar-development

编程与开发

查看项目

更新于 10-15 11:44

技能介绍

用途

metar-development 是一份面向 METAR 与 TAF 解码器开发者的指南,说明 metar-decoder 项目的扩展方式。当需要创建新的解码器(ChunkDecoder)、修改实体或为解码器增加功能时,可参考该指南。

架构与主要能力

metar-decoder 使用 ChunkDecoder 模式:METAR/TAF 报告中的每个片段由一个专门的正则解码器解析,这些解码器按管道串联。项目区分 METAR 解码器(src/Metar.Decoder/ChunkDecoder/)与 TAF 解码器(src/Taf.Decoder/ChunkDecoder/)。

新增 ChunkDecoder 的步骤(据资料):

  1. 在 src/Metar.Decoder/ChunkDecoder/ 或 src/Taf.Decoder/ChunkDecoder/ 下创建类。
  2. 实现 IChunkDecoder 接口。
  3. 将正则表达式模式定义为常量。
  4. 实现 Parse() 方法,返回解析结果与剩余字符串(remaining string)。
  5. 将解码器注册进解码管道(解码器数组)。
  6. 处理严格模式(抛出异常)与非严格模式(记录日志并跳过)。

Value Objects

数值带单位时使用 Value 类;实现转换涉及 Value.ActualValue 与 Value.Unit。资料列出的常见单位包括 knots、m/s、km/h、hPa、inHg、feet、meters。

实体

DecodedMetar / DecodedTaf 为根对象;为每个已解码片段提供带类型的属性;DecodingExceptions 保存非严格模式下的错误列表;RawMetar / RawTaf 保留原始字符串。

TAF 演变(Evolutions)

资料列出的 TAF 演变类型:BECMG(渐变)、TEMPO(临时条件)、PROB30/PROB40(概率)、FM(某时刻起)。

使用方式与示例

资料给出以下示例代码(保持原样):

// Decodificar METAR var decoder = new MetarDecoder(); var metar = decoder.Parse("METAR KJFK 121755Z 31008KT 10SM FEW250 M04/M19 A3036"); Console.WriteLine(metar.ICAO); // KJFK Console.WriteLine(metar.SurfaceWind); // 310° at 8 knots

// Decodificar TAF var tafDecoder = new TafDecoder(); var taf = tafDecoder.Parse("TAF KJFK 121720Z 1218/1324 31008KT P6SM FEW250");

限制

需保持与 .NET Standard 2.0 的兼容性;正则必须用真实 METAR/TAF 数据测试;严格模式必须抛出 MetarChunkDecoderException;非严格模式必须记录到 DecodingExceptions;强制符合 ICAO 规范。