研究生期间做项目,数据存储是个很大的问题。最开始的数据格式采用二进制Bin格式,为了数据规范读取,输出,但是后来发现Bin格式极大浪费了空间。后来想用Int代替Float类型,总是不得已损耗一些精度。
不过在降雨数据存储上,可以将一位或者两位小数点的数据乘以10或者100,因为降雨数据日最大数值范围不会超过1000,可以用Int类型。但其他的数据就比较困难。
后来想出个办法,把Bin文件这些规范行类的数据转换成可压缩的GeoTiff文件,空间节省效率大大提升了。
由于是Linux环境,所以采用gdal_translate命令,先把规范行列的数据写成AAIGrid格式,也就是asc格式,假如初始文件时 Prec_2010010100.asc,浮点类型,想要得到压缩的存储文件Prec_2010010100.tif, 运行命令
gdal_translate -ot Float32 -of GTiff -co COMPRESS=LZW Prec_2010010100.asc Prec_2010010100.tif
其中 -ot Float32 为数据类型,-co COMPRESS=LZW 为数据压缩格式,加了这个30MB的数据可以变成3MB左右,值得使用。如果进一步转换成Int类型的存储方式,效果更加明显。
如果是Int类型,效果会更好,也可以直接把浮点型强行转换成Int存储,前提是小数点不重要。
gdal_translate -ot Int16 -of GTiff -co COMPRESS=LZW Prec_2010010100.asc Prec_2010010100.tif