Come tagliare un'immagine "piastrellata" da un set di dati raster usando GDAL?


22

Sto lavorando su un'app che deve creare riquadri (jpeg) da un determinato set di dati raster. La mia inclinazione iniziale era di usare gdal2tiles.py, ma le sue prestazioni sembrano migliorare.

Questo mi porta a porre la seguente domanda: quale sarebbe il modo più veloce per tagliare un'immagine "piastrellata" da un set di dati raster usando GDAL? E per "immagine piastrellata" intendo solo un semplice jpeg o png.

Nel mio prototipo, utilizzo i binding MapServer C # MapScript per eseguire il lavoro. Cioè, creo un oggetto mappa, eseguo il ciclo attraverso tutti i limiti delle tessere che devo tagliare, imposto l'estensione degli oggetti mappa e quindi salvo l'immagine risultante. Le prestazioni di questo approccio sono significativamente migliori di quelle di gdal2tiles.py, ma mi chiedo se uso direttamente GDAL se non riesco a renderlo ancora più veloce. Qualcuno può suggerire un flusso di lavoro simile con i metodi GDAL?

EDIT: Dopo alcune ulteriori ricerche oggi, ho trovato la risposta proprio davanti a me. Se hai scaricato FWTools, le cartelle csharp \ apps contengono un numero di classi per dimostrare i collegamenti GDAL C #. Nel mio caso GDALRead.cs e GDALReadDirect.cs erano quello che stavo cercando.


2
@vadp, @markusn, @mapperz e tutti gli altri - si prega di essere descrittivi. Oltre al link una o due frasi sul motivo per cui pensi che questo strumento valga la pena di essere visto e che cosa sarà diverso dagli altri sarà utile. Vogliamo che la risposta sia utile sia in futuro che immediatamente. Prima o poi il link-marcio colpisce e se tutto ciò che abbiamo è l'url è difficile trovare dove il progetto si è incarnato in seguito.
Matt Wilson

4
Ciao user890, potresti pubblicare la tua soluzione finale alla domanda e contrassegnarla come chiusa? in questo caso, sembra che l'uso dei binding specifici della lingua ti abbia dato le prestazioni di cui hai bisogno.
scw,

Non posso aggiungere un commento al mio post :( Ma gdal_tiler.py supporta anche il multiprocessing, ma in modo molto brutale: elabora semplicemente 'n' fonti contemporaneamente. Tuttavia ha un effetto positivo :)
Vadim

Risposte:




1

Nella mia compagnia abbiamo scritto script personalizzati in Python, usando gdal_warp (prima che sapessimo che esistevano gdal2tiles). Era più veloce di g2t, soprattutto quando lo riscrivevamo per essere eseguito su molti core (usando il threadpool di Python). Inoltre ha prodotto tessere di qualità superiore (l'interpolazione di lanczos su g2t sembra funzionare male, in gdal_warp le tessere risultanti sono state sorprendenti).

È necessario un po 'di sforzo per scrivere gli script, è necessario calcolare manualmente i riquadri di delimitazione risultanti, impostare alcune opzioni per le proiezioni, ecc.



0

Un'altra opzione è l'utilizzo di TileCache (WMS-C). Anche se non ho mai usato gdal2tiles, non mi aspetto che TileCache porti prestazioni migliori.

Ad ogni modo, le seguenti strategie possono accelerare la piastrellatura:

  • Metatiling, se si utilizza TileCache (mi chiedo se gdal2tiles abbia una funzione simile).
  • Nel caso in cui i dati raster siano una grande ortophoto, utilizzare un formato come ECW . Poiché questo formato presenta una decompressione parziale , utilizzando questo formato è possibile ottenere un significativo miglioramento delle prestazioni.

0

Lo script gdal_tiler.py da http://code.google.com/p/tilers-tools potrebbe essere un'opzione utile.

Di solito mostra prestazioni molto buone rispetto a gdal2tiles.py e dovrebbe funzionare con qualsiasi sorgente GDAL (set di dati), in particolare, non richiede la conversione di un set di dati di origine in RGB.


-1

Gdal2tiles_parallel https://gitlab.com/GitLabRGI/erdc/geopackage-python Se geopackage o MBTILES non sono necessari python, questo viene fatto nativamente con gdal_translate.EXE. devi anche eseguire gdaladdo per aggiungere più di un livello di zoom. uso anche qtiles / qmetatiles per desktop qgis. Ancora niente può competere con il software commerciale pro maptiler. Se hai bisogno di una cartella di piastrelle, converti MBTILES in TMS O XYZ con mbUtil python


Il collegamento non funziona più
AndrewHarvey,

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.