Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/three.js/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Three.js 如何使用gdal对Float32光栅文件进行有效压缩_Three.js_Raster_Tiff_Gdal - Fatal编程技术网

Three.js 如何使用gdal对Float32光栅文件进行有效压缩

Three.js 如何使用gdal对Float32光栅文件进行有效压缩,three.js,raster,tiff,gdal,Three.js,Raster,Tiff,Gdal,这个问题很模糊,但这就是我的意思。我有一个110GB的光栅文件,它是20个其他文件的组合,形成了整个欧洲的.tif文件。我想使用它的二进制类型来制作一个3D地形,比如在,但问题是它的大小。我尝试了一些使用gdal的技巧,例如: gdal_translate -co COMPRESS=JPEG -co TILED=YES input.tif output.tif 但显然JPEG压缩不适用于Float32文件。我更喜欢保存Float32格式的负值,但16位整数也可以(不包括所有字

这个问题很模糊,但这就是我的意思。我有一个110GB的光栅文件,它是20个其他文件的组合,形成了整个欧洲的.tif文件。我想使用它的二进制类型来制作一个3D地形,比如在,但问题是它的大小。我尝试了一些使用gdal的技巧,例如:

gdal_translate 
  -co COMPRESS=JPEG 
  -co TILED=YES 
  input.tif output.tif
但显然JPEG压缩不适用于Float32文件。我更喜欢保存Float32格式的负值,但16位整数也可以(不包括所有字节压缩)。到目前为止,我发现Float32文件的最佳压缩是使用PREDICTOR=3作为压缩表达式,但这远远不够


甚至有可能实现我用gdal描述的这种压缩吗?其他技术呢?

正如您所发现的,JPEG压缩不适用于浮动(事实上,它只适用于整数RGB,因为它会以无损方式删除视觉上不易察觉的内容)

PREDICTOR=3
具有
COMPRESS=ZSTD
和高
ZSTD_级别的

但是,如果您可以容忍特定的不精确性,并且您的GDAL版本至少为2.4,则可以使用
COMPRESS=LERC
LERC_ZSTD
,并将
MAX_Z_ERROR
设置为您可以容忍的最大不精确性(通过压缩产生的错误)

LERC的实现在GDAL中有点问题,可能会阻塞NaN,可能还会阻塞NODATAs或
inf
s。声称这是在2020年10月修复的,但今天它仍然影响着我。作为一种解决方法,您可以通过放大固定的乘数(表示1)使+-1在您的目标精度范围内,然后使用
COMPRESS=ZSTD
PREDICTOR=2
来转换为Int16。如果您愿意,甚至可以在整数光栅上再次使用带有整数最大Z错误的LERC

我刚才做的例子:

gdal_calc -A "D2014 NDVI.tif" --outfile=out.tif --type=Int16 --calc=numpy.round(1000.0*A) 
gdal_translate -co "COMPRESS=LERC_ZSTD" -co "ZSTD_LEVEL=15" -co "MAX_Z_ERROR=5" -co "PREDICTOR=2" -co "TILED=YES" out.tif "D2014 NDVI lerc.tif"

毫无疑问,你可以合并成一行。对我来说,这将600 Mb浮点32 TIF减少为120 Mb Int16 TIF,整数缩放NDVIs-1000-1000,最大误差5(即缩放前的0.005)。这与我将LERC_ZSTD应用于Float32所取得的成果是一致的,因为它没有阻塞。

正如您所发现的,JPEG压缩不适用于Floats(事实上,它只适用于整数RGB,因为它会丢失视觉上不易察觉的内容)

PREDICTOR=3
具有
COMPRESS=ZSTD
和高
ZSTD_级别的

但是,如果您可以容忍特定的不精确性,并且您的GDAL版本至少为2.4,则可以使用
COMPRESS=LERC
LERC_ZSTD
,并将
MAX_Z_ERROR
设置为您可以容忍的最大不精确性(通过压缩产生的错误)

LERC的实现在GDAL中有点问题,可能会阻塞NaN,可能还会阻塞NODATAs或
inf
s。声称这是在2020年10月修复的,但今天它仍然影响着我。作为一种解决方法,您可以通过放大固定的乘数(表示1)使+-1在您的目标精度范围内,然后使用
COMPRESS=ZSTD
PREDICTOR=2
来转换为Int16。如果您愿意,甚至可以在整数光栅上再次使用带有整数最大Z错误的LERC

我刚才做的例子:

gdal_calc -A "D2014 NDVI.tif" --outfile=out.tif --type=Int16 --calc=numpy.round(1000.0*A) 
gdal_translate -co "COMPRESS=LERC_ZSTD" -co "ZSTD_LEVEL=15" -co "MAX_Z_ERROR=5" -co "PREDICTOR=2" -co "TILED=YES" out.tif "D2014 NDVI lerc.tif"

毫无疑问,你可以合并成一行。对我来说,这将600 Mb浮点32 TIF减少为120 Mb Int16 TIF,整数缩放NDVIs-1000-1000,最大误差5(即缩放前的0.005)。这与我将LERC_ZSTD应用于Float32所取得的成果是一致的,因为它没有阻塞。

我假设您已经阅读了本文?这是GeoTiff压缩的一个非常好和广泛的指南。个人经历?Int16+LZW+Predictor=2对我有效是的,我有,但即使在所有这些之后,文件大小也超过10GB。从110GB到10?真是一个壮举,或者说是一个打字错误。无论如何,
JPEG
压缩仅适用于
Byte
数据类型。所以,如果您不能将数据扩展到
字节,您就不能使用它。不,我的意思是它超过10GB,如果我达到10GB,这将是一个奇迹。我假设您已经阅读了本文?这是GeoTiff压缩的一个非常好和广泛的指南。个人经历?Int16+LZW+Predictor=2对我有效是的,我有,但即使在所有这些之后,文件大小也超过10GB。从110GB到10?真是一个壮举,或者说是一个打字错误。无论如何,
JPEG
压缩仅适用于
Byte
数据类型。所以,如果你不能将数据扩展到
字节,你就不能使用它。不,我的意思是它超过10GB,如果我达到10GB,这将是一个奇迹。