Wie schneide ich mit GDAL ein gekacheltes Bild aus einem Raster-Dataset aus?

22

Ich arbeite an einer App, die Kacheln (JPEG) aus einem bestimmten Raster-Dataset erstellen muss. Meine anfängliche Neigung war die Verwendung von gdal2tiles.py, aber die Leistung scheint verbessert werden zu können.

Das führt mich zu der folgenden Frage: Was wäre der schnellste Weg, um ein gekacheltes Bild mit GDAL aus einem Raster-Dataset auszuschneiden? Und mit "gekacheltes Bild" meine ich nur ein einfaches JPEG oder PNG.

In meinem Prototyp verwende ich die MapServer C # MapScript-Bindungen, um die Arbeit zu erledigen. Das heißt, ich erstelle ein Kartenobjekt, durchlaufe alle zu schneidenden Kachelgrenzen, setze die Ausdehnung der Kartenobjekte und speichere dann das resultierende Bild. Die Leistung dieses Ansatzes ist deutlich besser als die von gdal2tiles.py, aber ich frage mich, ob ich GDAL direkt verwende, wenn ich es nicht noch schneller machen kann. Kann jemand einen ähnlichen Workflow mit GDAL-Methoden vorschlagen?

EDIT: Nach einigen Nachforschungen fand ich die Antwort direkt vor mir. Wenn Sie FWTools heruntergeladen haben, enthält der Ordner csharp \ apps eine Reihe von Klassen, um die C # GDAL-Bindungen zu demonstrieren. In meinem Fall waren die Dateien GDALRead.cs und GDALReadDirect.cs genau das, wonach ich gesucht habe.

user890
quelle
2
@vadp, @markusn, @mapperz & alle anderen - bitte beschreibend. Zusätzlich zum Link ein oder zwei Sätze, warum Sie denken, dass dieses Tool einen Blick wert ist und was sich von den anderen unterscheidet, werden hilfreich sein. Wir möchten, dass die Antwort auch in Zukunft von Nutzen ist. Früher oder später schlägt Link-Rot zu und wenn wir nur die URL haben, ist es schwer zu finden, wo sich das Projekt als nächstes inkarniert.
Matt Wilkie
4
Hallo user890, könntest du deine endgültige Lösung für die Frage posten und sie als geschlossen markieren? In diesem Fall hat die Verwendung der sprachspezifischen Bindungen die Leistung erbracht, die Sie benötigen.
scw
Ich kann meinem eigenen Beitrag keinen Kommentar hinzufügen :( Aber gdal_tiler.py unterstützt auch Multiprocessing, allerdings auf eine sehr brachiale Art und Weise: Es verarbeitet einfach 'n' Quellen auf einmal. Trotzdem wirkt es sich positiv aus :)
Vadim

Antworten:

5

Jemand hat sich die Zeit genommen, gdal2tiles.py dazu zu bringen, mehrere Prozessoren zu verwenden: Parallel gdal

Ich habe das benutzt und es scheint zu funktionieren. Es nutzt alle 4 Kerne zu 100% aus und verkürzt die Gesamtzeit für die Erstellung der Kacheln auf 1/4 der ursprünglichen Zeit.

dunstig
quelle
Sie können gdal2tiles_parallel.py unter gitlab.com/GitLabRGI/geopackage-python auschecken . Ich bevorzuge comme
GeospatialInformationTech
2

Hast du das probiert? http://www.klokan.cz/projects/gdal2tiles/

markusN
quelle
Vielen Dank für den Kommentar, dies ist im Grunde eine GUI für das Skript gdal2tiles.py, irgendwie langsam.
user890
1

In meiner Firma haben wir mit gdal_warp benutzerdefinierte Python-Skripte geschrieben (bevor wir wussten, dass gdal2tiles existiert). Es war schneller als g2t, vor allem, als wir es neu geschrieben haben, um es auf vielen Kernen auszuführen (mit Python-Threadpool). Außerdem wurden qualitativ hochwertigere Kacheln erzeugt (die Lanczos-Interpolation auf g2t scheint schlecht zu funktionieren, in gdal_warp waren die resultierenden Kacheln erstaunlich).

Das Schreiben der Skripte erfordert ein wenig Aufwand. Sie müssen die resultierenden Begrenzungsrahmen manuell berechnen, einige Optionen für Projektionen einrichten usw.

Stachu
quelle
0

Eine weitere Option ist die Verwendung von TileCache (WMS-C). Obwohl ich noch nie gdal2tiles verwendet habe, würde ich nicht erwarten, dass TileCache eine verbesserte Leistung bringt.

Auf jeden Fall können die folgenden Strategien das Kacheln beschleunigen:

  • Metatiling, wenn Sie TileCache verwenden (ich frage mich, ob gdal2tiles eine ähnliche Funktion hat).
  • Wenn es sich bei den Rasterdaten um ein großes Ortophoto handelt, verwenden Sie ein Format wie ECW . Da dieses Format eine teilweise Dekomprimierung bietet, können Sie mit diesem Format einen erheblichen Leistungsgewinn erzielen.
Dariapra
quelle
0

Das Skript gdal_tiler.py von http://code.google.com/p/tilers-tools kann eine nützliche Option sein.

Normalerweise zeigt es eine sehr gute Leistung im Vergleich zu gdal2tiles.py und sollte mit jeder GDAL-Quelle (Datensatz) funktionieren. Insbesondere ist keine Konvertierung eines Quelldatensatzes in RGB erforderlich.

Vadim
quelle
-1

Gdal2tiles_parallel https://gitlab.com/GitLabRGI/erdc/geopackage-python Wenn Geopackage oder MBTILES benötigt werden, ist kein Python erforderlich, was nativ mit gdal_translate.EXE gemacht wird. Sie müssen auch gdaladdo ausführen, um mehr als eine Zoomstufe hinzuzufügen. ich benutze auch qtiles / qmetatiles für qgis desktop. Mit der kommerziellen Software maptiler pro kann immer noch nichts mithalten. Wenn Sie einen Ordner mit Kacheln benötigen, konvertieren Sie einfach MBTILES nach TMS ODER XYZ mit mbUtil Python

GeospatialInformationTech
quelle
Der Link funktioniert nicht mehr
AndrewHarvey