在我的.mbtiles SQLite数据库中,有一个名为tile_data
的列,其中包含与正在查询的特定磁贴相关的信息。
我的应用程序将用户long / lat作为输入,然后转换为tile_row
和tile_column
等效值,然后通过下面的SQL查询将内部数据拉出单个blob。 / p>
查询(功能齐全,只是为了显示代码)是:
string query =
String.Format("SELECT tile_data from tiles WHERE zoom_level = {0} AND tile_row = {1} AND tile_column = {2}", ZoomLevel, _merc.TileLat, _merc.TileLong);
SQLiteCommand command = new SQLiteCommand(query, DbConn);
SQLiteDataReader reader = command.ExecuteReader();
while (reader.Read())
{
// ...
}
结果是单个 blob文件,查询SELECT *
将使用所有数据撤回单个磁贴。
tile_data
内的blob是我需要访问和使用的压缩(gzip)矢量文件,但我无法弄清楚如何在我的应用程序中解压缩它。我读过的大多数gzip链接都是关于文件压缩并将其输出到.txt
(或类似),而我希望在内存中使用这些数据而不需要外部文件。
如何解压缩blob并访问内存中的数据,而不是外部文件?
答案 0 :(得分:1)
尝试这样的事情
SQLiteDataReader reader = command.ExecuteReader();
while (reader.Read())
{
using(var file = reader.GetStream(0))
using(var unzip = new GZipStream(file, CompressionMode.Decompress))
using(var fileReader = new StreamReader(unzip))
{
while(!fileReader.EndOfStream)
{
var line = fileReader.ReadLine();
}
}
}
根据您的文件确切内容,您可能需要替换其他类型的阅读器。