我想要通过GeoServer(v.2.11)中的WMS流式传输大型GeoTIFF。图像的大小约为7GB,包含非常大的高分辨率RGB图像。我已经在JVM中允许了足够的堆空间来显示图像。但是,我想压缩图像,以便在浏览时更具响应性,因此它将分配更少的内存。我已经遵循了一些建议here。
我的策略是使用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?
答案 0 :(得分:0)
如果对我有帮助,请按以下步骤操作。
首先,我将栅格切成较小的图块,大小并不重要,对我来说通常是256x256、512x512或1024x124。
我使用了从gdal2tiles.py到我自己的本地C#应用程序的许多不同程序。
重要的是,这些瓷砖是正方形的。
一旦我在文件夹中放置了图块,就可以使用gdaltindex
这会为每个图块创建一个带有一个正方形的shapefile,并正确地进行地理定位(假设您的栅格是)以及每个图块的名称,我通常会告诉gdaltindex将绝对路径写入shapefile。
然后我将形状称为地图服务器中的图块层,我不能说geoserver是否会接受基于形状的图块索引,但是由于gdal可以使它们和其他基于WMS的服务器可用的开源(mapserver)可以使用它们,那么如果geoserver无法使用它们,我将感到非常惊讶。
答案 1 :(得分: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