机场气象报文解析

article/2025/9/12 15:18:58

机场气象报文解析

  • 背景
  • 示例
  • 思路
  • 代码
  • 结果预览
  • 致谢
  • 参考文献

从这篇文章,读者可以了解道机场气象报文的背景,知道其中数据大概长什么样子,如何利用python语言解析出机场气象报文里面的信息形成格式化数据。

背景

上个月的我国第六号台风“烟花”光临时,虹桥国际机场实行停飞管制,从本质上来说,民航业还是一个靠天吃饭的行业,气象条件对民航至关重要,国家也投入了大量人力和物力在机场气象数据的采集,存储,处理,发放和使用等全流程来保障民航领域健康发展,机场气象有其特殊性和历史渊源,目前我国空管单位均以气象报文的形式发送机场气象报文。
在这里插入图片描述

机场气象报文又称气象通告,是机场气象台对机场地面及上部空间天气进行定时观测的资料以报文的形式进行报告和发布的,一般有例行观测报(METAR),特殊观测报文(SPECI)和天气预报(TAF)三种,本文主要讲解例行观测报(METAR)。

依照 MH/T 4016.1-2004 标准中所作的规定,例行观测应每小时观测一次,也可每半小时观测一次, 观测时次份有以下三种

1,24小时观测:每日16:00(UTC时间)至次日16:00每半小时或一小时观测一次
2,13小时观测:每日00:00(UTC)至12:00每半小时或一小时观测一次
3,不定时观测:在有飞行活动期间,每半小时或一小时观测一次

气象报文资料里面一般包含下面几个关键数据字段

  • 报文种类标识MEART
  • 机场四字码,如ZSSS
  • 观测时间,如101500Z
  • 自动报告标识,AUTO
  • 地面风向和风速,如05004MPS指代风向050,风速04mps 此项含有特殊标识VRB,代表风向不定
  • 主导能见度
  • 跑道视程
  • 现在天气情况
  • 云或垂直能见度
  • 气温和露点温度
  • 修正海平面气压
  • 趋势
  • 补充情报

示例

下面是一个最常见的报文主体内容

METAR ZGGG 010800Z 05004MPS 280V100 7000 -TSRA FEW033CB 31/24 Q1013 TEMPO 2000 TSRA SCT026CB BKN030

解析出来各字段的含义:

  • 定时气象观测报文(METAR)

  • 广州白云机场(ZGGG)

  • 观测时间UTC时间1日8:00,北京时间1日16:00(010800Z)

  • 风向050度风速4m/s(05004MPS)

  • 风向范围280°~100°(280V100)

  • 能见度7000米(7000)

  • 小雷雨天气(-TSRA)

  • 少云,云底高度3300英尺云层类型积雨云(FEW033CB)

  • 温度31摄氏度(31/24)

  • 露点24摄氏度(31/24)

  • 修正海平面气压1013(Q1013)

  • 气象变化趋势短时(TEMPO)

  • 趋势天气为:

  • 短时能见度2000米(2000)

  • 短时雷雨天气(TSRA)

  • 短时有2600英尺较少积雨云(SCT026CB)

  • 3000英尺多云(BKN030).

思路

从上面示例看到报文主体大致包括两部分内容,一部分是跟气象采集站有关的基础信息,一部分是观测气象信息,针对采集站的信息比较固定可以直接撸下来,针对气象内容信息有时候有些字段会空缺,可以采取try except来避免误解析,可以利用全文索引和正则匹配把气象主体内容进行切割把解析出来的字段放到对应的字段下面即可,依循这个思路,下面给出了解析python代码。

代码

def get_weather(airport4, start_time, end_time): #根据机场四字码和时间段获取气象数据url = "http://www.baidu.com/flightService/getAirportMetarContent/"+airport4+"/"+start_time+"/"+end_timeprint(url)logging.info (url)response = requests.get(url=url, headers = header, timeout =30)response.encoding = "GBK"result = json.loads(response.text)[0]#print(result)status = result["resultcode"]if status=='0': #如果请求成功,有数据返回weather_content = result["resultdata"][-1] #筛选最后一个content = weather_content["content"] #气象主体#print(content)try:airport4 = re.findall (r' [A-Z]{4}', content)[0].replace (' ', '')  # 机场四字码except:airport4 = ''try:ob_time = re.findall (r'\d+Z', content)[0].replace ("Z", "")  # 观测时间except:ob_time = ''try:if 'MPS' in content:wind = re.findall (r'V{0,1}R{0,1}B{0,1}\d+[A-G]{0,1}\d+MPS', content)[0]  # 风wind_speed = re.findall (r'\d{2}MPS', wind)[0].replace ('MPS', '')  # 风速wind_towards = wind[0:3]  # 风向else:wind = re.findall (r'V{0,1}R{0,1}B{0,1}\d+[A-G]{0,1}\d+KT', content)[0]  # 风wind_speed = re.findall (r'\d{2}KT', wind)[0].replace ('KT', '')  # 风速wind_towards = wind[0:3]  # 风向except:wind = ''wind_speed = ''wind_towards = ''try:visib = re.findall (r'CAVOK| \d{4} ', content)[0].replace (' ', '')  # 能见度except:visib = ''try:rvr = ' '.join (s1 for s1 in re.findall (r'R\d{2}.?\/.+? ', content))  # 跑道能见度except:rvr = ''try:nowweather = re.findall(r'-?\+?[A-Z]{6}|-?\+?[A-Z]{2,4}', content)[0].replace(' ', '') #现在天气if nowweather == 'META':nowweather = ''else:nowweather = nowweatherexcept:nowweather = ''try:content1 = re.findall (r'METAR.*?Q\d{4}', content)[0]cloud = ' '.join (s1 for s1 in re.findall (r'VV\d{3}|[A-Z]{3}\d{3}[A-Z]{2,3}|NSC|NCD|SKC|[A-Z]{3}\d{3}', content1))  # 云层except:cloud = ''#气温try:temper = re.findall (r'M{0,1}\d./M{0,1}\d{2}.', content)[-1].split ("/")[0].replace (' ', '')if temper[0] == 'M':if temper[0:3] == 'M00':temper = '0'elif temper[0:2] == 'M0':temper = temper[0] + temper[-1]temper = temper.replace ('M','-')else:temper = temper.replace ('M', '-')elif temper[0] == '0':temper = temper[1]except:temper = ''#露点try:dew = re.findall (r'M{0,1}\d./M{0,1}\d{2}.', content)[-1].split ("/")[1].replace (' ', '')if dew[0] == 'M':if dew == 'M00':dew = '0'if dew[0:2] == 'M0':dew = dew[0] + dew[-1]dew = dew.replace ('M', '-')  # 露点else:dew = dew.replace ('M', '-')elif dew[0] == '0':dew = dew[1]except:dew = ''try:qnh = re.search (r'Q\d{4}', content).group ().replace ("Q", "")  # 修正海压except:qnh = ''try:#print (re.findall (r'RERA.*?=|BECMG.*?=|TEMPO.*?=|NOSIG=', content))if re.findall(r'RERA.*?=|BECMG.*?=|TEMPO.*?=|NOSIG=', content) != []: #剔除没有未来趋势的情况trend = re.findall(r'RERA.*?=|BECMG.*?=|TEMPO.*?=|NOSIG=', content)[0].replace('=', '') #未来趋势else:trend = ''except:trend = ''weather = [ob_time, wind_speed, wind_towards, visib, rvr, nowweather, cloud, temper, dew, qnh, trend, content]# print(weather)else: #如果请求成功,无数据返回print('error:请求报错,resultcode的值不为0')logging.info ('error:请求报错,resultcode的值不为0')weather = []return weather

结果预览

在这里插入图片描述

致谢

感谢汤晨杰先生将代码完善。
在这里插入图片描述

参考文献

1,剖析机场天气报告(METAR)电码的意义

2,民航气象报文讲解

3,机场气象报文解析

4,国际气象报文讲解


http://chatgpt.dhexx.cn/article/s9aosJCb.shtml

相关文章

Http协议报文格式

一、整体介绍 Http协议在传输层基于TCP协议,在Http1.1之前每次请求在TCP层都需进行一轮连接和释放(三次握手、四次握手),从Http1.1开始默认使用长连接。 Http报文分为两种,请求报文和响应报文,大致格式如下…

CAN报文

CAN报文 Bit Numbering是汽车网络数据库用以辅助描述信号的专用术语,具体含义是位的编号顺序。 lsb0 bit7 bit6 bit5 bit4 bit3 bit2 bit1 bit0 LSB 是least significant bit,最低有效位。 msb0 bit0 bit1 bit2 bit3 bit4 bit5 bit6 bit7 MSB是Most Si…

TCP报文头部

TCP包头详解 主要学习端口号、三次握手、四次挥手 TCP包头 TCP报文固定长度20字节可变长度 TCP包头如下图所示: 源端口、目标端口:计算机上的进程要和其他进程通信是要通过计算机端口的,而一个计算机端口某个时刻只能被一个进程占用&…

ICMP报文

紫色代表一级目录 粉红代表二级目录 蓝色代表三级目录 红色代表关键字 橙色代表说明 ICMP报文   为了更有效地转发 IP 数据报和提高交付成功的机会,在网际层使用了网际控制报文协议 ICMP (Internet Control Message Protocol)。   ICMP 是互联网的标准协议。  …

常见网络报文

TCP报文 1、端口号:用来标识同一台计算机的不同的应用进程。 1)源端口:源端口和IP地址的作用是标识报文的返回地址。 2)目的端口:端口指明接收方计算机上的应用程序接口。 2、序号和确认号:是TCP可靠传输的关键部分。序号是本报文…

报文、报文段、数据报、数据包、帧的概念区别

报文(message)—— 应用层 是网络中交换与传输的数据单元(站点一次性要发送的数据块)。报文包含了将要发送的完整的数据信息,其长短不一致。报文在传输过程中会不断的封装成分组、包、帧来传输,封装的方式…

报文、报文段、分组、包、数据报、帧、数据流的概念区别

1.报文(message) 我们将位于应用层的信息分组称为报文。报文是网络中交换与传输的数据单元,也是网络传输的单元。报文包含了将要发送的完整的数据信息,其长短不需一致。报文在传输过程中会不断地封装成分组、包、帧来传输,封装的方式就是添加…

关于SPSS16的安装及教程

放SPSS安装文件 链接:https://pan.baidu.com/s/14QHqvok2IItQvV_72VPtOg 提取码:ee0k 接下来按照如下步骤操作就可以 按照上面的操作就可以完成安装了,这个属于比较老的SPSS版本,但是比较稳定。

【SPSS统计分析】SPSS19.0简体中文版安装教程(附SPSS19.0简体中文版下载)

spss19.0中文版是一款专业数据统计软件,受到各种社会学科的研究生、研究员的欢迎。软件能够对信息的采集、处理、分析进行全面评估和预测。spss19.0中文版新增加了广义线性混合模型、自动线性模型、一个统计网页入口portal和直复营销direct marketing功能等。另外,IBM 针对SP…

最新版最简单SPSS 26安装详细教程

SPSS为IBM公司推出的一系列用于统计学分析运算、数据挖掘、预测分析和决策支持任务的软件产品及相关服务的总称,有Windows和Mac OS X等版本。下面介绍安装教程 下载地址: 链接:SPSS下载地址 (要是没有跳转到网盘请复制这个链接到…

spss20安装许可证代码_SPSS 22下载安装教程

软件下载 长按选择复制链接 [名称]:SPSS 22 [语言]:简体中文 [安装环境]:Windows [下载链接]: https://pan.baidu.com/s/1q4t2PtmyX2EcQy8E3CQnxg [提取码]: 6huj 链接失效、安装有问题请加微信:593003758拉你进软件资源小助手交流群 安装步骤 1.找到下载好的软件压缩包,…

spss statistics26 下载及安装教程

下载 解压后得到两个文件 点击下面那个,找到 “Windows”——“setup.exe”,双击打开 安装 1. 点击圈出的部分,开始安装 2. 一直点击下一步 / 我同意,直到如下界面 可以修改安装路径 3. 一直点击下一步,然后安装即可…

spss27软件安装包下载spss27安装教程

安装 步骤 1、将下载好的安装包 鼠标右击,选择 解压 2、解压得到一个安装文件夹,打开它 3、鼠标右击 SPSS_Statistics_Win64 ,选择 以管理员身份运行 4、下一步 5、选择我接受,下一步 6、点击更改,选择安装位置&#…

SPSS modeler for mac安装教程

一、下载 在百度搜一下,随便找个网站普通下载 我找的是这个 https://www.jb51.net/softs/679885.html 安装包较大,请耐心等待下载完成 二、解压 下载下来有一堆安装包,直接在最外层的文件夹选择提取。 解压时可能会让输入密码&#xff…

SPSS 25软件安装教程

​​​​​​​关注公众号,免费获取资料 简介: SPSS,统计产品与服务解决方案软件。最初软件全称为“社会科学统计软件包”(SolutionsStatistical Package for the Social Sciences),但是随着SPSS产品服务领…

SPSS-Modeler安装

1. 安装SPSS 64位软件包,解压安装安装步骤即可: 链接:https://pan.baidu.com/s/1t48M16ZUdpnfWemceOQc8g 提取码:ma0a 补充具体安装步骤 解压SPSS.Modeler.v18.x64.iso 得到: 打开使用说明: 根据步骤依次…

​​spss13.0 附安装教程

​​spss13.0全称又叫做Statistical Package for the Social Sciences 13,是一款简单实用的统计分析软件,采用最新的SPSS的超强统计的软体来帮助用户进行分析您的资料、使用户快速的解放您的双手,让操作等更加的灵活,轻松,因此收到各界社会学科的研究员的喜爱。除了使用体…

1、SPSS 25的安装

目录 一、简介 二、竞争优势 三、安装步骤 一、简介 SPSS 是一款用于Windows操作系统的数据和科学图形的数值分析软件,能够为用户提供多样的数据统计、处理、报告等功能,还能根据数据帮用户生成离散图、折线图等图形,以更加直观的方式向你…

spss20安装许可证代码_SPSS23安装教程

SPSS23(32位)百度网盘下载地址: https://pan.baidu.com/s/1y9KOdmUjePHT9dT225u__w SPSS23(64位)百度网盘下载地址: https://pan.baidu.com/s/12AhkbOFoqU73KdXwokisyQ 软件介绍 SPSS是一款非常优秀的统计分析工具,提供了大量的信息和文档,其中包括插件、工具、命令语法参考…

SPSS 下载-安装

一、SPSS下载 百度网盘资源SPSS v26.0【下述安装步骤匹配】 链接:https://pan.baidu.com/s/1p08QBJ4GlHMARpnUK4SDiw 提取码:ylpa 二、安装步骤 1. 解压后按顺序打开文件 【SPSS v26.0】-->【IBM SPSS Statistics v26.0】-->【Windows】-->【s…