GDAL का उपयोग करके मौजूदा GeoTiff में बैंड जोड़ना?


15

ऐसा लगता है कि यह सीधा होना चाहिए, लेकिन मैं अपने जीवन के लिए इसे समझ नहीं सकता।

किसी एकल बैंड वाले मौजूदा जियो टिफ़ को देखते हुए, आप उस जियो टिफ़ में एक और बैंड कैसे जोड़ सकते हैं? GDALCreate () का उपयोग करने के लिए एक अतिरिक्त बैंड के साथ एक नई आउटपुट फ़ाइल बनाने और फिर मूल फ़ाइल से नई फ़ाइल में मौजूदा बैंड की प्रतिलिपि बनाने का एकमात्र तरीका है? यही एकमात्र उपाय है जो मैंने अभी तक किया है, लेकिन ऐसा लगता है कि मौजूदा डेटासेट में एक बैंड जोड़ने का एक सरल तरीका होना चाहिए।


हाय @TheOx, मैं एक ही समस्या है। मैं LDCM सिंगल बैंड के बैंड 2,3,4 से एक कंपोजिट इमेज कलर बनाना चाहता हूं। क्या आपके पास अभी तक आपके प्रश्न का हल है?
जैकी

1
@ जैकी ने काइल की टिप्पणी को देखने के लिए vrt ड्राइवर का उपयोग करने के बारे में स्वीकार किए गए उत्तर में एक प्रतिलिपि बनाने, एक बैंड जोड़ने, और फिर जियोटीफ़ ड्राइवर के साथ एक जियोटीफ़ में उस बैक की प्रतिलिपि बनाएँ।
TheOx

जवाबों:


8

समाधान, यदि ड्राइवर इसे छोड़ देता है, तो GDALOpen () को GA_Update एक्सेस के साथ कॉल करना है तो GDALAddBand या GDALDataset :: AddBand का उपयोग करें । हालाँकि, जियोटीफ़ ड्राइवर AddBand का समर्थन नहीं करता है।


2
बहुत कम ड्राइवर बैंड जोड़ने का समर्थन करते हैं, मुझे विश्वास नहीं है कि जियोटीफ़ ड्राइवर करता है। केवल एक ही मुझे पता है कि यह समर्थन करता है vrt।

खैर @kyle सही है - जियोटीफ़ ड्राइवर AddBand का समर्थन नहीं करता है, लेकिन इस उत्तर में विधि सही है यदि चालक इसका समर्थन करता है और मैं जो देख रहा था वह मुझे स्वीकार है।
TheOx

रवींद्र! उस छोटे से विस्तार के बारे में भूल गए। @ मुझे नहीं लगता कि आपको मेरा उत्तर स्वीकार करना चाहिए क्योंकि यह सही नहीं है। मूल प्रश्न जो विशेष रूप से जियोटीफ़ से संबंधित है।
user2856

@ ल्यूक: अपने उत्तर को यह निर्दिष्ट करने के लिए संपादित करें कि सामान्य समाधान अगर ड्राइवर इसका समर्थन करता है और मैं इसे स्वीकार करूंगा। मेरे मूल प्रश्न में विधि के लघु विधि के लिए ऐसा करने का कोई अन्य तरीका प्रतीत नहीं होता है।
TheOx

1
Vrt ड्राइवर, CreateCopy (), AddBand (), CreateCopy () Geotiff ड्राइवर के साथ उपयोग करें।

8

ल्यूक के उत्तर पर विस्तार करने और पायथन में एक ठोस उदाहरण प्रदान करने के लिए, यहां एक स्निपेट है जो एक अल्फा बैंड को एक स्रोत रेखापुंज में जोड़ता है और इसे पीएनजी के रूप में बचाता है।

from osgeo import gdal

src_ds = gdal.OpenShared(input_path)
mask_ds = gdal.OpenShared(mask_path)
mask = mask_ds.GetRasterBand(1).ReadAsArray()

tmp_ds = gdal.GetDriverByName('MEM').CreateCopy('', src_ds, 0)
tmp_ds.AddBand()
tmp_ds.GetRasterBand(4).WriteArray(mask)

dst_ds = gdal.GetDriverByName('PNG').CreateCopy(output_path, tmp_ds, 0)
del dst_ds

मैं MEMड्राइवर का उपयोग VRTकरता था क्योंकि बाद वाला समर्थन नहीं करता है WriteRaster()और WriteArray()(त्रुटि "VRTSourcedRasterBand के माध्यम से लेखन समर्थित नहीं है।")। Vrt ड्राइवर का उपयोग करना कुछ अन्य तरीकों के माध्यम से अभी भी संभव हो सकता है, मुझे लगता है।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.