GeoTIFF-y wykonane w GDAL nie mają zasięgu min./maks. Po załadowaniu do Arc / QGIS

11

Tworzę niektóre zmiennoprzecinkowe rastry w GDAL ze sterownikiem GeoTIFF. Kiedy ładuję powstałe obrazy do QGIS lub Arc, domyślna symbolika ustawia min na -3,40282e38 i max na 3,40282e38, więc raster wygląda dokładnie na szary. Czy istnieje sposób, w jaki mogę zapisać rzeczywisty zakres bezpośrednio w GeoTIFF, aby po załadowaniu do programu GIS automatycznie ładnie skalował histogram? Próbowałem utworzyć domyślny histogram w ten sposób:

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

Ale pojawia się błąd, który wygląda jak wiążący problem:

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

Wszelkie sugestie dotyczące tego, co mogę zrobić lub jeśli popełniłem błąd?

Bogaty
źródło

Odpowiedzi:

8

Jeśli generujesz dane, możesz śledzić min. I maks. W locie. Jeśli nie masz bezpośredniej kontroli nad danymi źródłowymi, powiedzmy, że kompilujesz istniejące dane, wtedy użycie ComputeRasterMinMax(0)jest w porządku.

Tak czy inaczej, po uzyskaniu wartości minimalnych i maksymalnych powinieneś zadzwonić SetStatistics()do zespołu i upewnić się, że ustawiłeś swój zestaw danych na Nonekoniec, aby upewnić się, że wszystko zostanie zapisane na dysk.

Coś w moich myślach mówi mi, że używanie dataset.GetRasterBand(1).<some band function>nie działa poprawnie z powodu sposobu, w jaki GDAL Python obsługuje odniesienia do pasm. Nie pamiętam szczegółów, ale jakiś czas temu było coś na liście mailingowej GDALDev. Dlatego najlepiej jest utworzyć zmienną pasmową jawnie:, band = dataset.GetRasterBand(1)a następnie wywołać band.SetStatistics(min, max, mean, stddev).

MerseyViking
źródło
Dzięki, to załatwiło sprawę i dzięki za kontekst. Nawiasem mówiąc, byłem w stanie zagnieździć odwołanie do pasma bez tymczasowej zmiennej bez żadnych problemów.
Bogaty
Pamiętaj, że band.ComputeStatistics(0)przechowuje również statystyki. To łatwa 1-linia.
Mike T
1

Nie wiem, jak to zrobić za pomocą GDAL, ale możesz użyć Pythona, aby wywołać narzędzie „oblicz statystyki” w Arc.

Cyrus
źródło
2
Cześć Cyrus, witamy na GIS.se :) Chociaż poprawna odpowiedź raczej nie przyciągnie głosów z dwóch powodów. Narzędzie do obliczania statystyk Arcpy umieszcza statystyki w zewnętrznym pliku .aux, a plakat prosi o „bezpośrednio do geotiff”. Po drugie, chociaż Arcgis jest wspomniany w tytule, treść pytania i jego tagi wskazują, że plakat jest naprawdę bardziej zainteresowany rozwiązaniem gdal / qgis. W każdym razie, dziękuję za wkład i proszę, tak dalej. Na początek trochę krzywa uczenia się, ale myślę, że z czasem przekonasz się, że wysiłek się zwróci.
matt wilkie