मेरे पास एक पूर्णांक रेखापुंज है जिसके लिए मैं पायथन और GDAL का उपयोग करके एक रास्टर विशेषता तालिका बनाना चाहूंगा। मैं पायथन में एक GDAL रेखापुंज विशेषता तालिका बना सकता है:
>>> rat = gdal.RasterAttributeTable()
यह ठीक काम करता है, जैसा कि हम देख सकते हैं:
>>> rat
<osgeo.gdal.RasterAttributeTable; proxy of <Swig Object of type 'GDALRasterAttributeTableShadow *' at 0x0000000002A53D50> >
इस प्रकार बनाई गई तालिका में कोई पंक्तियाँ या स्तंभ नहीं हैं:
>>> rat.GetRowCount()
0
>>> rat.GetColumnCount()
0
मैं रैस्टर में अद्वितीय मानों को संग्रहीत करने के लिए "मान" नामक एक कॉलम बनाता हूं:
>>> rat.CreateColumn("Value", gdalconst.GFT_Integer, gdalconst.GFU_MinMax)
0
यह ठीक है, और स्तंभ गणना अपडेट की गई है:
>>> rat.GetColumnCount()
1
अब मुझे किसी भी उपयोग के लिए कॉलम में मान (रिकॉर्ड) जोड़ना होगा। मैं रैस्टर बैंड से अनूठे मूल्यों की सूची प्राप्त कर सकता हूं जैसे:
>>> data = band.ReadAsArray(0, 0, dataset.RasterXSize, dataset.RasterYSize)
>>> vals = list(numpy.unique(data))
>>> vals
[3, 7, 8, 10, 11, 12, 13, 14, 17, 18, 20, 22, 23, 25, 27, 28, 41, 45, 52, 56]
जो मैं करना चाहता हूं वह लूप के लिए लूप बनाने के लिए vals
और विशेषता तालिका में कॉलम को पॉप्युलेट करने के लिए है। मैंने सोचा कि मैं ऐसा कुछ कर सकता हूं:
>>> for i in range(len(vals)):
rat.SetValueAsInt(i, 0, vals[i])
... जहां i
पंक्ति (रिकॉर्ड) 0
है, फ़ील्ड इंडेक्स है और vals[i]
वह पूर्णांक मान है जिसे मैं सम्मिलित करना चाहता हूं। लेकिन यह एक त्रुटि का कारण बनता है:
Traceback (most recent call last):
File "<pyshell#32>", line 2, in <module>
rat.SetValueAsInt(i, 0, vals[i])
File "C:\Python27\lib\site-packages\osgeo\gdal.py", line 1139, in SetValueAsInt
return _gdal.RasterAttributeTable_SetValueAsInt(self, *args)
TypeError: in method 'RasterAttributeTable_SetValueAsInt', argument 4 of type 'int'
त्रुटि इसलिए होती है क्योंकि मैं सीधे पूर्णांक का उपयोग vals[i]
करने के SetValueAsInt()
बजाय कॉल में उपयोग करता हूं । उदाहरण के लिए, rat.SetValueAsInt(0, 0, 0)
ठीक काम करता है, लेकिन कॉलम को आबाद करने के लिए बेकार है अगर मैं सिर्फ अद्वितीय मूल्यों की सूची पर लूप करना चाहता हूं।
क्या यह जाना पहचाना हुआ मुद्दा है? Google अब तक बहुत उपयोगी नहीं है। इस समस्या के समाधान के लिए मैं क्या कर सकता हूं?