0

我一直在使用此处发布的代码将栅格的像元大小与另一个栅格相匹配。更具体地说,我有 20m 单元格\像素大小的 sentinel-2 波段(jp2 格式)波段,我想将其拆分\重新采样\调整大小为 10m。到目前为止,我所做的非常有效的是使用我添加的链接中的脚本,我在其中输入了两个栅格:20m 波段和另一个 10m 波段。它们都具有相同的空间范围,相同的 crs。我现在遇到的奇怪问题是这个脚本仍然可以工作,但是输出光栅大小约为 500mb,而原始大小约为 1000kb。我不明白为什么会发生这种情况。有任何想法吗?我在 win 10 机器上使用 python 3。如果您有另一种使用gdal或拆分单元格大小的方法rasterio或其他 python 库,它也可以提供帮助。我只想将每 20m 像素拆分为 4 个 10m 像素,具有相同的值,即每个新的 10m 单元格将具有与 20m 单元格相同的值。我正在发布我正在使用的代码:

from osgeo import gdal, gdalconst

# Source
src_filename = r'C:\SN2 sr\T36SXB_20180406T081601_B05_20m.jp2'
src = gdal.Open(src_filename, gdalconst.GA_ReadOnly)
src_proj = src.GetProjection()
src_geotrans = src.GetGeoTransform()

# We want a section of source that matches this:
match_filename = r"C:\SN2 sr\T36SXB_20180406T081601_B04_10m.jp2"
match_ds = gdal.Open(match_filename, gdalconst.GA_ReadOnly)
match_proj = match_ds.GetProjection()
match_geotrans = match_ds.GetGeoTransform()
wide = match_ds.RasterXSize
high = match_ds.RasterYSize

# Output / destination
dst_filename = r'C:\SN2 sr\try5.jp2'
dst = gdal.GetDriverByName('Gtiff').Create(dst_filename, wide, high, 1, gdalconst.GDT_Float32)
dst.SetGeoTransform( match_geotrans )
dst.SetProjection( match_proj)

# Do the work
gdal.ReprojectImage(src, dst, src_proj, match_proj, gdalconst.GRA_NearestNeighbour)

del dst # Flush

print ("finish")
4

2 回答 2

0

我相信这个问题与文件生成过程中使用的压缩方法有关。使用 'compress':'lzw' 可能有助于减小文件大小。当我尝试使用 lzw 压缩您的代码时,我得到的文件大小类似于更大的输入文件(高分辨率文件)。然而,它自己的 gigh-res 文件大约是 700 mb。

于 2020-09-29T00:23:36.763 回答
0

奇怪的问题,因为代码看起来不错。我猜原来的 sentinel-2 文件也是 Float32,所以这可能不是问题。我所做的一件事是,当您创建新文件时,您指定了带有“Gtiff”驱动程序的“.jp2”扩展名。jp2 的驱动程序是“JPEG2000”。这可能是你的问题?希望能帮助到你

于 2019-03-12T13:45:49.967 回答