Jak wyciąć „obraz kafelkowy” z zestawu danych rastrowych przy użyciu GDAL?

22

Pracuję nad aplikacją, która musi tworzyć kafelki (JPEG) z danego zestawu danych rastrowych. Moja początkowa skłonność polegała na użyciu gdal2tiles.py, ale wydaje się, że jego wydajność można poprawić.

To prowadzi mnie do postawienia następującego pytania: Jaki byłby najszybszy sposób wycięcia „obrazu kafelkowego” z zestawu danych rastrowych przy użyciu GDAL? A przez „kafelkowy obraz” mam na myśli zwykły JPEG lub PNG.

W moim prototypie korzystam z powiązań MapServer C # MapScript. Oznacza to, że tworzę obiekt mapy, przeglądam wszystkie granice kafelków, które muszę wyciąć, ustawiam zasięg obiektów mapy, a następnie zapisuję obraz wynikowy. Wydajność tego podejścia jest znacznie lepsza niż w przypadku gdal2tiles.py, ale zastanawiam się, czy używam GDAL bezpośrednio, jeśli nie mogę zrobić tego jeszcze szybciej. Czy ktoś może zasugerować podobny przepływ pracy metodami GDAL?

EDYCJA: Po kilku dzisiejszych badaniach znalazłem odpowiedź przede mną. Jeśli pobrałeś FWTools, foldery csharp \ apps zawierają szereg klas demonstrujących powiązania C # GDAL. W moim przypadku GDALRead.cs i GDALReadDirect.cs były tym, czego szukałem.

użytkownik890
źródło
2
@vadp, @markusn, @mapperz i wszyscy inni - proszę opisowo. Oprócz linku zdanie lub dwa wyjaśniają, dlaczego Twoim zdaniem warto przyjrzeć się temu narzędziu i co odróżnia je od innych. Chcemy, aby odpowiedź była przydatna zarówno w przyszłości, jak i od razu. Prędzej czy później atakuje link-rot i jeśli pozostaje nam tylko adres URL, trudno jest znaleźć miejsce, w którym projekt wcielił się w następnej kolejności.
matt wilkie
4
Witaj user890, czy możesz opublikować swoje ostateczne rozwiązanie pytania i oznaczyć je jako zamknięte? w tym przypadku wygląda na to, że użycie powiązań specyficznych dla języka zapewniło wymaganą wydajność.
scw
Nie mogę dodać komentarza do mojego posta :( Ale gdal_tiler.py obsługuje również przetwarzanie wieloprocesorowe, ale w bardzo brutalny sposób: po prostu przetwarza źródła „n” naraz. Mimo to daje pewien pozytywny efekt :)
Vadim

Odpowiedzi:

5

Ktoś spędził czas, aby gdal2tiles.py używał wielu procesorów: równoległego gdal

Użyłem tego i wydaje się, że działa. Z powodzeniem wykorzystuje wszystkie 4 rdzenie do 100% i skraca całkowity czas tworzenia płytek do 1/4 pierwotnego czasu.

hazzey
źródło
Możesz sprawdzić gdal2tiles_parallel.py gitlab.com/GitLabRGI/geopackage-python . Wolę comme
GeospatialInformationTech
1

W mojej firmie pisaliśmy niestandardowe skrypty Pythona, używając gdal_warp (zanim dowiedzieliśmy się, że istnieją gdal2tiles). Był szybszy niż g2t, szczególnie, gdy przepisaliśmy go na wiele rdzeni (używając puli wątków w Pythonie). Produkowano także płytki wyższej jakości (interpolacja lanczos na g2t wydaje się działać źle, w gdal_warp wynikowe płytki były zadziwiające).

To wymaga trochę wysiłku, aby napisać skrypty, musisz ręcznie obliczyć wynikowe ramki graniczne, ustawić niektóre opcje dla rzutów itp.

stachu
źródło
0

Inną opcją jest użycie TileCache (WMS-C). Chociaż nigdy nie korzystałem z gdal2tiles, nie spodziewałbym się, że TileCache przyniesie lepszą wydajność.

W każdym razie następujące strategie mogą przyspieszyć układanie płytek:

  • Metatiling, jeśli używasz TileCache (zastanawiam się, czy gdal2tiles ma podobną funkcję).
  • W przypadku, gdy dane rastrowe są dużym ortophoto, użyj formatu takiego jak ECW . Ponieważ ten format oferuje częściową dekompresję , przy użyciu tego formatu można uzyskać znaczny wzrost wydajności.
dariapra
źródło
0

Przydatnym rozwiązaniem może być skrypt gdal_tiler.py ze strony http://code.google.com/p/tilers-tools .

Zwykle wykazuje bardzo dobrą wydajność w porównaniu z gdal2tiles.py i powinien działać z dowolnym źródłem GDAL (zestawem danych), w szczególności nie wymaga konwersji źródłowego zestawu danych do RGB.

Vadim
źródło
-1

Gdal2tiles_parallel https://gitlab.com/GitLabRGI/erdc/geopackage-python Jeśli geopackage lub MBTILES to nie jest potrzebne żadne python, które jest wykonywane natywnie za pomocą gdal_translate.EXE. musisz także uruchomić gdaladdo, aby dodać więcej niż jeden poziom powiększenia. Używam również qtiles / qmetatiles dla qgis desktop. Nadal nic nie może konkurować z komercyjnym oprogramowaniem maptiler pro. Jeśli potrzebujesz folderu z kafelkami, po prostu przekonwertuj MBTILES na TMS LUB XYZ za pomocą python mbUtil

GeospatialInformationTech
źródło
Link już nie działa
AndrewHarvey