l-four/notam

解析ICAO格式的NOTAM消息。

1.0.0 2023-02-15 10:47 UTC

This package is not auto-updated.

Last update: 2024-09-25 18:29:30 UTC


README

演示

https://notam-reader.kyahrindlisbacher.com/

安装

composer require l-four/notam

用法

首先我们将NOTAM字符串分词成一个标记数组。然后可以将标记解析成一个NOTAM对象。

这是基本用法

require  __DIR__ .  '\vendor\autoload.php';

$notam_string = 'J2187/22 NOTAMN' .
                'Q) YBBB/QMXLC/IV/M/A/000/999/2738S15243E005' . 
                'A) YAMB' .
                'B) 2207062200 C) 2207070400' .
                'E) TWY Z NOT AVBL DUE PARKED ACFT';

$tokens = \LFour\notam\NotamFunctions::tokenize_notam($notam_string);
print_r($tokens);

这将输出一个标记数组

Array
(
    [0] => LFour\notam\TOKEN Object
        (
            [type] => LFour\notam\NotamToken Enum
                (
                    [name] => IDENT_SERIES
                )

            [start] => 0
            [end] => 1
        )
        ... etc
)

每个标记代表NOTAM字符串的一部分。

使用类型枚举来识别标记类型。

可以通过使用 substr() 函数来检索标记的值。

  $token = $tokens[0];
  $value = substr($notam_string, $token->start, $token->end - $token->start);
  print_r($value);

输出: J

为了更便捷的使用,可以将标记解析成一个NOTAM对象。

$notam = \LFour\notam\NotamFunctions::object_from_tokens($tokens, $notam_string);
print_r($notam->ident->series);

输出: J

标记类型参考表

标记含义
WHITE_SPACE空白字符
SLASH斜杠
IDENT_SERIES标识系列
IDENT_NUMBER标识号码
IDENT_YEAR标识年份
IDENT_TYPE标识类型
IDENT_REF_YEAR标识参考年份
IDENT_REF_NUMBER标识参考号码
IDENT_REF_SERIES标识参考系列
UNKNOWN未知
Q限定行
Q_FIR限定飞行信息区
Q_NOTAM_CODE限定NOTAM代码
Q_TRAFFIC限定交通
Q_PURPOSE限定目的
Q_SCOPE限定范围
Q_LOWER限定低飞行高度
Q_UPPER限定高飞行高度
Q_COORDINATES限定坐标
Q_RADIUS限定坐标半径
AICAO行
A_LOCATION机场或FIR的ICAO位置指示器
A_LOCATION_2机场或FIR的ICAO位置指示器
A_EXTRAICAO额外
B有效期限行
B_DATE_TIME有效期限日期时间
C结束有效期限行
C_PERMANENT是否永久
C_ESTIMATE是否估计
C_DATE_TIME取消日期时间
D安排行
D_SCHEDULE安排
E正文行
E_TEXT正文文本
F低层行。
F_LEVEL低层
F_SFC低层是地面
G高层行
G_LEVEL高层
G_UNL高层是无限制的

完整示例

$notam_string = 'J2187/22 NOTAMN' .
                'Q) YBBB/QMXLC/IV/M/A/000/999/2738S15243E005' .
                'A) YAMB' .
                'B) 2207062200 C) 2207070400' .
                'E) TWY Z NOT AVBL DUE PARKED ACFT';

$tokens = \LFour\notam\NotamFunctions::tokenize_notam($notam_string);
print_r($tokens);

$token = $tokens[0];
$value = substr($notam_string, $token->start, $token->end - $token->start);
print_r($value);

$notam = \LFour\notam\NotamFunctions::object_from_tokens($tokens, $notam_string);
print_r($notam->ident->series);