Сопоставить размер ячейки растра с другим растром

Я использовал опубликованный код здесь, чтобы сопоставить размер ячейки растров с другим растром. В частности, у меня есть полоса Sentinel-2 (формат jp2) с размером ячейки 20 м\пикселей, и я хотел бы разделить\ресамплинг\изменить ее размер до 10 м. Что я сделал до сих пор, и это отлично сработало, так это использование скрипта из ссылки, которую я добавил, где я ввел два растра: 20-метровый диапазон и еще один 10-метровый диапазон. Они оба имеют одинаковую пространственную протяженность, одинаковую crs. Странная проблема, с которой я сталкиваюсь сейчас, заключается в том, что этот скрипт все еще работает, но размер выходного растра составляет около 500 МБ, тогда как исходный размер составляет около 1000 КБ. Я не понимаю, почему это могло произойти. Любые идеи? Я использую Python 3 на машине с Win 10. Если у вас есть другой способ разделения размера ячейки с помощью gdal или rasterio или других библиотек Python, это также может помочь. Я просто хочу разделить каждый 20-метровый пиксель на 4 пикселя по 10 м с одинаковым значением, т. е. каждая новая 10-метровая ячейка будет иметь то же значение, что и 20-метровая ячейка. Я отправляю код, который я использую в любом случае:

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")

person user88484    schedule 02.03.2019    source источник


Ответы (2)


Странная проблема, потому что код выглядит хорошо. Я предполагаю, что оба исходных файла sentinel-2 также являются Float32, так что это может быть не проблема. Я понял одну вещь: когда вы создаете новый файл, вы указываете расширение «.jp2» с драйвером «Gtiff». Драйвер для jp2 - "JPEG2000". Это может быть ваша проблема? Надеюсь, поможет

person Jascha Muller    schedule 12.03.2019

Я считаю, что эта проблема связана с методом сжатия, который используется в процессе создания файла. Использование «compress»: «lzw» может помочь уменьшить размер файла. Когда я попробовал ваш код со сжатием lzw, я получил размер файла, аналогичный большему входному файлу (файл с высоким разрешением). Однако сам файл в высоком разрешении весил около 700 МБ.

person Hamid Jafarbiglu    schedule 29.09.2020