首页 > 解决方案 > 如何使用 qt 类型压缩读取 BLOB?

问题描述

我有一个文件(具体来说大约有 100k 个文件),其中包含来自天气雷达的数据 - 一个文件是一个雷达图像。它是来自多个雷达的数据的马赛克,创建了整个国家的反射率地图。这些文件的扩展名为 .cmax,我需要将它们转换为更有用的东西(例如反射率数组)以供进一步使用。

我已询问数据提供者如何读取这些文件。他们回应:

我们系统中的标准产品格式 (.cmax) 是为我们提供软件的公司的内部格式。它由 xml 和二进制部分组成。它可以通过读取为字节流来读取。首先,将初始字节解析为 xml,然后将其余(BLOB)视为使用“qt”方法压缩的二进制数据。您需要使用支持此压缩模式的库来解压缩它们。一般来说,你需要做一些工作,但几乎可以用任何编程语言来完成。

主要问题是数据的二进制部分。我试图用 zlib 解压缩它(谷歌搜索它出来的 qt 压缩)并在 C++ 中读取为二进制数据。他们都没有工作。尝试在 Qt 中以二进制形式读取该数据对我来说似乎也不合理。

该文件以这些行开头:

<product version="5.44.5" datetime="2017-01-01T18:00:00" datatype="dBZ" type="cmax" name="CMAX" owner="">
   <data time="18:00:00" date="2017-01-01">

然后是雷达规格和图像细节(有源雷达、最小和最大反射率等)。XML 部分以:

</product>
<!-- END XML -->
<BLOB blobid="0" size="79617" compression="qt">(here are lots of binary data)</BLOB>

我正在寻找一种方法(工具?)来转换二进制数据。例如,它可能是提到的库。

标签: qtcompressionbinaryfiles

解决方案


看细节,这很可能是 Leonardo (Selex/Gematronic) Rainbow5 格式。zlib 是正确的解压库。但它有一些技巧。在 wradlib 库 ( https://github.com/wradlib ) 中实现了一个 python 阅读器。也许您可以适应该代码。免责声明:我是 wradlib 开发人员之一。


推荐阅读