上下文:我正在使用 .mbtiles 文件,这是一种地理映射文件格式,它是一个包含矢量切片的 sqlite 数据库文件。
这些矢量切片使用协议缓冲区进行打包,然后进行 gzip 压缩。
我正在使用C++,当前正在阅读zlib使用解压缩示例,但我不确定如何处理块和流事件结束。
SQLite 给了我一个 void* 指针和一个长度。
我引用该页面:
对于 zlib 流嵌入其他数据的应用程序,这 例程需要修改以返回未使用的数据,或者在 最少表明有多少输入数据未被使用,因此 应用程序会知道在 zlib 流之后从哪里获取。
protocol buffer 类方法采用 void* 或 std::string。我想我应该选择 void*。
我不确定这些事件是如何工作的,并且该示例似乎没有提供字节数组的情况。我应该如何更改代码以避免错误?
Martin Tile Server 上的 Rust 工作的一部分,我最近创建了一个 sqlite-compressions,它将 gzip
和
brotli
压缩、解压缩和测试功能添加到 sqlite 作为可加载扩展(或者您可以直接从 Rust 代码中使用它)。另外还有另一个扩展中的许多哈希函数。这将允许您使用 SQL 获取未压缩的数据,而无需在代码中处理它:
SELECT gzip_decode(tile_data) FROM tiles WHERE ...