使用gdal压缩的GeoTIFF与GeoServer

4
我有一个非常大的GeoTIFF图像,大小约为7GB,由一个非常大的高分辨率RGB图像构成。我希望通过GeoServer(v.2.11)中的WMS流式传输此图像。我已经为JVM分配了足够的堆空间以显示图像。但是,我想压缩图像,以便在浏览时更具响应性,并且它将分配更少的内存。我已经按照这里的建议进行了一些尝试。
我的策略是使用JPEG压缩压缩GeoTIFF,并将其用作GeoServer中的数据存储。但是,似乎并不起作用。这是我使用的gdal命令来转换图像:
gdal_translate -of GTiff -co "BIGTIFF=YES" -co "COMPRESS=JPEG"  -co "TILED=YES" -co "BLOCKXSIZE=512" -co "BLOCKYSIZE=512" -a_srs "EPSG:3057" D:\raster\image.tif 
D:\raster\image_translate.tif

当使用openlayers预览图像时,我什么也没有看到,只有一个空白的底图。来自GeoServer的日志告诉我投影中出现了问题
2017-06-09 13:16:47,551 INFO [geoserver.wms] - 
Request: getServiceInfo
2017-06-09 13:16:47,561 WARN [lite.gridcoverage2d] - Could not reduce the grid geometry inside the valid area bounds: ReferencedEnvelope[-1.7976931348623157E308 : 1.7976931348623157E308, -85.0 : 85.0]
Grid geometry isGridGeometry2D[GeneralGridEnvelope[0..357, 0..357], PARAM_MT["Affine", 
  PARAMETER["num_row", 3], 
  PARAMETER["num_col", 3], 
  PARAMETER["elt_0_0", 0.7353351955307262], 
  PARAMETER["elt_0_2", 584219.1848475977], 
  PARAMETER["elt_1_1", -0.7353351955307262], 
  PARAMETER["elt_1_2", 383937.61122240225]]]
2017-06-09 13:16:47,566 ERROR [geoserver.ows] - 
org.geoserver.platform.ServiceException: Error rendering coverage on the fast path

然后我尝试使用GDAL的另一种压缩策略,即"DEFLATE"

gdal_translate -of GTiff -co COMPRESS=DEFLATE -co PREDICTOR=2 -co ZLEVEL=9 -co "BIGTIFF=YES" -a_srs "EPSG:3057"  D:\raster\image.tif D:\raster\image_translate2.tif

在OpenLayers中预览时这很有效。以下是GeoServer日志:

2017-06-09 13:28:27,137 INFO [geoserver.wms] - 
Request: getServiceInfo
2017-06-09 13:28:27,146 WARN [lite.gridcoverage2d] - Could not reduce the grid geometry inside the valid area bounds: ReferencedEnvelope[-1.7976931348623157E308 : 1.7976931348623157E308, -85.0 : 85.0]
Grid geometry isGridGeometry2D[GeneralGridEnvelope[0..357, 0..357], PARAM_MT["Affine", 
  PARAMETER["num_row", 3], 
  PARAMETER["num_col", 3], 
  PARAMETER["elt_0_0", 0.7353351955307262], 
  PARAMETER["elt_0_2", 584219.1848475977], 
  PARAMETER["elt_1_1", -0.7353351955307262], 
  PARAMETER["elt_1_2", 383937.61122240225]]]
2017-06-09 13:28:27,231 INFO [geoserver.wms] - 
Request: getMap

我也尝试使用JPEG压缩和无分块的方式执行gdal_translate,但在GeoServer日志中得到了错误,并且openlayers预览没有显示。因此我的问题是,最佳的策略是什么,可以压缩GeoTIFF文件以在WMS中使用?目前看来,DEFLATE是唯一有效的,但压缩效果并不理想。有人能成功上传JPEG压缩的GeoTIFF到Geoserver吗?

你解决了你的问题吗?我们目前也面临同样的问题。 - eftas
2个回答

0

如果有帮助的话,我做的方式如下。

首先,我将光栅图像切成较小的瓦片,大小并不重要,通常是256x256、512x512或1024x124。

我会使用一些不同的程序,从gdal2tiles.py到我自己编写的c#应用程序。

重要的是瓦片是正方形的。

一旦我把瓦片放在一个文件夹里,我就会使用gdaltindex。

这将创建一个形状文件,每个瓷砖都有一个正方形,正确地地进行地理参考(假设您的光栅图像已经被地理参考),以及每个瓷砖的名称,我通常会告诉gdaltindex将绝对路径写入形状文件中。

接下来,我将形状文件作为地图服务器中的瓦片图层引用,我无法确定geoserver是否接受基于形状的瓦片索引,但由于gdal可以制作它们,并且其他基于WMS的服务器可用源代码(mapserver)可以使用它们,那么如果geoserver不能使用它们,我会非常惊讶。


0

如果tiff文件大于2GB,这种方法是可行的。只要TIFF文件大小不超过2GB,GeoServer就可以高效地处理具有概述的大型TIFF。 使用图像金字塔可以使tiff文件在多个缩放级别上制作多个图像拼贴,从而加快加载速度。 请使用以下命令:

mkdir bmpyramid
gdal_retile.py -v -r bilinear -levels 4 -ps 2048 2048 -co "TILED=YES" -co "COMPRESS=JPEG" -targetDir bmpyramid bmreduced.tiff

你可以在这里查看 https://docs.geoserver.org/stable/en/user/tutorials/imagepyramid/imagepyramid.html

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接