Zainstalowałem GDAL za pomocą instalatora Osgeo. Jak mogę programowo przyciąć warstwę rastrową warstwą wektorową? Czy jest dostępny interfejs API GDAL, który może mi w tym pomóc? Używam Pythona.
26
Nie jestem pewien co do interfejsu gdal, jest void* GDALWarpOptions::hCutline
w Warp Options, do którego odwołuje się samouczek API Warp API , ale nie ma wyraźnych przykładów. Czy na pewno potrzebujesz programowej odpowiedzi? Narzędzia wiersza poleceń mogą to zrobić natychmiast po wyjęciu z pudełka:
ogrinfo
do określania zasięgu przycinającego pliku kształtugdal_translate
do przycinania do zakresu kształtugdalwarp
z -cutline
parametremKroki 2 i 3 są do optymalizacji, z którą można sobie poradzić gdalwarp -cutline ...
.
Zobacz Przycinanie rastrów za pomocą GDAL przy użyciu wielokątów z Linfinity dla rozwiązań opartych na systemie Linux, wszystkie opakowane w jeden skrypt. Inny przykładowy przykład można znaleźć w samouczku Michaela Coreya dotyczącym tworzenia cieni dla Mapnika .
Joel Lawhead z GeospatialPython ma kompletny przykład python w Clip rastrze, używając shapefile , dobrze napisanego samouczka. Konieczne będzie zainstalowanie biblioteki obrazów Python (PIL), która nie jest zawarta w Osgeo4W (dla której może być konieczne dodanie Pythona o4w do rejestru systemu Windows, aby program instalacyjny działał).
źródło
Wydaje się, że temat ten zawsze powraca. Sam nie wiedziałem, że GDAL> 1.8 jest tak zaawansowany, że już zapewnia ci uczciwą obsługę wiersza poleceń, aby wykonać to zadanie.
Komentarz Mike'a Toews jest całkiem przydatny, ale możesz po prostu zrobić na przykład:
Możesz zawinąć to polecenie w skrypt Pythona za pomocą doskonałego modułu podprocesu .
Jedną z rzeczy, która była dla mnie naprawdę problematyczna, było to, że musiałem dostarczyć minimalne rozwiązanie tego problemu, co oznacza, że jest tak proste, jak to możliwe i nie wymaga wielu zewnętrznych zależności. Korzystanie z Python Imaging Library jak w samouczku Joela Lawhead'a jest fajne, ale wpadłem na następujące rozwiązanie: używając tablic zamaskowanych Numpy.
Nie wiem, czy to jest lepsze, ale to wiedziałem wtedy (3 lata temu ...).
Pierwotnie utworzyłem prawidłowy obszar danych wewnątrz oryginalnego rastra (np. Zakres rastra wyjściowego, gdzie to samo), ale podobał mi się pomysł zmniejszenia rastra również (np. -Crop_to_cutline), więc zacząłem
world2Pixel
od Joela Lawhead. Oto moje własne rozwiązanie:pełny opis
class MaskRaster
i jego metod można znaleźć na githubie mojego projektu .Używając tego kodu nadal będziesz musiał używać GDAL. Jednak planuję używać w przyszłości czystego Pythona tam, gdzie mogę, ponieważ docelowi odbiorcy mojego oprogramowania mają trudności ze zbyt wieloma zależnościami (używam Debiana do tworzenia oprogramowania, a klienci używają Windows 7 ...).
źródło