Come aggirare il processo di mosaico di grandi dimensioni che non riesce?


11

Devo creare un mosaico di circa 550 GB di immagini tif insieme e il software che ho provato continua a fallire. L'area è stata suddivisa in zone in modo che la più piccola abbia circa 200 tessere.

Ho usato le ultime versioni di ERDAS (Imagine and Mapper), ArcINFO e Global Mapper su un Intel Xeon E31245 da 3,30 gigahertz, DELL, 16 GB di RAM, Win 7 Professional a 64 bit. Macchina Mullti-core (4 in totale), Hyper-thread (8 in totale). La mia C ha 700 GB gratuiti e D ha 1,5 TB.

Sto cercando di usare Grass (mai prima d'ora) ma i.image.mosaic sembra gestire solo 4 file ... alcuni dei miei hanno 600 tessere. Altre opzioni o software opensource da provare?

Ci dispiace aggiungere che non possiamo usare un set di dati a mosaico (o equivalente in altri software) in quanto dobbiamo creare zone con aree senza dati definite come ecw in modo che possano essere aperte in qualsiasi software GIS e combinate con una risoluzione inferiore / precedente dati quando i nuovi dati non esistono senza soluzione di continuità.

inserisci qui la descrizione dell'immagineUn esempio di come appaiono alcuni file mosaicati in diversi software. Global Mapper / ERDAS vanno bene ma non sono corretti in arcgis.

--- INFORMAZIONI PIÙ VECCHIE ---

inserisci qui la descrizione dell'immagine

Ci scusiamo per il disegno approssimativo. Quindi avere le aree colorate come 5 zone minimizzerà le aree senza dati nell'AOI più grande.

In arcgis il codice è il seguente (questo viene eseguito come modello e non in Python in quanto non riesco a ottenere l'input tifList).

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")

dove tifList dovrebbe essere letto da un file CSV ma questo non ha funzionato in Python, quindi sto eseguendo quanto sopra in un modello ...

Ho 1,5 TB + spazio libero sul mio disco ma il processo si arresta in modo anomalo con un errore 9999.

Elaborerebbero anche 100 tessere? -si dovremmo guardare a rompere ulteriormente le zone?


3
È una quantità folle di dati da spingere. Non stai cercando di unirlo in un file TIF enorme, vero? Suggerirei di creare un set di dati a mosaico o un servizio di mappe memorizzato nella cache .
blah238,

sì, è ... no, sarebbe idealmente 7 ecw o tif individuali (se si usa arcgis). Posso aggiungere un'immagine delle dimensioni / zone ma non sono sicuro se ciò sarebbe utile.
GeorgeC,

Sulla base dei tuoi commenti sulla tua organizzazione utilizzando MapInfo e altri software, invece di ArcGIS, sto rimuovendo la mia risposta, in quanto non risolve affatto le tue esigenze. Tuttavia, suggerirei di includere alcuni dettagli sui requisiti del software nella tua domanda per impedire ulteriori viaggi lungo il percorso Esri.
Ottieni Spatial

@GetSpatial - grazie per la risposta dettagliata. È una soluzione a breve termine e probabilmente la useremo ma, come ho già detto nella mia domanda, siamo veramente indipendenti dal software e abbiamo i biggies (ESRI / ERDAS / MAPINFO e Global Mapper). La chiave per noi è il risultato: ~ 5 mosaici con aree senza dati definite in modo che possano essere utilizzate altre immagini. Gli ECW dovrebbero avere i no-data definiti in tutti i software - abbiamo scoperto che alcuni mosaici non mantengono le proprietà dei no-data in diversi software. Pubblicherò un esempio. Grazie ancora. Vorrei chiedervi di mantenere la risposta qui, la voterò.
GeorgeC,

Risposte:


9

Dovrò seguire i suggerimenti di 2nd @ blah238 sull'uso di altri metodi di accesso ai dati rispetto alla creazione di una singola immagine a mosaico. Una semplice ipotesi direbbe che non esiste un desktop là fuori in grado di gestire la quantità di dati che dovresti elaborare per mosaico di tutte quelle tessere.
Per scomporlo, ci sono probabilmente due posti in cui stai esaurendo lo spazio.

  1. Il primo sarà nel buffer RAM. Per un mosaico di dati, stai unendo tutto in un singolo file, il che significa idealmente che l'intero file verrebbe tenuto in memoria. Non hai 550 GB di RAM, il che significa che ci sarà lettura / scrittura dalla memoria virtuale. Questo è sufficiente per interrompere il processo proprio lì.
  2. L'altro problema è probabilmente lo spazio sul disco rigido. Molte delle operazioni raster creano file temporanei nella directory "area di lavoro" che sono piuttosto grandi. Potrebbero essercene 2 o 3 o più prima ancora che venga scritto il set di dati finale, quindi è concepibile utilizzare tutto lo spazio su disco durante l'elaborazione.

Ora, per altre soluzioni. Come menzionato nei commenti sopra, c'è la possibilità di creare un set di dati Mosaic . Questo set di dati ti consentirà non solo di trattare tutte le singole tessere come una singola immagine senza soluzione di continuità, ma mantiene anche i metadati sulle singole tessere contenute all'interno. Ti consente anche di eseguire operazioni raster come Hillshade .

L'altra opzione che consiglierei, in base al tuo commento sul voler separare le zone sarebbe quella di creare un catalogo raster . Un catalogo raster è essenzialmente un livello di gruppo. È possibile aggiungere più set di dati raster. Possono essere gestiti in un geodatabase e importare i raster o semplicemente creare un set di dati non gestito in cui il catalogo raster mantiene i percorsi dei set di dati raster originali. Quando si carica questo livello in ArcMap, è possibile impostare le proprietà di visualizzazione in modo che vengano caricate solo in un determinato numero di riquadri raster contemporaneamente, oppure impostare la scala e la risoluzione dello schermo.
Attualmente sto usando un catalogo raster per affiancare un set di 100 + GB di foto aeree. Le prestazioni sono molto buone. Se stai cercando un diverso tipo di archiviazione dei dati semplicemente per la gestione di un gran numero di riquadri, lo consiglierei davvero.

Ecco il codice che è possibile utilizzare per creare un Catalogo raster e quindi importare in esso un'area di lavoro di riquadri :

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")

Spero che questo ti aiuti!

------------- Modificare

Ecco un grafico delle piastrelle gestite dal mio catalogo raster. Si noti che è possibile scegliere di visualizzare wireframe o dati raster. Il catalogo raster ha una tabella di attributi a cui è possibile aggiungere campi, ad esempio se si desidera aggiungere designazioni di zona come nel grafico. Quindi, puoi scegliere di mostrare solo quei raster in una particolare zona.
Quando si stampa in un grafico dalla vista layout, viene utilizzata la risoluzione completa dei raster, quindi non si verifica alcuna perdita di qualità nella stampa.

inserisci qui la descrizione dell'immagine

Ecco lo stesso grafico, ma mostra alcuni dei dati raster, insieme ad alcuni wireframe.

inserisci qui la descrizione dell'immagine


Grazie per il tuo tempo su questo. È una buona soluzione a breve termine ma poiché l'organizzazione utilizza Mapinfo e altri software, dobbiamo davvero essere in grado di creare ecw con l'area del consiglio divisa in circa 5 zone. Mapinfo ha livelli senza soluzione di continuità (simili a Raster Catalog). Ma è importante che vengano definite aree senza dati in modo da poter sostenere le nuove immagini con immagini più vecchie con una copertura più ampia e ridurre il numero di file da aprire.
GeorgeC,

1
In futuro, probabilmente riceverai una risposta più pertinente se fornisci questo tipo di informazioni nella domanda iniziale.
Ottieni Spatial

1
Hai esaminato quali servizi di mappe web MapInfo può utilizzare? Ho il sospetto che vorrai mettere le versioni memorizzate nella cache di tutti questi dati su un server per il consumo da parte della tua organizzazione, non i dati non elaborati. Penso che la cosa senza dati sia un punto controverso con i servizi cartografici poiché semplicemente non si creerebbero riquadri in cui non vi sono dati e tutto ciò che è sotto verrebbe mostrato.
blah238,

7

So di essere in ritardo alla festa. Ma ecco il mio suggerimento.

1) dimensione dell'immagine
Se gli originali da 550 GB non sono compressi, è necessario convertirli in file tiff compressi jpeg. Conservali individualmente (non uniti). Puoi comprimere usando arcgis, gdal, qualunque cosa tu voglia. La compressione ti porterà a circa 23 GB. Non creare ancora piramidi / panoramiche. Per comprimere puoi usare qualsiasi programma gis che ti piace, ma mi piace usare gdal quindi il comando è sostanzialmente questo:

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

Puoi facilmente creare un file bat che attraversa tutti i tuoi tiff non compressi. Mi piace usare gdalwarp per comprimere le mie immagini invece del solito gdal_translate, perché è più veloce (usando multi-opzione per multi-core e -wm per molta memoria).

2) gestione come singola immagine
È possibile creare un mosaico "virtuale" utilizzando il formato gdal vrt. Questo è compatibile con arcgis, qgis, mapserver, ecc. Non sono sicuro di mapper globale e mapinfo. Il formato .vrt è solo un singolo file XML che elenca le tue immagini. Questo è un singolo comando per creare:

gdalbuildvrt nameofmosaic.vrt compressed_tif_folder\*.tif

Questo file ha una dimensione di pochi kb.

3) visualizzazione accelerata
Devi costruire piramidi / panoramiche. Usa il tuo software preferito per questo. Mantenendo con gli strumenti gdal è possibile:

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

Ci vorrà molto tempo. Preparati ad attendere 2-3 giorni di elaborazione non-stop.

4) usando il mosaico
Carica il mosaico virtuale nel tuo programma gis. Sarà veloce perché sta leggendo le panoramiche che sono solo in 1 file come un ecw. Quando ingrandisci la risoluzione reale delle tue immagini, verranno letti solo i pochi visibili dalle immagini compresse, e anche questo è molto veloce.

5) gestione delle aree senza dati che mostrano il nero
Hai 3 soluzioni per questo: i) utilizzare un formato di file che gestisca i nodati, che sarà complicato; oppure ii) utilizzare una banda alfa o iii) un file maschera. Puoi creare automaticamente una banda alfa al passaggio 2 dicendo a GDAL che vuoi che le aree dei nodati siano nella banda alfa - aggiungi semplicemente l'opzione -addalpha:

gdalbuildvrt -addalpha nameofmosaic.vrt compressed_tif_folder\*.tif

Il problema con le bande alfa è che si comprimono male. Quindi le tue panoramiche saranno più grandi. Se per te va bene allora hai finito.

Se vuoi creare un file maschera, allora è un po 'più complicato. E trovo che questo non si adatti alla domanda attuale.

Quindi spero che questo aiuti. Puoi trovare informazioni sugli strumenti di gdal cercando su Google. Molte cose interessanti in giro.


1
Bel post. Si noti che gdalwarp quando si deforma effettivamente (ad es. Riproiettare, ricampionare, ecc.) Ha un problema di vecchia data nel creare output molto più grandi del necessario quando si utilizza la compressione. In questi casi è meglio saltare la compressione nella fase gdalwarp e seguire con un gdal_translate -co compress=xxxseguito. Questo non è un problema se usato come traduttore (come suggerito qui).
Matt Wilkie,

1
Grazie. Penso che il problema sia stato risolto da quando ho proiettato e compresso allo stesso tempo ultimamente e ho ottenuto buoni rapporti.
Duarte Carreira

5

550 GB di dati TIF di input possono essere facilmente gestiti da un singolo file ECW. Abbiamo molti clienti che comprimono set di dati molto più grandi di questo, quindi per favore non pensare che il formato non sia in grado in questo settore.

La tua strategia di dividere il progetto in piccoli riquadri per ridurre al minimo l'area nulla è anche un buon approccio da adottare con la versione del formato corrente in quanto ridurrà il tempo di compressione

Il tuo esempio include riferimenti a dati di input a 16 bit senza segno. Consiglierei il riscalaggio a 8 bit se possibile (a seconda delle vostre esigenze)

Ti preghiamo di approfondire il motivo per cui non sei stato in grado di elaborare il tuo progetto utilizzando IMAGINE o ERMapper poiché senza queste informazioni non posso aiutarti. O meglio ancora contattare il team di supporto locale

Si informa che, utilizzando il formato di set di dati a mosaico ESRI, ciò che le risposte sopra non menzionano è il requisito per generare il livello piramide / panoramica. Senza di essa le prestazioni ne risentiranno notevolmente. È probabile che tu possa creare i file equivalenti ECW nello stesso lasso di tempo, ma avere una qualità dell'immagine migliorata e requisiti di archiviazione di output significativamente più piccoli.


1
Sulla base delle nuove informazioni fornite, le aree Null ECW non vengono visualizzate correttamente in ESRI perché contengono ancora il vecchio SDK v3 che non ha il supporto del canale di opacità (viene semplicemente ignorato). Per risolvere questo problema, visitare il sito Web erdas.com e scaricare il plug-in ECW ArcGIS che installerà l'SDK v4 con supporto per l'opacità e gli ECW mostreranno lo stesso contenuto del software Globalmapper ed ERDAS
Chris Tweedie,

Solo per notare che questo plugin ha risolto il "problema" in ArcGIS, ma poi ha interrotto la visualizzazione ecw di Mapinfo e quindi ha dovuto essere disinstallato su tutti i computer che avevano entrambi.
GeorgeC,

4

Sebbene sia chiaramente meglio utilizzare una delle altre opzioni menzionate, puoi provare quanto segue:

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

Questo crea un formato virtuale GDAL e quindi la converte in un singolo GeoTiff.


3

Mi sembra abbastanza familiare, produciamo anche grandi file ECW singoli su 500 anche 1 TB di file TIF. Ma non vorrei durare su ArcGIS (ArcObjects e il motore di geoprocessing), dal momento che non è in grado di mosaico questa quantità in modo affidabile. Se vuoi rimanere nel mondo ESRI, consiglierei di eseguire il mosaico di blocchi di circa 50 GB o anche più piccoli contemporaneamente su un set di dati raster archiviato in un file geodatabase. Lo strumento Mosaico tende a bloccarsi dopo un po ', quindi è una buona idea lasciare che ArcGIS liberi la memoria dopo alcuni GigaBytes.

Un'altra possibilità è quella di utilizzare un geodatabase aziendale o di gruppo di lavoro SDE. Con SDE si ottengono i vecchi strumenti della riga di comando SDE, che sono costruiti su una solida architettura C ++ diversa dalle cose inaffidabili di ArcObjects. Con il comando "sderaster -o mosaic ...", puoi eseguire il mosaico su un RasterDataset fino a quando l'archivio del database non è pieno. Ci sono anche Comandi per costruire piramidi e statistiche per il RasterDataset, altrimenti non è molto utile, perché la maggior parte dei Clienti non può tenere le immagini in memoria durante la lettura, come blah238 menzionato sopra. Ma le piramidi (in effetti l'indicizzazione spaziale) dovrebbero risolvere questo problema.

Ma queste soluzioni non ti aiutano con MapInfo di sicuro. Hai detto di aver già provato ERDAS Mapper. Questo è anche lo strumento che preferirei. Abbiamo già eseguito il mosaico di 16000 file TIF, ciascuno da 50 MB di dimensioni insieme, che sono 800 GB, quindi li abbiamo compressi in un singolo ECW con un rapporto di compressione di 1:20 che ha prodotto un file ECW da 30 GB. Mi chiedo che questo non funzioni per te ...

Almeno l'intero processo era in esecuzione su un singolo core Pentium 4 1,6 GHz con 2 GB di RAM, quindi l'hardware non dovrebbe essere il problema. Stiamo utilizzando Windows Server 2003 (o un altro sistema operativo del server) perché utilizza meglio le risorse hardware. Tieni presente che l'intero processo di compressione richiede molto tempo. La nostra macchina funzionava da circa 5 settimane su quel singolo file e poiché a volte si arrestava in modo anomalo, abbiamo dovuto farlo più volte, ma alla fine abbiamo ottenuto il nostro file ECW.

Non sto conoscendo un altro sistema o meccanismo per immagazzinare grandi quantità di raster in un modo per lo più neutrale rispetto al fornitore. Tutti i modi sopra menzionati sono molto specifici dell'ESRI. Almeno con Oracle RASTER e un'implementazione abbastanza simile in PostGIS, ci sono due varianti con database che sono, benché non neutre dal fornitore ma aperte tramite l'interfaccia SQL / MM.

Spero che questo aiuti un po '.


Grazie per il tuo incoraggiamento, che ha funzionato su set di dati ancora più grandi. Con ERDAS, il problema non era solo la dimensione del set di dati che causava un arresto, ma anche le aree senza dati non definite correttamente. Vedi domanda aggiornata. Hai documentato il processo che hai utilizzato in ERDAS e puoi condividerlo?
GeorgeC,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.