Çeşitli raster veri formatlarının hızı


25

Herhangi bir tartışmayı veya farklı raster dosya formatlarının karşılaştırmalı kıyaslamalarını bulmakta sorun yaşıyorum (örneğin, R'deki veri analizinde kullanım için). Belirli formatların neden daha hızlı veya daha yavaş olabileceği konusunda herhangi bir fikri olan var mı? Yoksa farklar az mı olmalı?

Özellikle, bir rasterin (örneğin, bir GEOTIFF dosyasını) farklı bir formata (örneğin, bir netCDF'ye) dönüştürmenin okuma / yazma ve diğer işlemleri hızlandırmak için faydalı olacağı konusunda ilgileniyorum.


2
Bu soru GIS ile ilgilidir, ancak R uzmanlarının güçlü bir alt topluluğu olan SO ile ilgili yanıtlar alma ihtimaliniz daha fazladır. Hızlı bir şekilde cevap alamazsanız, lütfen bu soruyu işaretleyin, bir moderatör sizin için taşıyacak.
whuber

Yanıtlar:


9

İşte benim dosya boyutuna ve biçimlerin erişim zamanına bakarak eski bir blog makalem. Yazma hızını, sadece erişim zamanını araştırmadım. Muhtemelen doğrudan ilişki kuracaklarını ancak bunun için kefil olamayacaklarını söyleyebilirim.

Makale Özeti: Görünüşe göre, Packbits size en iyi erişim zamanlarını veriyor (disk alanı pahasına), Deflate size ara / küçük dosyalar için ara / yavaş erişim zamanları veriyor. Ayrıca, çeşitli boyutlarda minik resimler oluşturarak ve ne kadar sürdüğünü zamanlayarak erişim zamanlarını daha ampirik olarak test edebilirsiniz. Örnek komut:time gdal_translate -outsize <thumbnail dimensions> -of GTiff <compressed image file> <thumbnail file>

Bu durumda, R ile ilgili tek şeyin dosyadan verileri ne kadar çabuk okuyabildiğini varsayarsak, diğer herhangi bir işlem gibi, o zaman bu size iyi bir gösterge vermelidir.


Bağlantılı makale için +1, ancak önemli bilgi saha dışına çıkmıştır ve bu sayfa hiç aşağı inerse veya taşınırsa bize kaybolacaktır. Makalenin bir özet sonucunu vermenizi öneririm, bu durumda sayfanın mevcut olmaması durumunda bile, anlık olarak, okuyucuların gelecekteki araştırma ve düşünce için birlikte çalışacakları bir şey olacak. Teşekkürler!
matt wilkie

Yeterince adil! Packbits size en iyi erişim zamanlarını veriyor (disk alanı pahasına), Deflate size orta / küçük dosyalar için ara / yavaş erişim zamanları veriyor. Ayrıca, çeşitli boyutlarda minik resimler oluşturarak ve ne kadar sürdüğünü zamanlayarak erişim zamanlarını daha ampirik olarak test edebilirsiniz. Örnek komut: "time gdal_translate -outsize <thumbnail boyutlari> -GTiff <sıkıştırılmış resim dosyası> <thumbnail dosyası>"
R Thiede

1
Teşekkürler! Özeti, cevabın içine ekledim, bu yüzden kendi kendine yeten yer alıyor (her yanıt / sorunun sol alt köşesindeki düzenleme bağlantısına bakın).
matt wilkie 7:11

@RThiede'nin geçerli bir endişesi vardı: blog bağlantısı artık geçerli değil gibi görünüyor.
Matifou

@RThiede Bağlantınız öldü Yenisini verebilir misiniz?
Majid Hojati

6

İçin okuma / yazma operasyonları, sen system.time kullanarak bu operasyonların hızını test edebilirsiniz (). Burada, bir DEM dosyasını R'ye (Raster paketi) dört formata (ASCII, IMG ve TIF sıkıştırmasız ve Deflate olmadan) yüklemenin bazı sonuçları verilmiştir. Örneğin, ~ 26 MB'lık bir rasterde:

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

'Geçen' işlem için geçen toplam süreyi (saniye) verir. Operasyonları her biri 10 defa yapmak ve geçen süreyi incelemek:

              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

Sıkıştırmasız TIFF en hızlıdır ... ardından Deflate (% 0.1 yavaş) ve TIFF-Packbits (% 1.8 yavaş), sonra IMG (% 3.2 yavaş) ve ASC (% 33 yavaş) ile yakından takip edilir. (Bu, SSD'li Macbook Pro 2.4 GHz’de, çok hızlı disk işlemlerinde)

Bu sadece dosyaları yüklemek, üzerinde değişiklik yapmak değildir.


4

Belki de bu, hangi raster resim formatının daha iyi açılış karşılaştırma ölçütlerine sahip olduğu meselesi değildir - bunun yerine hangi raster resim formatlarının R sayısal bir dizinin giriş olarak açılması ve okunması için en verimli raster kaynak formatları olduğu sorusu değildir. Ve sonra - sonuçları rasterine göndereceğinizi varsayarak, R'nin en verimli çıktı biçimi hangisidir.

Her iki durumda da, R raster ile çalışacaksanız , R raster paketinde bulunanları desteklemek için rgdal ve R ncdf paketlerini kullanacaksınız . Gdalwarp komutuna asıl güven ile . Raster seçiminizi yapabilmeniz için format bağımlılıkları üzerinde çalışmanız gerekiyor. SO ve çeşitli OSGEO ve R forumları / blogları / wiki ile ilgili oldukça kapsamlı bir içerik bulacaksınız.

Ancak bu, Python kullanımının göreceli olarak arttığı bir GIS forumu olduğu için, bir Python numpy dizisindeki raster verilerle çalışmanın, raster yükleme, dönüştürme ve dışa aktarma için gdal kitaplıklarına benzer bağımlılıklara sahip olmasının avantajları olduğunu not edeceğim. Bazı insanlar Python'da yerel R'ye göre tercih edilen bellek yönetimi ve kod yapısını bulur - belki de analiz kullanımınıza uygun olabileceği için RPy2 veya PypeR'a bir göz atın .


R'deki netCDF verilerini (raster kaynağı veya başka bir şekilde) değiştirmek için, burada iki R CRAN barındırılan netCDF paketine, ncdf4 - cran.r-project.org/web/packages/ncdf4/index.html ve RNetCDF - cran'e bağlantı verilmiştir . r-project.org/web/packages/RNetCDF/index.html
V Stuart Foote

4

Büyük bir soru, işlemden önce tüm raster dosyasını dosyadan belleğe mi okuyacağınız veya dosyanın o kadar büyük olup olmadığını aşamalı olarak mı işleyeceğiniz veya genel dosyanın bir alt kümesini mi işlemeniz gerektiğidir.

Hepsini hafızaya yüklerseniz, çoğunlukla sıralı erişim yapıyor olacaksınız ve en hızlı format, düz ve sıkıştırılmış depolama arasında (CPU'nuzun diske karşı ne kadar hızlı olduğuna bağlı olarak) değişebilir. İkili dosya formatlarından herhangi biri muhtemelen oldukça yakın olacaktır (ASCII, daha yavaş olacaktır).

Çok büyük bir dosyanın bir alt kümesini işlemeniz gerekirse, istediğiniz alt kümeyi birbirine daha yakın gruplayan bir format daha hızlı olabilir - örneğin: fayanslar veya ofsetleri hesaplayabilen bir format. Bazen sıkıştırılmamış yaklaşımlar burada kazanır, çünkü görüntünün herhangi bir kısmının dosyada nerede olduğunu hesaplamak önemsiz olabilir, özellikle de çok büyük bir satırın yalnızca bir kısmına ihtiyaç duyuyorsanız, ancak sıkıştırma işlemi bazı durumlarda iyi sonuç veren ayrıntılı bir şekilde yapılabilir erişim düzenleri.

Üzgünüz, ancak muhtemelen herkese uyan tek beden almak yerine erişim düzeninize bağlı olarak kıyaslama yapmak zorunda kalacaksınız. Elbette sadece dosya formatına ve yukarıdaki faktörlere değil, bu formatın ve yazılımınızın sürücülerine de bağlı olabilir.


2

Bu tür sorunlar hakkında düşünme şekliniz, uygulamanızın dosyaya nasıl eriştiği, verilerinizin dosyada nasıl düzenlendiği ile ilgilidir. Fikir şu ki, verilerinize sırayla erişebiliyorsanız, rastgele erişmektense çok daha etkili olacaktır.

GeoTIFF, 2D "görüntüler" veya dizilerden oluşan bir koleksiyondur. NetCDF, çok boyutlu diziler için genel amaçlı bir depolama alanıdır. Fakat, dizileri netCDF'de GeoTIFF'dekiyle aynı şekilde saklarsanız, aynı performansı daha fazla veya daha az elde edersiniz.

Biri netCDF'deki verileri de yeniden düzenleyebilir, böylece prensip olarak okuma düzenleriniz için en uygun hale getirilebilir. Tahminim, çoğu CBS uygulamasının GeoTIFF 2D yerleşimi için optimize edilmiş olmasıdır, dolayısıyla yeniden düzenleyerek kazanacak çok fazla şey yoktur.

Son olarak, Id, bunun gerçekten çok büyük dosyalarınız olduğunda, en azından onlarca megabayt olduğunda önemli olduğunu söylüyor.


Rastgele erişimin veya rastgele lokasyonun okunduğu nokta için +1, tüm dosya okunana kadar art arda sıralı olandan çok farklıdır. Tabanlı olabilirim, ama Geotiff'in aynı zamanda fayans depolama ve keyfi erişimi de desteklediğini düşünüyorum, sadece strip / satır ile en yaygın ve yaygın olarak destekleniyor. Ayrıca bu günlerde GIS’de “çok büyük dosyalar” çoklu GB aralığında olma eğilimindedir. ;-)
matt wilkie

2

Birkaç yıl önce bununla ilgili birkaç sayfa okudum ve o zamandan beri paket sıkıştırması için tiff kullandım, geotiff başlığıyla döşenmiş ve mutlu oldum.

arcpad takımı makalesi

wiki

Ancak aşağıdakileri okuduktan sonra tekrar gözden geçireceğim ve belki de söndürme çeşitlerini kullanacağım.

Arcpad sitesi


2

Pek çok paket, başlık altında GDAL kullanır, örneğin, rgdal, QGIS, GRASS, vb. Bu paketlerden birini kullanıyor olsaydım, görüntülerimı vrt'ye dönüştürmeyi düşünürdüm. İki GDAL komutunu kullanmanız gerektiğinde, ara dosya bir vrt dosyası olmalıdır, çünkü okuma ek yükü minimumdur (örneğin, http://www.perrygeo.com/lazy-raster-processing) -gdal-vrts.html ile ). İş akışınız şeye benziyor: bir kez dönüştürün ve birçok kez okuyun. Belki vrt uygun olur.

[Düzenle: bağlantı ayarlandı]

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.