询问如何在 gdalwarp 中使用 -ts 或 -tr 标志进行重采样

问题描述 投票:0回答:3

我运行一个复杂的 cpp 应用程序,其中 gdal (3.5.3) 是从 eudem v 1.1 获取高程数据的一部分。 eudem 文件非常大,我想减小它们的文件大小,因为我不需要 25m 的精度。这是我使用的一个文件,想要缩小大小。

    gdalinfo E20N20.TIF
Driver: GTiff/GeoTIFF
Files: E20N20.TIF
Size is 40000, 40000
Coordinate System is:
PROJCS["ETRS89_ETRS_LAEA",
    GEOGCS["ETRS89",
        DATUM["European_Terrestrial_Reference_System_1989",
            SPHEROID["GRS 1980",6378137,298.2572221010042,
                AUTHORITY["EPSG","7019"]],
            AUTHORITY["EPSG","6258"]],
        PRIMEM["Greenwich",0],
        UNIT["degree",0.0174532925199433],
        AUTHORITY["EPSG","4258"]],
    PROJECTION["Lambert_Azimuthal_Equal_Area"],
    PARAMETER["latitude_of_center",52],
    PARAMETER["longitude_of_center",10],
    PARAMETER["false_easting",4321000],
    PARAMETER["false_northing",3210000],
    UNIT["metre",1,
        AUTHORITY["EPSG","9001"]]]
Origin = (2000000.000000000000000,3000000.000000000000000)
Pixel Size = (25.000000000000000,-25.000000000000000)
Metadata:
  AREA_OR_POINT=Area
  DataType=Elevation
Image Structure Metadata:
  COMPRESSION=LZW
  INTERLEAVE=BAND
Corner Coordinates:
Upper Left  ( 2000000.000, 3000000.000) ( 20d45'24.21"W, 45d41'42.74"N)
Lower Left  ( 2000000.000, 2000000.000) ( 16d36'13.25"W, 37d23'21.20"N)
Upper Right ( 3000000.000, 3000000.000) (  8d 7'39.52"W, 48d38'23.47"N)
Lower Right ( 3000000.000, 2000000.000) (  5d28'46.07"W, 39d52'33.70"N)
Center      ( 2500000.000, 2500000.000) ( 12d41'50.60"W, 43d 6' 4.82"N)
Band 1 Block=128x128 Type=Float32, ColorInterp=Gray
  NoData Value=-3.4028234663852886e+38
  Metadata:
    BandName=Band_1
    RepresentationType=ATHEMATIC

```

I tried the following cmd, but w/out success. Its probably about wrong ts or tr values; 

```
gdalwarp -r average -tr 1024 1024 -wm 4096 -multi -wo NUM_THREADS=ALL_CPUS -co TILED=YES \
-co NUM_THREADS=ALL_CPUS E20N20.TIF dz_E20N20.TIF
Creating output file that is 977P x 977L.
Processing E20N20.TIF [1/1] : 0Using internal nodata values (e.g. -3.40282e+38) for image E20N20.TIF.
Copying nodata values from source E20N20.TIF to destination dz_E20N20.TIF.
ERROR 1: Integer overflow : nSrcXSize=19989, nSrcYSize=19989
ERROR 1: Integer overflow : nSrcXSize=20012, nSrcYSize=19989

```
I'm lost, here.
gdal
3个回答
0
投票

你的GDAL来自哪里,这是一个32位错误,因为你的数据超过4GB?

此外,除非您要重新投影,否则我强烈建议您使用

gdal_translate
来代替,它在重新采样时具有更好的性能:

gdal_translate -r average -tr 1024 1024 -wo NUM_THREADS=ALL_CPUS -co TILED=YES \
  -co NUM_THREADS=ALL_CPUS E20N20.TIF dz_E20N20.TIF

如果您需要另一个 GDAL 版本,您可以使用官方 Docker 镜像。


0
投票

感谢您的宝贵时间。我在

-wm 4096
中发现了问题。我使用 Windows 的 Linux 子系统来进行重采样。我使用了 1024 2 的幂,因为我不太明白 -ts 或 -ts 是如何工作的。我终于用了:

gdalwarp -r average -ts 8000 8000 -multi -wo NUM_THREADS=ALL_CPUS -co TILED=YES \
  -co NUM_THREADS=ALL_CPUS E20N20.TIF dz_E20N20.TIF

这使我的文件大小减少了约 75%,像素暗度从 25x25m 移动到 125x125m。


0
投票

我已在此处发布了此问题的完整解决方案(带有示例)。您需要通过

-tr
标志传递像素大小,然后
-ts
大约是所需的图像尺寸

© www.soinside.com 2019 - 2024. All rights reserved.