GDAL kullanarak raster veri setinden 'döşenmiş bir görüntü' nasıl kesilir?


22

Belirli bir raster veri kümesinden fayans (jpeg) oluşturması gereken bir uygulama üzerinde çalışıyorum. İlk eğilimim gdal2tiles.py kullanmaktı, ancak performansı geliştirilebilir gibi görünüyordu.

Bu bana şu soruyu sormamı sağladı: GDAL kullanarak raster veri setinden 'kiremitli bir görüntüyü kesmenin en hızlı yolu ne olurdu? Ve 'kiremitli görüntü' ile, sadece basit bir jpeg veya png demek istiyorum.

Prototipimde, işi yapmak için MapServer C # MapScript ciltlemelerini kullanıyorum. Başka bir deyişle, bir harita nesnesi oluşturuyorum, kesmem gereken tüm döşeme sınırlarını geçiyorum, harita nesnelerini ölçtüm ve sonra ortaya çıkan resmi kaydediyorum. Bu yaklaşımın performansı gdal2tiles.py'den çok daha iyidir, ancak daha hızlı hale getiremezsem doğrudan GDAL kullanıp kullanmadığımı merak ediyorum. GDAL yöntemleriyle benzer bir iş akışı öneren var mı?

EDIT: Bugün biraz daha araştırmadan sonra, cevabı tam önümde buldum. FWTools'u indirdiyseniz, csharp \ apps klasörleri, C # GDAL bağlamalarını göstermek için birkaç sınıf içerir. Benim durumumda GDALRead.cs ve GDALReadDirect.cs aradığım şeydi.


2
@vadp, @markusn, @mapperz ve diğer herkes - lütfen açıklayıcı olun. Bağlantıya ek olarak, bu aracın niçin bakılmaya değer olduğunu düşündüğünüze ve diğerlerinden neyin farklı olduğuna yardımcı olacak bir cümle. Cevabın gelecekte olduğu gibi gelecekte de yararlı olmasını istiyoruz. Er ya da geç link-rot grev yapar ve elimizdeki tek şey url ise, bir sonraki projenin nerede durduğunu bulmak zordur.
matt wilkie

4
Merhaba user890, son çözümünüzü soruya gönderir ve kapalı olarak işaretler misiniz? Bu durumda, dile özgü bağları kullanmak size ihtiyacınız olan performansı vermiş gibi geliyor.
scw

Kendi yazıma yorum ekleyemiyorum :( Ama gdal_tiler.py ayrıca çoklu işlemeyi de destekliyor, ancak çok kaba bir şekilde: 'n' kaynaklarını aynı anda işlemektedir. Bununla birlikte bazı olumlu etkiler yaratır :)
Vadim

Yanıtlar:




1

Şirketimde gdal_warp kullanarak (gdal2tiles'in var olduğunu bilmeden önceydi) özel python scriptleri yazdık. G2T'den daha hızlıydı, esasında pek çok çekirdeği (python threadpool kullanarak) çalıştırmak için yazdık. Ayrıca daha kaliteli fayanslar üretti (g2t'de lanczos enterpolasyonu gdal_warp'taki fayanslar şaşırtıcıydı) kötü çalışıyor gibi görünüyor.

Senaryoları yazmak için biraz çaba sarf etmek gerekiyor, sonuçtaki sınırlama kutularını manuel olarak hesaplamanız, projeksiyonlar için bazı seçenekler ayarlamanız gerekiyor.



0

Başka bir seçenek de TileCache (WMS-C) kullanıyor. Hiçbir zaman gdal2tiles kullanmamama rağmen, TileCache'in daha yüksek performans getireceğini beklemem.

Neyse, aşağıdaki stratejiler fayansı hızlandırabilir:

  • TileCache kullanıyorsanız Metatiling (gdal2tiles'ın benzer bir özelliği olup olmadığını merak ediyorum).
  • Tarama verilerinin büyük bir ortophoto olması durumunda, ECW gibi bir format kullanın . Bu format kısmi açma özelliğine sahip olduğundan , bu formatı kullanarak önemli bir performans kazancı elde edebilirsiniz.

0

http://code.google.com/p/tilers-tools adresinden gdal_tiler.py betiği yararlı bir seçenek olabilir.

Genellikle, gdal2tiles.py ile karşılaştırıldığında çok iyi performans gösterir ve herhangi bir GDAL kaynağı (veri kümesi) ile çalışması gerekir, özellikle bir kaynak veri kümesinin RGB'ye dönüştürülmesini gerektirmez.


-1

Gdal2tiles_parallel https://gitlab.com/GitLabRGI/erdc/geopackage-python Eğer geopackage veya MBTILES ise doğal olarak gdal_translate.EXE ile yapılan bir python gerekmez. Birden fazla yakınlaştırma düzeyi eklemek için gdaladdo kullanmanız da gerekir. Ayrıca qgis masaüstü için qtiles / qmetatiles kullanıyorum. Hala hiçbir şey maptiler pro ticari yazılımı ile rekabet edemez. Eğer fayans klasörüne ihtiyacınız varsa MBTILES'i TMS OR XYZ'e mbUtil python ile dönüştürün.


Bağlantı artık çalışmıyor
AndrewHarvey

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.