Piszę proste narzędzie do przycinania partii wielopasmowych plików rastrowych geotiff do tego samego (mniejszego) obszaru. Korzystając z gdalwarp, mogę z łatwością przyciąć plik za pomocą pliku kształtowego przycinającego jeden wielokąt:
gdalwarp -cutline clipper.shp -crop_to_cutline input.tif output.tif
Jednak rzeczywisty obszar, do którego chcę przyciąć, będzie zawsze początkowo definiowany przez inny plik rastrowy geotiff, a nie plik kształtu. Byłoby miło, gdybym mógł użyć zakresu tego rastra jako pliku przycinającego, ale nie jestem pewien, jak to zrobić. Nic dziwnego, że następujące nie działa (nie powoduje błędu, po prostu nic nie produkuje):
gdalwarp -cutline clipper.tif-crop_to_cutline input.tif output.tif
Moje pytanie brzmi: czy istnieje sposób na dostarczenie rastra gdalwarp -cutline
? Alternatywnie, czy istnieje inna funkcja gdal, która może przyciąć raster przy użyciu innego rastra? Jeśli żadne z nich nie jest możliwe, czy istnieje bardzo prosty sposób na utworzenie pliku kształtu z pojedynczym wielokątem zdefiniowanym przez zasięg rastra?
Ten kod zostanie zawinięty w bardziej rozbudowany skrypt Pythona, więc mogę używać albo narzędzi gdal z wiersza poleceń, albo dowolnego powiązania Pythona dla gdal.
Na marginesie, wiem, że z łatwością mogę po prostu wyciąć plik kształtu, który obejmuje zasięg mojego rastra w QGIS. Mogę to zrobić, jeśli nie znajdę prostego rozwiązania, ale ostatecznie skończę przy użyciu tego narzędzia na dziesiątkach, jeśli nie setkach obszarów w ramach dużej zautomatyzowanej analizy, więc wolałbym nie mieć żmudnego krok ręczny, nawet jeśli jest to bardzo łatwe.
gdaltindex clipper.shp clipper.tif
, a następniegdalwarp -cutline clipper.shp -crop_to_cutline input.tif output.tif
W przypadku nieregularnych wielokątów i zakładając, że plik rastrowy geotiff jest plikiem binarnym, możesz użyć GDAL_Calc :
To zapytanie wypełni 0, gdzie Mask.tif <= 0 i BigImage, gdzie maska> 0. Aby to zrobić, oba rastry muszą mieć ten sam rozmiar komórki, wiersze i kolumny. Aby wyodrębnić te same zakresy, użyj GDAL_Translate z
-projwin ulx uly lrx lry
opcją (pole ma współrzędne rzutowane), ale upewnij się, że pole projwin nie wystaje poza krawędzie żadnego rastra.Wartości zastępcze dla pola projwin pochodzącego z Maski.
źródło
Rozwiązanie bezpośrednio w Pythonie, bez tworzenia kształtu:
źródło