GeoTIFF, сделанные в GDAL, не имеют минимального / максимального диапазона при загрузке в Arc / QGIS

11

Я создаю несколько растров с плавающей точкой в ​​GDAL с драйвером GeoTIFF. Когда я загружаю результирующие изображения в QGIS или Arc, символы по умолчанию устанавливают min на -3.40282e38, а max на 3.40282e38, поэтому растр выглядит точно серым. Есть ли способ, которым я могу записать фактический диапазон в GeoTIFF напрямую, чтобы при его загрузке в ГИС-программу он автоматически хорошо масштабировал гистограмму? Я попытался создать гистограмму по умолчанию, как это:

rasterMin, rasterMax = raster.GetRasterBand(1).ComputeRasterMinMax()
raster.GetRasterBand(1).SetDefaultHistogram(rasterMin, rasterMax, 255)

Но я получаю сообщение об ошибке, похожее на проблему связывания:

  File "/usr/lib/python2.6/dist-packages/osgeo/gdal.py", line 846, in SetDefaultHistogram
    return _gdal.Band_SetDefaultHistogram(self, *args)
TypeError: not a sequence

Любые предложения о том, что я мог бы сделать, или если я сделал ошибку?

Богатый
источник

Ответы:

8

Если вы генерируете данные, вы можете отслеживать минимальное и максимальное значения на лету. Если у вас нет прямого контроля над исходными данными, скажем, если вы компонуете существующие данные, тогда использование ComputeRasterMinMax(0)в порядке.

В любом случае, после того, как вы получили свои минимальные и максимальные значения, вы должны вызвать SetStatistics()диапазон и убедиться, что вы установили свой набор данных, Noneкогда закончите, чтобы гарантировать, что все будет записано на диск.

Кроме того, что-то в глубине души говорит мне, что использование dataset.GetRasterBand(1).<some band function>не будет работать должным образом из-за способа, которым GDAL Python обрабатывает ссылки на группы. Я не могу вспомнить детали, но что-то было в списке рассылки GDALDev некоторое время назад. Поэтому лучше создать переменную группы явно:, band = dataset.GetRasterBand(1)затем вызвать band.SetStatistics(min, max, mean, stddev).

MerseyViking
источник
Спасибо, это помогло, и спасибо за контекст. Кстати, я смог без проблем вставить ссылку на группу без временной переменной.
Богатые
Обратите внимание, что band.ComputeStatistics(0)также хранит статистику. Это простая 1-я строка.
Майк Т
1

Я не знаю, как это сделать с помощью GDAL, но вы можете использовать python для вызова инструмента «Рассчитать статистику» в Arc.

Кир
источник
2
Привет Сайрус, добро пожаловать на GIS.se :) Хотя правильный твой ответ вряд ли привлечет голоса по двум причинам. Инструмент вычисления статистики arcpy помещает статистику во внешний файл .aux, и постер запрашивает «непосредственно в геотифе». Во-вторых, хотя в названии упоминается Arcgis, текст вопроса и его теги указывают на то, что постер действительно больше заинтересован в решении gdal / qgis. В любом случае, спасибо за помощь и, пожалуйста, продолжайте. Начать нужно немного, но я думаю, что со временем вы обнаружите, что усилия окупаются.
Мэтт Вилки