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.
Antworten:
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.
quelle
Hast du das probiert? http://www.klokan.cz/projects/gdal2tiles/
quelle
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.
quelle
MapCruncher
http://research.microsoft.com/en-us/um/redmond/projects/mapcruncher/
funktioniert gut und kann zum Schneiden von Bildern verwendet werden
quelle
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:
quelle
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.
quelle
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
quelle