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.


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:




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.



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.

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.


-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


Link już nie działa
AndrewHarvey

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.