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 | 限定坐标半径 |
| A | ICAO行 |
| A_LOCATION | 机场或FIR的ICAO位置指示器 |
| A_LOCATION_2 | 机场或FIR的ICAO位置指示器 |
| A_EXTRA | ICAO额外 |
| 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);