Quale formato e impostazioni utilizzare per le foto delle antenne in QGIS?


10

Di seguito la domanda che riguardava maggiormente la gestione delle antenne con ArcGIS:

Formato più efficace per gestire la fotografia aerea per la sola visualizzazione

Sembra che ci siano 2 principali opzioni per conservare / ricampionare / riproiettare le antenne ecc.:

  1. JP2000 / JP2 / JPEG 2000 (recentemente 5 codici per la gestione GDAL)
  2. ECW (ERDAS Compressed Wavelets (.ecw))
  3. qualcun altro che mi è mancato?

gdal formati disponibili

Ciò che ho capito a seconda della versione di QGIS per entrambi, di solito devono essere installate alcune librerie aggiuntive. ECW ha alcune limitazioni: per comprimere è necessario acquistare una licenza?

Ho testato jpeg che non posso usare per file di grandi dimensioni (limitazione della dimensione massima) ed è anche lento con dimensioni maggiori.

La risposta dovrebbe contenere:

  1. Cosa è disponibile di default con QGIS 2.0.1 desktop e / o OSGEO?
  2. Come funziona con file di grandi dimensioni - ingrandimento / riduzione (piramidi)?
    • sono le opzioni di creazione - RISOLUZIONI per le piramidi jp2?

1
Solo l'altro approccio: una grande serie di ortofoto viene spesso utilizzata come servizio OGC WMS / WMTS con un provider di backend come GeoServer o MapServer.
Jakob,

2
GeoTIFF e NITF sono comuni per le immagini satellitari. Supportato anche in GDAL, ma non sono sicuro che QGIS supporti NITF.
BradHards,

@Jakob - Vedo il punto. Ma le immagini devono essere salvate in qualche modo sul server (in qualche formato), giusto?
Miro,

@BradHards - Tiff era in realtà la mia prima scelta, ma l'unico modo per salvarlo compresso in modo efficace è la compressione JPEG che mi porta alla stessa limitazione di dimensioni massime come se fosse salvata direttamente su JPEG. Il fatto è che per le immagini satellitari è necessaria soprattutto la compressione senza perdita. Ma questa domanda è più focalizzata sulle foto aeree che possono sopportare alcune perdite per salvare enorme archiviazione / trasferimento di dati.
Miro,

Risposte:


8

Basato sulle risposte di Huckfinn, pochi altri commenti e insieme ai miei risultati:

Il formato vincente è JPEG2000 (perché e quale versione è menzionata di seguito Perché non altri )

Perché non altri:

  1. JPEG
    • Limitazione delle dimensioni sia delle dimensioni che delle dimensioni dei dati (4 GB e 65500x65500)
    • nessuna possibilità (interna) di piramidi = più grande è l'immagine, più tempo è necessario per visualizzarla quando si esegue una panoramica / ingrandimento / riduzione
  2. GeoTIFF
    • Buono per le griglie ma per le immagini raster non esiste una compressione con perdita efficace tranne JPEG = stesso problema di JPEG
  3. ECW e Mr. SID
    • Hai bisogno di una licenza speciale per poter salvare in ECW e Mr. SID - non puoi farlo di default con GDAL (QGIS). Se hai una licenza speciale, probabilmente non hai bisogno di leggere questa risposta perché l'elaborazione delle immagini è il tuo pane quotidiano (la nostra azienda di solito riceve immagini in formato ECW dai nostri clienti)
  4. Server database / mappa
    • È sicuramente una buona opzione se hai già un database / un server di mappe in esecuzione o almeno sai come farlo facilmente e velocemente. In tal caso, i dati possono essere salvati in GeoTIFF o in qualsiasi altro modo e vengono generalmente inviati come JPEG al client: browser Web o software desktop come QGIS. Ma se non si dispone di un server e si desidera caricare facilmente / visualizzare facilmente le immagini in QGIS, è troppo complicato.

PERCHÉ JPEG2000:

Come ho pubblicato nella mia domanda, GDAL offre più opzioni per salvare in formato JPEG2000 ma, come elencato sul sito Web GDAL, non dovrebbe essere fornito nella versione predefinita di GDAL. Probabilmente ho provato 6 diverse versioni di QGIS durante il test e tutti avevano almeno un'opzione JPEG2000 (su Windows 7). Per essere sicuro suggerisco di installare la versione OSGeo4W (32 o 64 bit) di QGIS e di verificare nella shell OSGeo4W se è disponibile un codice JPEG2000. (su Windows basta eseguire la shell OSGeo4W dal menu / programmi di avvio e scrivere lì comando gdal_translate --formatso gdalwarp --formats).

In tutte le versioni di QGIS ho provato che era disponibile il codice JP2OpenJPEG (libreria OpenJPEG (v2)). E dopo alcuni test più lunghi, tra cui altri, ho trovato quello più utile.

Vantaggi di JP2OpenJPEG

  • gratis da usare per aprire / salvare
  • nessun limite di "piccola" dimensione (sicuramente può andare ben oltre 65500x65500)
  • compressione molto efficace (possibile impostare%)
  • include piramidi (anteprime) per una visualizzazione rapida (anche possibile impostare)

(opzioni per impostare la compressione ( -co QUALITY ), piramidi ( -co RESOLUTIONS ) e altro ancora - http://www.gdal.org/frmt_jp2openjpeg.html )

Semplice esempio di conversione in QGIS usando gdal_translate (in QGIS vai su Raster / Converion / Translate , imposta tutto ciò di cui hai bisogno ed eventualmente fai clic sul pulsante Modifica per adattare il comando alle tue esigenze):

gdal_translate -of JP2OpenJPEG -co QUALITY=10 srcGridOrImage image.jp2  

6

Per l'argomento 2: ecco un'indagine più lunga di JP2, perché ero anche interessato, a utilizzare una compressione più efficiente. E il risultato IMO è: All'interno di GDAL / QGIS (come QgsRastrerDataProvider) non è possibile combinare la compressione jpeg2000 corretta e le opzioni di memorizzazione nella cache veloce come set di tessere e strutture a blocchi in modo semplice.

Normalmente preferisco GeoTiff per Raster-DB, è ben supportato da GDAL da molto tempo e ha molte funzionalità per semplificare la vita.

È possibile trovare le funzionalità del driver di dati JP2 nella pagina gdal. Per le tue esigenze jp2k il JPEG2000 (dipendenze libjasper) è elencato in questa pagina: http://www.gdal.org/frmt_jpeg2000.html . Come elencato su http://www.gdal.org/formats_list.html il "driver" supporta read, write, è limitato a 2GiB e integrato dalla versione 1.9 di GDAL e ha alcune opzioni di blocco ...

Quindi, per essere sicuri, ciò che è possibile con JP2 ho creato un set di test.

Uso grandi foto artistiche per rilevare gli uccelli marini nel Mar Baltico con una dimensione di ca. 12000 per 10000 pixel (RGB) e una risoluzione al suolo di 2 cm (spero sia abbastanza grande). Al momento ho 270 file con una capacità di circa 130 GiB nel mio progetto QGIS. E funziona perfettamente e bene su un sistema operativo Debian 7.0 Linux a 64 bit con core Opteron 8GB e 4xAMD. ... ma con GeoTiff.

Per ottenere un accesso rapido nello strumento GIS, le immagini vengono referenziate e ricampionate con GDAL usando i seguenti passaggi e opzioni (..specare per lo stile di script bash):

Facendo riferimento all'immagine con set di dati dal registro gps:

    gdal_translate \
    -of GTiff \
    -gcp   0     0 $ulx   $uly \
    -gcp   0   $hg $llx   $lly \
    -gcp $cwd $chg $cpx   $cpy \
    -gcp $wd     0 $urx   $ury \
    -gcp $wd   $hg $lrx   $lry \
    -a_srs epsg:32632 \ 
    $raw_tif $ref_tif

Le variabili $ [u | o] [l | r] [x | y] sono gli angoli dell'immagine data dal calcolo fotogrammetico e la variabile $ wd è la larghezza dell'immagine, $ hg l'altezza dell'immagine e $ cwd $ chg il punto centrale.

Trasforma l'immagine con le opzioni di set di tessere nel mondo reale:

    gdalwarp \
    --config GDAL_CACHEMAX 2000 -wm 2000 -wo NUM_THREADS=4 \
    -r bilinear -dstnodata '0 0 0' \
    -of GTiff \
    -t_srs epsg:32632 \
    -tr 0.02 0.02 \
    -co COMPRESS=LZW \
    -co TILED=YES \
    -co BLOCKXSIZE=512 \
    -co BLOCKYSIZE=512 \
    $ref_tif $geo_tif

I parametri: --config GDAL_CACHEMAX 2000 -wm 2000 -wo NUM_THREADS = 4 dice al ferro di usare molta cache e quattro thread del processore per calcolare il materiale. Il ricampionamento avviene in modo bilineare e il sistema di coordinate è UTM-32 .. ma voglio blocchi di blocchi 512x512, per rendere le operazioni di navigazione (zoom, panoramica, punto) veloci e fluide. Questo viene fatto dalle opzioni -co TILED = YES -co BLOCKXSIZE = 512 -co BLOCKYSIZE = 512.

Scrivi piramidi nel GeoTiff ai livelli di zoom 2,4,8 e 16:

    gdaladdo -r gauss $geo_tif 2 4 8 16

Il GeoTiff risultante mostrato da gdalinfo è:

 Driver: GTiff/GeoTIFF
 Files: CF006135.TIF
 Size is 12419, 9900
 Coordinate System is:
 PROJCS["WGS 84 / UTM zone 32N",
    GEOGCS["WGS 84",
        DATUM["WGS_1984",
             SPHEROID["WGS 84",6378137,298.257223563,
                 AUTHORITY["EPSG","7030"]],
             AUTHORITY["EPSG","6326"]],
        PRIMEM["Greenwich",0],
        UNIT["degree",0.0174532925199433],
        AUTHORITY["EPSG","4326"]],
    PROJECTION["Transverse_Mercator"],
    PARAMETER["latitude_of_origin",0],
    PARAMETER["central_meridian",9],
    PARAMETER["scale_factor",0.9996],
    PARAMETER["false_easting",500000],
    PARAMETER["false_northing",0],
    UNIT["metre",1,
        AUTHORITY["EPSG","9001"]],
    AUTHORITY["EPSG","32632"]]
Origin = (656099.007276594405994,5998980.139660121873021)
Pixel Size = (0.020000000000000,-0.020000000000000)
Metadata:
  AREA_OR_POINT=Area
Image Structure Metadata:
  INTERLEAVE=PIXEL
Corner Coordinates:
  Upper Left  (  656099.007, 5998980.140) ( 11d23'17.54"E, 54d 6'54.87"N)
  Lower Left  (  656099.007, 5998782.140) ( 11d23'17.17"E, 54d 6'48.47"N)
  Upper Right (  656347.387, 5998980.140) ( 11d23'31.21"E, 54d 6'54.60"N)
  Lower Right (  656347.387, 5998782.140) ( 11d23'30.84"E, 54d 6'48.20"N)
  Center      (  656223.197, 5998881.140) ( 11d23'24.19"E, 54d 6'51.54"N)
Band 1 Block=512x512 Type=Byte, ColorInterp=Red
 NoData Value=0
 Overviews: 6210x4950, 3105x2475, 1553x1238, 777x619
Band 2 Block=512x512 Type=Byte, ColorInterp=Green
 NoData Value=0
 Overviews: 6210x4950, 3105x2475, 1553x1238, 777x619
Band 3 Block=512x512 Type=Byte, ColorInterp=Blue
 NoData Value=0
 Overviews: 6210x4950, 3105x2475, 1553x1238, 777x619

Quindi in GeoTiff ogni cosa va bene! Se provo a creare un JP2 con un passaggio di conversazione diretta:

 gdalwarp -of jpeg2000 -co TILED=YES -co BLOCKSIZEX=512 -co BLOCKSIZEY=512 CF006135.TIF CF006135.jp2 
 Output driver `jpeg2000' not recognised or does not support
 direct output file creation.  The following format drivers are configured
 and support direct output:
   VRT: Virtual Raster
   GTiff: GeoTIFF
   NITF: National Imagery Transmission Format
   HFA: Erdas Imagine Images (.img)
   ELAS: ELAS
   MEM: In Memory Raster
   BMP: MS Windows Device Independent Bitmap
   PCIDSK: PCIDSK Database File
   ILWIS: ILWIS Raster Map
   SGI: SGI Image File Format 1.0
   Leveller: Leveller heightfield
   Terragen: Terragen heightfield
   netCDF: Network Common Data Format
   HDF4Image: HDF4 Dataset
   ISIS2: USGS Astrogeology ISIS cube (Version 2)
   ERS: ERMapper .ers Labelled
   RMF: Raster Matrix Format
   RST: Idrisi Raster A.1
   INGR: Intergraph Raster
   GSBG: Golden Software Binary Grid (.grd)
   PNM: Portable Pixmap Format (netpbm)
   ENVI: ENVI .hdr Labelled
   EHdr: ESRI .hdr Labelled
   PAux: PCI .aux Labelled
   MFF: Vexcel MFF Raster
   MFF2: Vexcel MFF2 (HKV) Raster
   BT: VTP .bt (Binary Terrain) 1.3 Format
   LAN: Erdas .LAN/.GIS
   IDA: Image Data and Analysis
   GTX: NOAA Vertical Datum .GTX
   NTv2: NTv2 Datum Grid Shift
   ADRG: ARC Digitized Raster Graphics
   SAGA: SAGA GIS Binary Grid (.sdat)

e fallisce. Potrebbe essere il messaggio di errore che ti dà un indizio o un altro formato che puoi usare.

Il tentativo con lo strumento gdal_translate ti darà un JP2000 corretto

 gdal_translate -of jpeg2000\
    -co TILED=YES -co BLOCKSIZEX=512 -co BLOCKSIZEY=512\
    CF006135.TIF CF006135.jp2

 ls -l 
 -rw-r--r-- 1 huckfinn huckfinn  63538529 Jan 28 23:55 CF006135.jp2
 -rw-r--r-- 1 huckfinn huckfinn       388 Jan 28 23:04 CF006135.jp2.aux.xml
 -rw-r--r-- 1 huckfinn huckfinn 519882980 Sep 30 21:01 CF006135.TIF

e il tasso di compressione è 1: 8 ma perdiamo le proprietà del set di blocchi e piastrelle come mostrato da gdalinfo:

 gdalinfo CF006135.jp2 
 Driver: JPEG2000/JPEG-2000 part 1 (ISO/IEC 15444-1)
 Files: CF006135.jp2
        CF006135.jp2.aux.xml
 Size is 12419, 9900
 Coordinate System is:
 PROJCS["WGS 84 / UTM zone 32N",
     GEOGCS["WGS 84",
         DATUM["WGS_1984",
             SPHEROID["WGS 84",6378137,298.257223563,
                 AUTHORITY["EPSG","7030"]],
             AUTHORITY["EPSG","6326"]],
         PRIMEM["Greenwich",0],
         UNIT["degree",0.0174532925199433],
         AUTHORITY["EPSG","4326"]],
     PROJECTION["Transverse_Mercator"],
     PARAMETER["latitude_of_origin",0],
     PARAMETER["central_meridian",9],
     PARAMETER["scale_factor",0.9996],
     PARAMETER["false_easting",500000],
     PARAMETER["false_northing",0],
     UNIT["metre",1,
         AUTHORITY["EPSG","9001"]],
     AUTHORITY["EPSG","32632"]]
 Origin = (656099.007276594405994,5998980.139660121873021)
 Pixel Size = (0.020000000000000,-0.020000000000000)
 Metadata:
   AREA_OR_POINT=Area
 Corner Coordinates:
 Upper Left  (  656099.007, 5998980.140) ( 11d23'17.54"E, 54d 6'54.87"N)
 Lower Left  (  656099.007, 5998782.140) ( 11d23'17.17"E, 54d 6'48.47"N)
 Upper Right (  656347.387, 5998980.140) ( 11d23'31.21"E, 54d 6'54.60"N)
 Lower Right (  656347.387, 5998782.140) ( 11d23'30.84"E, 54d 6'48.20"N)
 Center      (  656223.197, 5998881.140) ( 11d23'24.19"E, 54d 6'51.54"N)

L'ultimo test è stato utilizzare GeoTiff con una compressione JPEG interna ma otteniamo:

 gdalwarp -of GTiff \
  -co COMPRESS=JPEG \
  -co TILED=YES -co BLOCKSIZEX=512 -co BLOCKSIZEY=512\
  CF006135.TIF CF006135_IJPG.TIF
  Creating output file that is 12419P x 9900L.
  Warning 6: Driver GTiff does not support BLOCKSIZEX creation option
  Warning 6: Driver GTiff does not support BLOCKSIZEY creation option
  Processing input file CF006135.TIF.
  ....

Quindi dove andare da qui. La pagina lib del driver Jasper JP2000 di GDAL elenca alcuni parametri per creare l'immagine jp2000 con opzioni di blocco:

 Encoding parameters, directly delivered to the JasPer library described in the JasPer documentation. Quoted from the docs:

``The following options are supported by the encoder:
imgareatlx=x    Set the x-coordinate of the top-left corner of the image area to x.
imgareatly=y    Set the y-coordinate of the top-left corner of the image area to y.
tilegrdtlx=x    Set the x-coordinate of the top-left corner of the tiling grid to x.
tilegrdtly=y    Set the y-coordinate of the top-left corner of the tiling grid to y.
tilewidth=w     Set the nominal tile width to w.
tileheight=h    Set the nominal tile height to h.
prcwidth=w  Set the precinct width to w. The argument w must be an integer  power of two. The default value is 32768.
prcheight=h     Set the precinct height to h. The argument h must be an integer power of two. The default value is 32768.
cblkwidth=w     Set the nominal code block width to w. The argument w must be an integer power of two. The default value is 64.
cblkheight=h    Set the nominal code block height to h. The argument h must be an integer power of two. The default value is 64.

ma la domanda è: quale verrà utilizzato da qgis.


1
Grazie, lo apprezzo molto. Nel frattempo ho anche fatto i miei test. Come vedo, JPEG2000 è il formato adatto. Come ho detto prima, TIFF non deve essere usato perché posso usare solo la compressione JPEG (non JP2000), quindi c'è un limite di dimensioni. Ho usato il driver (codice) JP2OpenJPEG che è disponibile nella mia versione QGIS / GDAL e non ha limiti di dimensione. E, soprattutto, ha buone opzioni di creazione, tra cui Resolutions e BLOCK * SIZE (entrambi impostati su valori predefiniti ragionevoli).
Miro,

Grazie, sono buone notizie. Sfortunatamente Debian wheezy non supporta questo driver al momento ... ma è bello sapere quale dei tanti jp2000 è quello giusto. -
huckfinn,

5

Per l'argomento 1. QGIS utilizza GDAL come QgsRasterdataProvider. Quindi le funzionalità di lettura e scrittura di un formato raster sono implementate dalla libreria GDAL. Puoi trovare un formato supportato al seguente link http://www.gdal.org/formats_list.html . Il comando gdal-config --formats ti offre una panoramica su quali formati sono contenuti nella tua lib o edizione. Ciò che viene fornito dalla tua edizione dipende dal pacchetto, dal sistema operativo e così via. Per maggiori informazioni leggi http://trac.osgeo.org/gdal/wiki/BuildHints .


Grazie per gdal-config --formats. Prima parte del puzzle fatta.
Miro,

1
gdal-config --formats è solo per sistemi Unix. Su Windows è possibile eseguire gdal_translate --formats o gdalwarp --formats per vedere cosa è disponibile.
Miro,

Hm, questo è vero gdal-config offre ai compilatori unix un consiglio per le denendenze in biblioteca. OK, non ha senso in Windows (cygwin o mingw exepted). Ma gdalinfo --format $ DRIVERNAME ti dà le informazioni.
Huckfinn,
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.