Wie kann man einen fehlgeschlagenen großen Mosaikprozess umgehen?


11

Ich muss ungefähr 550 GB TIF-Bilder zusammen mosaikieren, und die Software, die ich ausprobiert habe, schlägt immer wieder fehl. Das Gebiet wurde in Zonen aufgeteilt, so dass das kleinste ca. 200 Kacheln hat.

Ich habe die neuesten Versionen von ERDAS (Imagine and Mapper), ArcINFO und Global Mapper auf einem Intel Xeon E31245 mit 3,30 Gigahertz, DELL, 16 GB RAM und 64-Bit Win 7 Professional verwendet. Mullti-Core (4 insgesamt), Hyper-Threaded (8 insgesamt) Maschine. Mein C hat 700 GB frei und D hat 1,5 TB.

Ich möchte Grass verwenden (noch nie zuvor), aber i.image.mosaic scheint nur 4 Dateien zu verarbeiten ... einige von mir haben 600 Kacheln. Gibt es noch andere Optionen oder OpenSource-Software zum Ausprobieren?

Es tut uns leid, dass wir kein Mosaik-Dataset (oder ein Äquivalent in einer anderen Software) verwenden können, da wir Zonen mit definierten Bereichen ohne Daten als ecw erstellen müssen, damit sie in jeder GIS-Software geöffnet und mit einer niedrigeren Auflösung / älter kombiniert werden können Daten, wenn neue Daten nicht nahtlos existieren.

Geben Sie hier die Bildbeschreibung einEin Beispiel dafür, wie einige Mosaikdateien in verschiedenen Softwareprogrammen aussehen. Global Mapper / ERDAS sind in Ordnung, aber in Arcgis nicht korrekt.

--- ÄLTERE INFO ---

Geben Sie hier die Bildbeschreibung ein

Entschuldigung für die grobe Zeichnung. Wenn Sie also die farbigen Bereiche als 5 Zonen haben, werden die Bereiche ohne Daten in der größeren AOI minimiert.

In arcgis lautet der Code wie folgt (dieser wird als Modell und nicht in Python ausgeführt, da ich ihn nicht dazu bringen kann, die tifList-Eingabe zu übernehmen).

arcpy.MosaicToNewRaster_management(tifList+";" +mask,RootOutput,"Tile1.tif","PROJCS['GDA_1994_MGA_Zone_55',GEOGCS['GCS_GDA_1994',DATUM['D_GDA_1994',SPHEROID['GRS_1980',6378137.0,298.257222101]],PRIMEM['Greenwich',0.0],UNIT['Degree',0.0174532925199433]],PROJECTION['Transverse_Mercator'],PARAMETER['False_Easting',500000.0],PARAMETER['False_Northing',10000000.0],PARAMETER['Central_Meridian',147.0],PARAMETER['Scale_Factor',0.9996],PARAMETER['Latitude_Of_Origin',0.0],UNIT['Meter',1.0]]","16_BIT_UNSIGNED","0.5","3","MAXIMUM","#")

# Replace a layer/table view name with a path to a dataset (which can be a layer file) or create the layer/table view within the script
# The following inputs are layers or table views: "test2"

arcpy.CopyRaster_management(OutputFile,RootOutput+"Tile1b.tif","#","256","256","NONE","NONE","16_BIT_UNSIGNED")

wo tifList aus einer CSV-Datei eingelesen werden sollte, aber dies funktionierte nicht in Python, so dass ich die oben genannten in einem Modell stattdessen ausführen ...

Ich habe mehr als 1,5 TB freien Speicherplatz auf meinem Laufwerk, aber der Prozess stürzt mit einem 9999-Fehler ab.

Würden sogar 100 Fliesen verarbeiten? -ie sollten wir versuchen, die Zonen weiter aufzubrechen?


3
Das ist eine verrückte Datenmenge, die herumgeschubst werden muss. Sie versuchen nicht, es in einer riesigen TIF-Datei zusammenzuführen, oder? Ich würde vorschlagen, ein Mosaik-Dataset oder einen zwischengespeicherten Kartendienst zu erstellen .
blah238

yup es ist ... nein, es werden idealerweise 7 einzelne ecw's oder tif sein (wenn sie arcgis verwenden). Ich kann ein Bild der Größe / Zonen hinzufügen, bin mir aber nicht sicher, ob das hilfreich wäre.
GeorgeC

Aufgrund Ihrer Kommentare zu Ihrer Organisation, die MapInfo und andere Software anstelle von ArcGIS verwendet, entferne ich meine Antwort, da dies Ihre Anforderungen überhaupt nicht erfüllt. Ich würde jedoch vorschlagen, dass Sie einige Details zu Ihren Softwareanforderungen in Ihre Frage aufnehmen, um eine weitere Fahrt auf dem Esri-Pfad zu verhindern.
Holen Sie sich Spatial

@ GetSpatial - danke für die ausführliche Antwort. Es ist eine kurzfristige Lösung und wir werden sie wahrscheinlich verwenden, aber wie ich in meiner Frage erwähnt habe, sind wir wirklich softwareunabhängig und haben die Biggies (ESRI / ERDAS / MAPINFO und Global Mapper). Der Schlüssel für uns ist das Ergebnis - ~ 5 Mosaike mit definierten Bereichen ohne Daten, damit andere Bilder verwendet werden können. Die ECWs sollten in jeder Software die definierten No-Data-Daten haben. Wir haben festgestellt, dass einige Mosaike die No-Data-Eigenschaften in verschiedenen Softwareprogrammen nicht beibehalten. Ich werde ein Beispiel posten. Danke noch einmal. Ich möchte Sie bitten, Ihre Antwort hier zu behalten, ich werde darüber abstimmen.
GeorgeC

Antworten:


9

Ich muss den Vorschlägen von 2nd @ blah238 folgen, eine andere Methode des Datenzugriffs als die Erstellung eines einzelnen Mosaikbildes zu verwenden. Eine einfache Vermutung würde sagen, dass es keinen Desktop gibt, der die Datenmenge verarbeiten könnte, die Sie verarbeiten müssten, um alle diese Kacheln zu mosaikieren.
Um es aufzuschlüsseln, gibt es wahrscheinlich zwei Stellen, an denen Ihnen der Platz ausgeht.

  1. Der erste befindet sich in Ihrem RAM-Puffer. Um Daten zu mosaikieren, führen Sie alles in einer einzigen Datei zusammen, was im Idealfall bedeutet, dass die gesamte Datei im Speicher gespeichert wird. Sie haben nicht 550 GB RAM, was bedeutet, dass aus dem virtuellen Speicher gelesen / geschrieben wird. Das ist genug, um den Prozess genau dort zum Absturz zu bringen.
  2. Das andere Problem ist wahrscheinlich der Festplattenspeicher. Viele der Rasteroperationen erstellen temporäre Dateien in Ihrem "Arbeitsbereich" -Verzeichnis, die ziemlich groß sind. Es können 2 oder 3 oder mehr davon vorhanden sein, bevor der endgültige Datensatz überhaupt geschrieben wird. Daher ist es denkbar, den gesamten Speicherplatz während der Verarbeitung zu belegen.

Nun zu anderen Lösungen. Wie in den obigen Kommentaren erwähnt, besteht die Möglichkeit, einen Mosaik-Datensatz zu erstellen . Mit diesem Datensatz können Sie nicht nur alle einzelnen Kacheln als ein einziges nahtloses Bild behandeln, sondern auch Metadaten zu den einzelnen darin enthaltenen Kacheln verwalten. Außerdem können Sie Rasteroperationen wie Hillshade ausführen .

Die andere Option, die ich aufgrund Ihres Kommentars zum Trennen der Zonen empfehlen würde, wäre das Erstellen eines Rasterkatalogs . Ein Rasterkatalog ist im Wesentlichen eine Gruppenebene. Sie können mehrere Raster-Datasets hinzufügen. Sie können in einer Geodatabase verwaltet und die Raster importiert oder einfach ein nicht verwaltetes Dataset erstellt werden, in dem der Raster-Katalog Pfade zu den ursprünglichen Raster-Datasets verwaltet. Wenn Sie diese Ebene in ArcMap laden, können Sie die Anzeigeeigenschaften so einstellen, dass nur eine bestimmte Anzahl von Rasterkacheln gleichzeitig geladen wird, oder die Anzeigeskala und -auflösung festlegen.
Ich verwende derzeit einen Raster-Katalog, um Luftbilder mit mehr als 100 GB zu kacheln. Die Leistung ist sehr gut. Wenn Sie nach einer anderen Art der Datenspeicherung suchen, um eine große Anzahl von Kacheln zu verwalten, würde ich sie wirklich empfehlen.

Hier ist Code, mit dem Sie einen Rasterkatalog erstellen und anschließend einen Arbeitsbereich mit Kacheln importieren können:

import arcpy
import os

newdir = r"c:\data"
dbname = "Aerialphotos.gdb"
gdbdir = os.path.join(newdir, dbname)
rcat = "AerialCatalog"

arcpy.CreateRasterCatalog_management(gdbdir, rcat,
                                     "NAD 1983 StatePlane California VI FIPS 0406 (US Feet).prj", 
                                     "NAD 1983 StatePlane California VI FIPS 0406 (US Feet).prj",
                                     "MAX_FILE_SIZE_4GB", "1000", "3000", "9000",
                                     "UNMANAGED", "")

#Load all raster datasets in workspace to Raster Catalog
rcatdir = os.path.join(gdbdir, rcat)
rastertiledir = os.path.join(newdir, "tiles")

arcpy.WorkspaceToRasterCatalog_management(rastertiledir, rcatdir,
                                          "INCLUDE_SUBDIRECTORIES",
                                          "PROJECT_ONFLY")

Hoffe das hilft!

------------- Bearbeiten

Hier ist eine Grafik der Kacheln, die von meinem Raster-Katalog verarbeitet werden. Beachten Sie, dass Sie wählen können, ob Drahtmodelle oder die Rasterdaten angezeigt werden sollen. Der Rasterkatalog verfügt über eine Attributtabelle, zu der Sie Felder hinzufügen können, beispielsweise wenn Sie Zonenbezeichnungen wie in Ihrer Grafik hinzufügen möchten. Dann können Sie festlegen, dass nur diese Raster in einer bestimmten Zone angezeigt werden.
Beim Drucken in einer Grafik aus der Layoutansicht wird die volle Auflösung der Raster verwendet, sodass beim Drucken keine Qualitätsverluste auftreten.

Geben Sie hier die Bildbeschreibung ein

Hier ist dieselbe Grafik, die jedoch einige der Rasterdaten sowie einige Drahtmodelle zeigt.

Geben Sie hier die Bildbeschreibung ein


Vielen Dank für Ihre Zeit. Es ist eine gute kurzfristige Lösung, aber da die Organisation Mapinfo und andere Software verwendet, müssen wir wirklich in der Lage sein, Ecws zu erstellen, wobei der Gemeindebereich in etwa 5 Zonen unterteilt ist. Mapinfo verfügt über nahtlose Ebenen (ähnlich wie Raster Catalog). Es ist jedoch wichtig, dass Bereiche ohne Daten definiert werden, damit wir die neuen Bilder mit älteren Bildern unterlegen können, die eine größere Reichweite haben, und die Anzahl der zu öffnenden Dateien reduzieren.
GeorgeC

1
In Zukunft werden Sie wahrscheinlich eine relevantere Antwort erhalten, wenn Sie diese Art von Informationen in Ihrer ersten Frage angeben.
Holen Sie sich Spatial

1
Haben Sie untersucht, welche Webkartendienste MapInfo nutzen kann? Ich vermute, dass Sie zwischengespeicherte Versionen all dieser Daten auf einem Server ablegen möchten, damit sie von Ihrer Organisation verwendet werden können, nicht die Rohdaten. Ich denke, die Sache ohne Daten ist ein Streitpunkt bei Kartendiensten, da Sie einfach keine Kacheln erstellen würden, bei denen keine Daten vorhanden sind und alles, was darunter liegt, durchscheinen würde.
blah238

7

Ich weiß, dass ich zu spät zur Party komme. Aber hier ist mein Vorschlag.

1) Bildgröße
Wenn Ihre 550-GB-Originale nicht komprimiert sind, sollten Sie sie in JPEG-komprimierte TIFF-Dateien konvertieren. Bewahren Sie sie einzeln auf (nicht zusammengeführt). Sie können mit arcgis, gdal, was auch immer Sie möchten komprimieren. Durch die Komprimierung erhalten Sie ungefähr 23 GB. Erstellen Sie noch keine Pyramiden / Übersichten. Zum Komprimieren können Sie jedes beliebige gis-Programm verwenden, aber ich verwende gerne gdal, daher lautet der Befehl im Grunde wie folgt:

gdalwarp -multi -wm 512 --config  GDAL_CACHEMAX 512 -co compress=jpeg -co tiled=yes -co jpeg_quality=70 -co PHOTOMETRIC=YCBCR -co INTERLEAVE=PIXEL uncompressed.tif compressed.tif

Sie können ganz einfach eine Fledermausdatei erstellen, die alle Ihre unkomprimierten Tiffs durchläuft. Ich verwende gdalwarp gerne zum Komprimieren meiner Bilder anstelle des üblichen gdal_translate, da es schneller ist (mit Multi-Option für Multi-Core und -wm für viel Speicher).

2) Behandlung als einzelnes Bild
Sie können ein "virtuelles" Mosaik im Format gdal vrt erstellen. Dies ist kompatibel mit Arcgis, QGIS, Mapserver usw. Nicht sicher über Global Mapper und Mapinfo. Das .vrt-Format ist nur eine einzelne XML-Datei, in der Ihre Bilder aufgelistet sind. Das ist ein einziger Befehl zum Erstellen:

gdalbuildvrt nameofmosaic.vrt compressed_tif_folder\*.tif

Diese Datei ist einige KB groß.

3) Beschleunigung der Visualisierung
Sie müssen Pyramiden / Übersichten erstellen. Verwenden Sie dazu einfach Ihre bevorzugte Software. Mit gdal tools können Sie:

gdaladdo -ro -r average --config COMPRESS_OVERVIEW JPEG --config JPEG_QUALITY_OVERVIEW 70 nameofmosaic.vrt 2 4 8 16 32 64 128

Dies wird lange dauern. Warten Sie 2 bis 3 Tage ohne Unterbrechung.

4) Verwenden des Mosaiks
Laden Sie das virtuelle Mosaik in Ihr GIS-Programm. Es wird schnell gehen, weil es die Übersichten liest, die sich nur in einer Datei befinden, wie ein ecw. Wenn Sie auf die tatsächliche Auflösung Ihrer Bilder zoomen, werden nur die wenigen sichtbaren Bilder aus den komprimierten Bildern gelesen, und das geht auch sehr schnell.

5)
Behandeln von Bereichen ohne Daten, die schwarz angezeigt werden Sie haben 3 Lösungen dafür: i) Verwenden Sie ein Dateiformat, das Knoten verarbeitet, was kompliziert sein wird. oder ii) ein Alpha-Band verwenden oder iii) eine Maskendatei. Sie können in Schritt 2 automatisch ein Alpha-Band erstellen, indem Sie GDAL mitteilen, dass sich Knotenbereiche im Alpha-Band befinden sollen. Fügen Sie einfach die Option -addalpha hinzu:

gdalbuildvrt -addalpha nameofmosaic.vrt compressed_tif_folder\*.tif

Das Problem mit Alpha-Bändern ist, dass sie schlecht komprimiert werden. Ihre Übersichten werden also größer. Wenn das für dich in Ordnung ist, bist du fertig.

Wenn Sie eine Maskendatei erstellen möchten, ist dies etwas komplizierter. Und ich finde, das passt nicht in die vorliegende Frage.

Hoffe das hilft. Sie können Informationen zu GDAL-Tools finden, indem Sie googeln. Viele interessante Sachen.


1
Netter Post. Bitte beachten Sie, dass gdalwarp beim eigentlichen Warping (z. B. Neuprojektieren, Resampling usw.) seit langem ein Problem mit der Erstellung von Ausgaben hat, die viel größer sind als bei Verwendung der Komprimierung erforderlich. In diesen Fällen ist es besser, die Komprimierung in der gdalwarp-Phase zu überspringen und anschließend eine zu verwenden gdal_translate -co compress=xxx. Dies ist kein Problem, wenn Sie nur als Übersetzer verwendet werden (wie hier vorgeschlagen).
Matt Wilkie

1
Vielen Dank. Ich denke, dieses Problem ist gelöst, da ich in letzter Zeit gleichzeitig projiziert und komprimiert habe und gute Verhältnisse habe.
Duarte Carreira

5

550 GB eingegebene TIF-Daten können problemlos von einer einzelnen ECW-Datei verarbeitet werden. Wir haben viele Kunden, die viel größere Datensätze komprimieren. Denken Sie also bitte nicht, dass das Format in diesem Bereich nicht geeignet ist.

Ihre Strategie, das Projekt in kleine Kacheln aufzuteilen, um den Nullbereich zu minimieren, ist auch ein guter Ansatz für die aktuelle Formatversion, da dadurch die Komprimierungszeit verkürzt wird

Ihr Beispiel enthält Verweise auf vorzeichenlose 16-Bit-Eingabedaten. Ich würde empfehlen, wenn möglich auf 8 Bit neu zu skalieren (abhängig von Ihren Anforderungen).

Bitte erläutern Sie, warum Sie Ihr Projekt nicht mit IMAGINE oder ERMapper bearbeiten konnten, da ich Ihnen ohne diese Informationen nicht helfen kann. Oder wenden Sie sich noch besser an das lokale Support-Team

Beachten Sie, dass bei Verwendung des ESRI Mosaic Dataset-Formats in den obigen Antworten die Anforderung zum Generieren der Pyramiden- / Übersichtsebene nicht erwähnt wird. Ohne sie wird die Leistung erheblich leiden. Es ist wahrscheinlich, dass Sie die ECW-äquivalenten Dateien in der gleichen Zeit erstellen können, jedoch eine verbesserte Bildqualität und erheblich geringere Anforderungen an den Ausgabespeicher haben.


1
Basierend auf den neuen Informationen werden die ECW-Nullbereiche in ESRI nicht korrekt angezeigt, da sie immer noch das sehr alte v3-SDK enthalten, das keine Unterstützung für Opazitätskanäle bietet (es wird einfach ignoriert). Um dies zu beheben, besuchen Sie erdas.com und laden Sie das ArcGIS ECW-Plugin herunter, mit dem das v4 SDK mit Opazitätsunterstützung installiert wird. Die ECWs werden genauso angezeigt wie in der Globalmapper- und ERDAS-Software
Chris Tweedie,

Nur um zu beachten, dass dieses Plugin das "Problem" in ArcGIS behoben hat, dann aber die Mapinfo ecw-Anzeige unterbrochen hat und daher auf allen Computern deinstalliert werden musste, auf denen beide vorhanden waren.
GeorgeC

4

Obwohl es eindeutig besser ist, eine der anderen genannten Optionen zu verwenden, können Sie Folgendes versuchen:

gdalbuildvrt index.vrt *.tif
gdal_translate -of "GTiff" -co "COMPRESS=LZW" -co "TILED=YES" -co "BIGTIFF=YES" index.vrt out.tif

Dadurch wird ein virtuelles GDAL-Format erstellt und anschließend in ein einzelnes GeoTiff konvertiert.


3

Das kommt mir ziemlich bekannt vor, wir produzieren auch große einzelne ECW-Dateien aus 500 zu 1 TB TIF-Dateien. Aber ich würde nicht mit ArcGIS (ArcObjects und die Geoverarbeitungs-Engine) arbeiten, da es nicht in der Lage ist, diesen Betrag zuverlässig zu mosaikieren. Wenn Sie in der ESRI-Welt bleiben möchten, würde ich empfehlen, Mosaikblöcke von etwa 50 GB oder noch kleiner auf einmal in einem Raster-Datensatz zu speichern, der in einer Datei-Geodatabase gespeichert ist. Das Mosaik-Tool stürzt nach einer Weile ab. Daher ist es eine gute Idee, ArcGIS nach einigen GigaBytes Speicher freizugeben.

Eine andere Möglichkeit ist die Verwendung einer SDE-Geodatabase für Unternehmen oder Arbeitsgruppen. Mit SDE erhalten Sie die altmodischen SDE-Befehlszeilentools, die auf einer robusten C ++ - Architektur basieren, die sich von den unzuverlässigen ArcObjects unterscheidet. Mit dem Befehl "sderaster -o mosaic ..." können Sie ein RasterDataset mosaikieren, bis Ihr Datenbankspeicher voll ist. Es gibt auch Befehle zum Erstellen von Pyramiden und Statistiken für das RasterDataset. Andernfalls ist dies nicht sehr nützlich, da die meisten Clients die Bilder beim Lesen nicht im Speicher behalten können, wie oben erwähnt. Pyramiden (in der Tat räumliche Indizierung) sollten dieses Problem lösen.

Diese Lösungen helfen Ihnen jedoch nicht mit MapInfo. Sie haben erwähnt, dass Sie ERDAS Mapper bereits ausprobiert haben. Das ist auch das Tool, das ich bevorzugen würde. Wir haben bereits 16000 TIF-Dateien mit einer Größe von jeweils 50 MB zusammen mosaikiert, die 800 GB groß sind. Anschließend haben wir sie auf eine einzelne ECW mit einem Komprimierungsverhältnis von 1:20 komprimiert, was zu einer 30 GB ECW-Datei führte. Ich frage mich, dass das bei Ihnen nicht funktioniert ...

Zumindest lief der gesamte Prozess auf einem Single-Core-Pentium 4 mit 1,6 GHz und 2 GB RAM, sodass die Hardware nicht das Problem sein sollte. Wir verwenden Windows Server 2003 (oder ein anderes Server-Betriebssystem), da die Harware-Ressourcen besser verwendet werden. Beachten Sie, dass der gesamte Komprimierungsprozess viel Zeit benötigt. Unsere Maschine arbeitete ungefähr 5 Wochen an dieser einzelnen Datei, und weil sie manchmal auch abstürzte, mussten wir dies mehrmals tun, aber am Ende bekamen wir unsere ECW-Datei.

Ich kenne kein anderes System oder keinen anderen Mechanismus, um große Mengen von Rastern weitgehend herstellerneutral zu speichern. Alle oben genannten Methoden sind sehr ESRI-spezifisch. Zumindest mit Oracle RASTER und einer ziemlich ähnlichen Implementierung in PostGIS gibt es zwei datenbankbasierte Varianten, die ebenfalls nicht herstellerneutral sind, sondern über die SQL / MM-Schnittstelle geöffnet werden.

Hoffe das hilft ein bisschen.


Vielen Dank für Ihre Ermutigung, dass es bei noch größeren Datensätzen funktioniert hat. Bei ERDAS war das Problem nicht nur die Größe des Datensatzes, die einen Absturz verursachte, sondern auch, dass keine Datenbereiche nicht richtig definiert wurden. Siehe aktualisierte Frage. Haben Sie den in ERDAS verwendeten Prozess dokumentiert und können Sie ihn teilen?
GeorgeC
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.