Velocidade de vários formatos de dados raster

25

Estou tendo problemas para localizar qualquer discussão ou comparação comparativa de diferentes formatos de arquivo raster (por exemplo, para uso na análise de dados em R). Alguém tem alguma idéia de por que determinados formatos podem ser mais rápidos ou mais lentos? Ou as diferenças devem ser mínimas?

Especificamente, estou interessado em saber se a conversão de uma varredura (por exemplo, um arquivo GEOTIFF) para um formato diferente (por exemplo, um netCDF) vale a pena com o objetivo de acelerar a leitura / gravação e outras operações.

George
fonte
2
Essa pergunta é relevante para o GIS, mas suspeito que você provavelmente obtenha respostas sobre o SO, que possui uma forte subcomunidade de especialistas em R. Se você não receber uma resposta rapidamente, basta sinalizar esta pergunta e um moderador a migrará para você.
whuber

Respostas:

9

Aqui está um artigo antigo do meu blog que analisa o tamanho do arquivo e o tempo de acesso dos formatos. Não investiguei a velocidade de gravação, apenas o tempo de acesso. Eu diria que eles provavelmente estariam diretamente relacionados, mas não seriam capazes de atestar isso.

Resumo do artigo: Parece que o Packbits oferece os melhores tempos de acesso (em detrimento do espaço em disco), enquanto o Deflate fornece tempos de acesso intermediários / lentos para arquivos intermediários / pequenos. Além disso, você pode testar os tempos de acesso de maneira mais empírica, criando miniaturas de vários tamanhos e cronometrando quanto tempo leva. Comando de exemplo:time gdal_translate -outsize <thumbnail dimensions> -of GTiff <compressed image file> <thumbnail file>

Supondo que a única coisa relevante para R nesse caso seja a rapidez com que ele pode ler dados do arquivo, assim como qualquer outro processo faria, isso deve fornecer uma boa indicação.

R Thiede
fonte
+1 no artigo vinculado, mas as informações importantes estão fora do local e serão perdidas para nós se essa página cair ou se mover. Sugiro que você faça uma conclusão resumida do artigo para que, no caso de a página não estar disponível, mesmo que momentaneamente, os leitores tenham algo com que trabalhar para futuras pesquisas e pensamentos. Obrigado!
mate Wilkie
Justo! Parece que o Packbits oferece os melhores tempos de acesso (em detrimento do espaço em disco), enquanto o Deflate fornece tempos de acesso intermediários / lentos para arquivos intermediários / pequenos. Além disso, você pode testar os tempos de acesso de maneira mais empírica, criando miniaturas de vários tamanhos e cronometrando quanto tempo leva. Exemplo de comando: "time gdal_translate -outsize <dimensões em miniatura> -of GTiff <arquivo de imagem compactado> <arquivo em miniatura>"
R Thiede
1
obrigado! Dobrei o resumo na própria resposta, para que fique mais independente (consulte o link de edição no canto inferior esquerdo de cada resposta / pergunta).
214117 #
A @RThiede tinha uma preocupação válida: parece agora que o link para o blog não é mais válido?
Matifou
@RThiede Seu link está morto, você pode fornecer um novo?
Majid Hojati
6

Para operações de leitura / gravação , você pode testar a velocidade dessas operações usando system.time (). Aqui estão alguns resultados do carregamento de um arquivo DEM no R (pacote Raster) traduzido em quatro formatos (ASCII, IMG e TIF sem compactação e deflação). Por exemplo, em uma varredura de ~ 26 MB:

> system.time(dem <- raster("~/workspace/TEMP/kideporegion.img"))
 user  system elapsed 
 0.154   0.002   0.157 

'Decorrido' fornece o tempo total (segundos) necessário para a operação. Executando as operações 10 vezes cada e observando o tempo médio decorrido:

              mean   diff
ASC         0.2237 0.3317
IMG         0.1544 0.0318
tif-Deflate 0.1510 0.0099
tif-none    0.1495 0.0000
tif-pack    0.1513 0.0118

TIFF sem compressão é o mais rápido ... seguido de perto por Deflate (0,1% mais lento) e TIFF-Packbits (1,8% mais lento), depois IMG (3,2% mais lento) e ASC (33% mais lento). (Este é um MacBook Pro de 2,4 GHz com um SSD, operações de disco tão rápidas)

Isso é simplesmente carregar os arquivos, não manipulá-los.

Simbamangu
fonte
4

Talvez não seja realmente uma questão de qual formato de imagem raster tenha melhores benchmarks de abertura - em vez de quais formatos de imagem raster são os formatos de fonte raster mais eficientes para abrir e ler como entrada em um array numérico R. E posteriormente - qual é o formato de saída mais eficiente de R, assumindo que você retornaria os resultados de volta à varredura.

De qualquer forma, se você estiver trabalhando com raster no R, provavelmente usará os pacotes rgdal e R ncdf para complementar o conteúdo do pacote raster . Com confiança principal no comando gdalwarp . Precisa resolver as dependências de formato para fazer sua escolha de varredura. Você encontrará uma boa cobertura sobre SO e vários fóruns / blogs / wiki do OSGEO e R.

Mas como este é um fórum GIS em que o uso do Python está em ascensão relativa, observarei que há vantagens em trabalhar com dados de varredura em uma matriz numpy do Python, com dependência semelhante das bibliotecas gdal para carregamento, conversão e exportação de varredura. Algumas pessoas acham o gerenciamento de memória e a estrutura de código no Python preferíveis ao R nativo - talvez dê uma olhada no RPy2 ou no PypeR, pois elas podem ser apropriadas para o uso da sua análise.

V Stuart Foote
fonte
Para manipular dados netCDF (fonte rasterizada ou não) em R, aqui estão os links para dois pacotes netCDF hospedados pelo R CRAN, ncdf4 - cran.r-project.org/web/packages/ncdf4/index.html e RNetCDF - cran. r-project.org/web/packages/RNetCDF/index.html
V Stuart Foote
4

Uma grande questão é se você vai ler a varredura inteira do arquivo na memória antes de processá-lo ou se o arquivo é tão grande que você o processará de forma incremental ou algum subconjunto do arquivo geral.

Se você carregar tudo na memória, estará fazendo o acesso principalmente seqüencial, e o formato mais rápido será um lance entre armazenamento simples e compactado (dependendo de quão rápido sua CPU é versus disco). Qualquer um dos formatos de arquivos binários provavelmente estará bem próximo (o ASCII será mais lento).

Se você precisar processar um subconjunto de um arquivo muito grande, um formato que agrupe o subconjunto que você deseja se aproximar poderá ser mais rápido - por exemplo: blocos ou um formato que possa calcular compensações. Às vezes, abordagens não compactadas ganham aqui porque pode ser trivial calcular onde reside uma parte da imagem no arquivo, especialmente se você precisar de apenas parte de uma linha muito grande, mas a compactação pode ser feita de maneira granular que funciona bem para alguns padrões de acesso.

Desculpe, mas você provavelmente terá que fazer benchmarks, dependendo do seu padrão de acesso, em vez de obter um tamanho único. Obviamente, isso pode depender não apenas do formato do arquivo e dos fatores acima, mas também dos drivers desse formato e do seu software.

Zeph
fonte
2

A maneira como você pensa sobre esses tipos de problemas é em termos de como seu aplicativo acessa seu arquivo, e de como os dados são dispostos em seu arquivo. A idéia é que, se você puder acessar seus dados sequencialmente, eles serão muito mais eficientes do que se você os acessasse aleatoriamente.

GeoTIFF é uma coleção de "imagens" ou matrizes 2D. O NetCDF é um armazenamento de uso geral para matrizes multidimensionais. Mas se você armazenar as matrizes da mesma maneira no netCDF e no GeoTIFF, obterá o mesmo desempenho, mais ou menos.

Também é possível reorganizar os dados no netCDF, portanto, em princípio, você pode otimizar seus padrões de leitura. Meu palpite é que a maioria dos aplicativos GIS é otimizada para o layout GeoTIFF 2D, portanto, não há muito a ganhar com a reorganização.

Finalmente, eu diria que realmente importa apenas quando você tem arquivos muito grandes, pelo menos dezenas de megabytes.

John Caron
fonte
+1 para o ponto em que o acesso aleatório ou leitura de local arbitrário é muito diferente de um seqüencial após o outro até que todo o arquivo seja lido. Posso estar fora da base, mas acho que o Geotiff também suporta armazenamento lado a lado e acesso arbitrário, é apenas que por faixa / linha é o mais comum e amplamente suportado. Hoje em dia, "arquivos muito grandes" no GIS tendem a estar na faixa de vários GB. ;-) #
7898 matt wilkie
2

Li algumas páginas sobre isso há vários anos e, desde então, usei tiff com compressão de bits de bloco, ladrilhado com um cabeçalho geotiff e fiquei feliz.

artigo da equipe arcpad

wiki

Mas depois de ler o seguinte, vou reconsiderar e talvez usar a variedade de esvaziamento.

Site do Arcpad

Brad Nesom
fonte
2

Muitos pacotes usam GDAL por baixo do capô, por exemplo, rgdal, QGIS, GRASS, etc. Se eu estivesse usando um desses pacotes, pensaria em converter minhas imagens em vrt. Frequentemente, é recomendável que, quando você precisar usar dois comandos GDAL, o arquivo intermediário seja um arquivo vrt porque a sobrecarga de leitura é mínima (por exemplo, http://www.perrygeo.com/lazy-raster-processing -with-gdal-vrts.html ). Parece que seu fluxo de trabalho é: converta uma vez e leia várias vezes. Talvez o vrt seja apropriado.

[Editar: link ajustado]

user55937
fonte