跳转到主要内容

Python模块,用于解码/编码气象报告,例如SYNOPs,适用于与synop2bufr模块一起使用。

项目描述

README

这是一个Python模块,可以将气象报告(例如SYNOPs)解码为Python字典。它还可以从Python字典中编码气象报告。

当前支持

当前版本的模块支持以下内容(大多数情况下;请参阅以下已知问题)

  • SYNOP (FM-12)
  • SHIP (FM-13)
  • SYNOP MOBIL (FM-14)

示例用法

解码SYNOP

from pymetdecoder import synop as s

synop = "AAXX 01004 88889 12782 61506 10094 20047 30111 40197 53007 60001 81541 333 81656 86070"
output = s.SYNOP().decode(synop)
print(output)

这将产生以下输出(格式化输出)

{
  "station_type": {
    "value": "AAXX"
  },
  "obs_time": {
    "day": {
      "value": 1
    },
    "hour": {
      "value": 0
    }
  },
  "wind_indicator": {
    "value": 4,
    "unit": "KT",
    "estimated": false
  },
  "station_id": {
    "value": "88889"
  },
  "region": {
    "value": "III"
  },
  "precipitation_indicator": {
    "value": 1,
    "in_group_1": true,
    "in_group_3": false
  },
  "weather_indicator": {
    "value": 2,
    "automatic": false
  },
  "lowest_cloud_base": {
    "_table": "1600",
    "min": 1500,
    "max": 2000,
    "quantifier": null,
    "_code": 7,
    "unit": "m"
  },
  "visibility": {
    "_table": "4377",
    "value": 40000,
    "quantifier": null,
    "use90": false,
    "_code": 82,
    "unit": "m"
  },
  "cloud_cover": {
    "_table": "2700",
    "value": 6,
    "obscured": false,
    "unit": "okta",
    "_code": 6
  },
  "surface_wind": {
    "direction": {
      "_table": "0877",
      "value": 150,
      "varAllUnknown": false,
      "calm": false,
      "_code": 15,
      "unit": "deg"
    },
    "speed": {
      "value": 6,
      "unit": "KT"
    }
  },
  "air_temperature": {
    "value": 9.4,
    "unit": "Cel"
  },
  "dewpoint_temperature": {
    "value": 4.7,
    "unit": "Cel"
  },
  "station_pressure": {
    "value": 1011.1,
    "unit": "hPa"
  },
  "sea_level_pressure": {
    "value": 1019.7,
    "unit": "hPa"
  },
  "pressure_tendency": {
    "tendency": {
      "_table": "0200",
      "value": 3
    },
    "change": {
      "value": 0.7,
      "unit": "hPa"
    }
  },
  "precipitation_s1": {
    "amount": {
      "_table": "3590",
      "value": 0,
      "quantifier": null,
      "trace": false,
      "_code": 0,
      "unit": "mm"
    },
    "time_before_obs": {
      "_table": "4019",
      "value": 6,
      "unit": "h",
      "_code": 1
    }
  },
  "cloud_types": {
    "low_cloud_type": {
      "_table": "0513",
      "value": 5
    },
    "middle_cloud_type": {
      "_table": "0515",
      "value": 4
    },
    "high_cloud_type": {
      "_table": "0509",
      "value": 1
    },
    "low_cloud_amount": {
      "value": 1,
      "unit": "okta"
    }
  },
  "cloud_layer": [
    {
      "cloud_cover": {
        "_table": "2700",
        "value": 1,
        "obscured": false,
        "unit": "okta",
        "_code": 1
      },
      "cloud_genus": {
        "_table": "0500",
        "value": "Sc",
        "_code": 6
      },
      "cloud_height": {
        "_table": "1677",
        "value": 1800,
        "quantifier": null,
        "_code": 56,
        "unit": "m"
      }
    },
    {
      "cloud_cover": {
        "_table": "2700",
        "value": 6,
        "obscured": false,
        "unit": "okta",
        "_code": 6
      },
      "cloud_genus": {
        "_table": "0500",
        "value": "Ci",
        "_code": 0
      },
      "cloud_height": {
        "_table": "1677",
        "value": 6000,
        "quantifier": null,
        "_code": 70,
        "unit": "m"
      }
    }
  ]
}

重新编码此字典将得到原始的SYNOP

from pymetdecoder import synop as s

original = "AAXX 01004 88889 12782 61506 10094 20047 30111 40197 53007 60001 81541 333 81656 86070"
synop = s.SYNOP()
output = synop.decode(synop)
msg = synop.encode(output)

print(msg)
# Returns AAXX 01004 88889 12782 61506 10094 20047 30111 40197 53007 60001 81541 333 81656 86070

输出字典中常见的属性如下

  • value - 属性的绝对值
  • minmax - 如果代码值转换为范围,则min/max指定范围的限制
  • quantifier - 与min/max/value一起使用,以便在需要时添加不等式(例如,{ "value": 6000, "quantifier": "isGreater"} 表示值 >6000)。这通常是查找代码表中的值时的情况
  • unit - 该值所使用的单位。此处使用统一单位代码(https://ucum.org/ucum.html
  • _table - 这是用于查找值的代码表
  • _code - 在代码表中查找的代码值。在编码消息时,如果此属性存在,将使用该属性,而不是尝试从值中计算它

格式错误的报告

模块将尝试尽可能多地解码报告。非致命问题(例如,无效代码)将发出警告消息并继续。致命问题将发出 DecodeError 异常,该异常可以在 try...except 块中被捕获。

已知问题

此版本为 0.1.0 - 第一个发布的版本。因此,可能存在一些未捕获的虫子/问题或其他尚未发现的问题。以下是需要解决的已知问题列表

  • 并非所有国家都能自动检测到。随着更多区域特定处理功能的添加,将会有更多国家被添加到列表中
  • SYNOP 消息的第 4 和 5 部分尚未处理。这些部分中的任何代码分别存储在输出字典中的 section4section5 属性下
  • 第 3 部分的大部分组 9 代码已处理。未处理的任何代码都添加到输出字典中 _not_implemented 属性下的列表中
  • 编码的一些方面尚未完全测试

请随时在问题跟踪器中提出任何其他问题/错误

未来计划

未来,模块将支持以下内容

  • SYNOP 第 4 和 5 部分
  • 浮标(FM-18)
  • 温度(FM-35)
  • 气候(FM-71)
  • 气象报告(FM-15)

如果您想通过添加支持这些报告(或其他报告)的功能来为此模块做出贡献,请随时这样做!

许可证

(c)英国研究与创新(UKRI),2021,英国南极调查局。您可以在任何格式或媒介下免费使用和重新使用此软件及其相关文档文件,具体条款请参阅开放政府许可 v3.0。您可以在http://www.nationalarchives.gov.uk/doc/open-government-licence/ 获取开放政府许可的副本。

项目详情


下载文件

下载您平台上的文件。如果您不确定选择哪个,请了解有关 安装软件包 的更多信息。

源分布

pymetdecoder-wmo-0.1.14.tar.gz (40.2 KB 查看哈希

上传时间:

构建分布

pymetdecoder_wmo-0.1.14-py3-none-any.whl (40.6 KB 查看哈希

上传时间: Python 3

支持