Я не очень хорошо разбираюсь в python, но создание набора данных, вероятно, не удается, потому что вы не устанавливаете количество полос.
Попробуйте:
raster = driver.Create('/vsizip/test.zip/testraster.tif',10,10, 1, gdal.GDT_Float32)
Измените 1 на нужное количество полос.
Полный список аргументов Create вы можете найти здесь .
РЕДАКТИРОВАТЬ:
Найдена возможная причина проблемы (и возможный обходной путь) здесь .Как сообщается по этой ссылке , очевидно, что открытый режим Create несовместим с виртуальной файловой системой vsizip.
Edit 2
Это не проблема используемого вами драйвера(например, GeoTiff), но проблема самой виртуальной файловой системы.Вызов Create пытается открыть файл в режиме чтения и записи, поскольку GDAL использует файловую систему в качестве кэша по соображениям производительности, а не только для хранения.Но в этом случае виртуальная файловая система vsizip не позволяет одновременно выполнять чтение и запись из файла, поскольку она не поддерживает произвольный доступ.
vsizip vfs действительно обеспечивает чтение и запись на лету отдельно, потому что он сжимает / распаковывает данные для вас в фоновом режиме.Это означает, что вы не можете переходить назад и вперед (как в режиме произвольного доступа, запрошенном для режима чтения / записи), потому что то, что вы записываете на диск (сжатые данные), отличается от того, что вы в конечном итоге могли прочитать (несжатые данные).
Редактировать 3
Я обнаружил, что инструменты командной строки gdal (такие как gdal_translate или gdal_warp) устанавливают 'STREAMABLE_OUTPUT = TRUE' автоматически при работе с виртуальными файловыми системами.Формат файла streamable обеспечивает применение политики «Только запись», которая должна соответствовать файловым системам без произвольного доступа.Вы можете установить эту опцию в качестве дополнительного параметра для вызова Create.Опять же, мои ограниченные возможности Python мешают мне предоставить рабочий фрагмент.
Пожалуйста, учтите, что steamable также подразумевает некоторое ограничение на тип операций, которые вы можете выполнять с набором данных, так что это, вероятно, не решит вашу проблему, но это полезновсе равно знать ...