Я пытаюсь написать некоторый код, который берет коллекцию файлов png + некоторую информацию метаданных (не из геотифа) и создает файл геотифа.Этот один геотиф-файл будет иметь количество полос / слоев, равное количеству файлов png, переданных в качестве входных данных.Когда я пытаюсь открыть файл в QGIS, он недоступен для просмотра.Сравнивая мой файл geotiff с другими установленными файлами geotiff, я заметил, что поле экстента было пустым, что кажется неправильным (глядя на информацию об изображении из qgis, показанного на изображении ниже).
Я использую библиотеку rasterio
python для создания объекта метаданных.Распечатав метаданные моего установленного растрового файла, я смог выяснить, какими были поля профиля и как их установить (строки 1-20)
Я уничтожил некоторый код из здесь для добавления файлов png в качестве слоев.Несмотря на то, что я не устанавливаю слои в слои из другого файла geotiff, способ форматирования png выглядит идентично тому, как должен быть отформатирован слой.(строки 22-26).
Я в замешательстве, потому что, когда я открываю полученный в результате файл TIFF с помощью универсального средства просмотра png в Windows 10, я могу видеть общую форму своего изображения так, как я ожидал, и так какЯ устанавливаю координаты верхнего левого угла с полем преобразования, а размер получаемого изображения с полями ширины и высоты, который имеет смысл для меня.Однако может показаться, что qgis нужно как-то указать информацию о экстенте.
Я изучил растровый файл github и документацию и изо всех сил пытаюсь найти какую-либо полезную информацию.Мой код приведен ниже;любая помощь будет принята с благодарностью!
1 png = cv2.imread(source_files[0], 0)
2
3 new_width = png.shape[0]
4 new_height = png.shape[1]
5 new_count = len(source_files)
6 new_crs = rio.crs.CRS.from_string("EPSG:32719")
7 new_transform = Affine(0.0, 0.0, -74.262057, 0, 0, -11.920552)
8
9 new_metadata = {'driver': 'GTiff',
10 'dtype': 'float32',
11 'nodata': None,
12 'width': new_width,
13 'height': new_height,
14 'count': new_count,
15 'crs': new_crs,
16 'transform': new_transform,
17 'tiled': False,
18 'interleave': 'band'}
19
20 metadata = rio.profiles.Profile(data=new_metadata)
21
22 with rio.open('../output/pngs/output.tif', 'w', **metadata) as dst :
23 for i, layer in enumerate(source_files, start=1):
24 png = cv2.imread(layer, 0)
25 png = np.array(png, np.float32) / 255.0
26 dst.write_band(i, png)
Редактировать: Проверяя поле границ установленного файла геотипов и моего созданного файла геотипов, я могу подтвердить, что это проблема;ограничивающая рамка в моем созданном файле не имеет ни ширины, ни высоты, как ни странно.Однако может показаться, что это поле недоступно для записи, поэтому мой вопрос остается в силе.