Mam raster (właściwie USGS DEM) i muszę go podzielić na mniejsze części, jak pokazano na poniższym obrazku. Dokonano tego w ArcGIS 10.0 za pomocą narzędzia Split Raster. Chciałbym, aby to zrobić metoda FOSS. Patrzyłem na GDAL, myśląc, że na pewno by to zrobił (jakoś z gdal_translate), ale nic nie mogę znaleźć. Ostatecznie chciałbym móc wziąć raster i powiedzieć, jak duży (fragmenty 4KM po 4KM) chciałbym, aby się podzielił.
18
Odpowiedzi:
gdal_translate będzie działać przy użyciu opcji -srcwin lub -projwin.
Musisz wymyślić lokalizacje pikseli / linii lub współrzędne narożne, a następnie zapętlić wartości za pomocą gdal_translate. Coś takiego jak szybki i brudny python poniżej zadziała, jeśli użycie wartości pikseli i -srcwin jest dla ciebie odpowiedni, będzie trochę więcej pracy, aby uporządkować współrzędne.
źródło
Moje rozwiązanie, oparte na tym z @wwnick, odczytuje wymiary rastrowe z samego pliku i obejmuje cały obraz, zmniejszając w razie potrzeby kafelki krawędzi:
źródło
W pakiecie znajduje się skrypt Pythona specjalnie do przeskalowywania rastrów, gdal_retile :
na przykład:
gdal_retile.py -ps 512 512 -targetDir C:\example\dir some_dem.tif
źródło
Dla @Aaron, który zapytał:
Nieznaczne zrzeczenie się odpowiedzialności
Wykorzystuje to
gdalwarp
, chociaż nie jestem do końca przekonany, że będzie znaczny wzrost wydajności. Do tej pory byłem związany z operacjami wejścia / wyjścia - uruchomienie tego skryptu na dużym rastrze pocięcie go na wiele mniejszych części nie wydaje się bardzo obciążające procesor, więc zakładam, że wąskim gardłem jest zapisywanie na dysk. Jeśli planujesz jednoczesne ponowne wyświetlanie kafelków lub czegoś podobnego, to może się to zmienić. Istnieją wskazówki strojenia tutaj . Krótka gra nie przyniosła mi żadnej poprawy, a procesor nigdy nie wydawał się czynnikiem ograniczającym.Poza zrzeczeniem się odpowiedzialności, oto skrypt, który posłuży
gdalwarp
do podzielenia rastra na kilka mniejszych płytek. Może wystąpić pewna strata z powodu podziału podłogi, ale można temu zaradzić, wybierając odpowiednią liczbę płytek. Będzie ton+1
gdzien
jest numer podzielić przez uzyskaćtile_width
itile_height
zmienne.źródło
Możesz użyć r. Płytki GRASS GIS. r.tile generuje osobną mapę rastrową dla każdej płytki z numerowanymi nazwami map na podstawie prefiksu zdefiniowanego przez użytkownika. Można zdefiniować szerokość płytek (kolumny) i wysokość płytek (wiersze).
Używając trawiastego interfejsu API Python wystarczy kilka linii kodu Python, aby wywołać funkcjonalność r.tile z zewnątrz, tj. Napisać samodzielny skrypt. Użycie r.external i r.external.out również nie powoduje duplikacji danych podczas etapu przetwarzania GRASS GIS.
Pseudo kod:
źródło