私の.mbtiles SQLite dbの中には、照会されている特定のタイルに関する情報を保持するtile_data
という列があります。C#を使用したSQLite DBの単一ブロブの解凍
私のアプリケーションでは入力としてlong/latを使用してから、tile_row
とtile_column
相当の値に変換してから、以下のSQLクエリを介して内部のデータを含む単一のBLOBを取り出します。
問合せは、(完全に機能し、単にコードを表示する)である。結果は、すべてのデータを単一のタイルを引き戻すますSELECT *
を照会し、単一 BLOBファイルされた状態で
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())
{
// ...
}
。
ブロブの内側にあるtile_data
は、私がアクセスして作業する必要がある圧縮(gzip)ベクターファイルですが、アプリケーション内で解凍する方法がわかりません。私が読んだほとんどのgzipリンクはファイル圧縮に関するもので、.txt
(または類似のもの)に出力していましたが、私は外部ファイルを必要とせずにこのデータをメモリ内で使用しようとしています。
ブロブを解凍して外部ファイルではなくメモリ内のデータにアクセスするにはどうすればよいですか?
'MemoryStream'にデータを渡し、' CompressionMode.Decompress'を使って 'GZipStream'に渡し、' StreamReader'に渡すことができるはずです。 – juharr
'SqlDataReader.GetStream'を使うと、ファイル全体を' MemoryStream'に読み込むのではなく、チャンク内のデータを取り込むことができます。 – juharr