Verilen iki tarama katmanının aynı içeriğe sahip olup olmadığını kontrol etmenin bir yolu var mı?
Kurumsal paylaşılan depolama hacmimizle ilgili bir sorunumuz var: Şimdi tam bir yedekleme yapmak 3 günden fazla sürüyor. Ön araştırma, alan tüketen en büyük suçlulardan birinin CCITT sıkıştırmasıyla gerçekten 1 bit katmanlar olarak depolanması gereken açma / kapama rasterleri olduğunu ortaya koyuyor.
Bu örnek görüntü şu anda 2 bit (3 olası değer) ve dosya sisteminde 11 MB, LZW sıkıştırılmış tiff olarak kaydedildi. 1bit'e dönüştürdükten (2 olası değer) ve CCITT Group 4 sıkıştırmasını uyguladıktan sonra, neredeyse tam bir büyüklükte bir tasarruf sırası olan 1,3 MB'ye indiriyoruz.
(Bu aslında çok iyi davranmış bir vatandaş, 32bit float olarak saklanan başkaları var!)
Bu harika bir haber! Ancak bunu uygulamak için neredeyse 7.000 görüntü var. Bunları sıkıştırmak için bir komut dosyası yazmak basittir:
for old_img in [list of images]:
convert_to_1bit_and_compress(old_img)
remove(old_img)
replace_with_new(old_img, new_img)
... ancak hayati bir test eksik: Yeni sıkıştırılmış sürüm içerikle aynı mı?
if raster_diff(old_img, new_img) == "Identical":
remove(old_img)
rename(new_img, old_img)
Görüntü-A'nın içeriğinin Görüntü-B içeriğiyle otomatik olarak aynı olduğunu (dis) kanıtlayabilen bir araç veya yöntem var mı?
ArcGIS 10.2 ve QGIS'e erişimim var, ancak üzerine yazmadan önce doğruluğu sağlamak için tüm bu görüntüleri manuel olarak inceleme ihtiyacını ortadan kaldırabilecek başka birçok şeye de açığım. Bu yanlışlıkla dönüştürün korkunç olabilir ve gerçekten bir görüntü üzerine yazılacağı vermedi o değerlere kapalı fazla / 'üzerinde daha var. Çoğu toplanması ve üretilmesi binlerce dolara mal oluyor.
güncelleme: En büyük suçlular bir tarafa 100.000 piksel kadar 32bit yüzer, bu yüzden ~ 30GB sıkıştırılmamış.
NoData
, konuşmada uygun kullanımın kalmasını sağladığınız için teşekkür ederiz .
len(numpy.unique(yourraster)) == 2
, 2 benzersiz değere sahip olduğunu biliyorsunuz ve bunu güvenle yapabilirsiniz.
numpy.unique
, farkın sabit olup olmadığını kontrol etmenin diğer birçok yolundan daha fazla (hem zaman hem de alan açısından) daha pahalı olacaktır. Birçok farklılık gösteren (bir orijinali kayıplı sıkıştırılmış bir versiyonla karşılaştırmak gibi) iki çok büyük kayan nokta raster arasında bir farkla karşılaştığında, büyük olasılıkla sonsuza kadar aşağı inecek veya tamamen başarısız olacaktır.
gdalcompare.py
büyük bir vaat gösterdi ( cevaba bakın )
raster_diff(old_img, new_img) == "Identical"
, farkın mutlak değerinin bölgesel maksimum değerinin 0'a eşit olup olmadığını kontrol etmek olacaktır, burada bölge tüm ızgara kapsamı boyunca alınır. Bu aradığınız bir çözüm yolu mu? (Öyleyse, herhangi bir NoData değerinin de tutarlı olup olmadığını kontrol etmek için rafine edilmesi gerekir.)