Сопоставить размер растровой ячейки с другим растром
Я использовал код, размещенный здесь, чтобы сопоставить размер ячейки растра с другим растром. В частности, у меня есть полоса Sentinel-2 (формат jp2) с размером ячейки 20м / пиксель, и я хотел бы разделить \ resample \ изменить ее размер до 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")
0 ответов
Странная проблема, потому что код выглядит хорошо. Я предполагаю, что оба исходных файла sentinel-2 также являются Float32, так что это может не быть проблемой. Одна вещь, которую я заметил, - когда вы создаете новый файл, вы указываете расширение ".jp2" с драйвером "Gtiff". Драйвер для jp2 - "JPEG2000". Это может быть вашей проблемой? Надеюсь, поможет
Я считаю, что эта проблема связана с методом сжатия, который используется в процессе создания файла. Использование "compress": "lzw" может помочь уменьшить размер файла. Когда я попробовал ваш код со сжатием lzw, я получил размер файла, подобный большему входному файлу (файл с высоким разрешением). Однако сам файл с высоким разрешением был около 700 мб.