পাইথন, জিডিএল এবং বিল্ডিং রাস্টার বৈশিষ্ট্য সারণী


14

আমার একটি পূর্ণসংখ্যার রাস্টার রয়েছে যার জন্য আমি পাইথন এবং জিডিএল ব্যবহার করে একটি রাস্টার অ্যাট্রিবিউট টেবিল তৈরি করতে চাই। আমি পাইথনে একটি জিডিএল রাস্টার বৈশিষ্ট্য টেবিলটি তৈরি করতে পারি:

>>> 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]এটি theোকাতে চাই পূর্ণসংখ্যা মান। তবে এটি একটি ত্রুটি ঘটায়:

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)সূক্ষ্মভাবে কাজ করে তবে কলামটি পপুল করার জন্য অকার্যকর যদি আমি কেবল অনন্য মানগুলির তালিকাতে লুপ করতে চাই।

এটা কি একটা জানা ব্যাপার? গুগল এখনও পর্যন্ত খুব কার্যকর হয়নি। এই সমস্যাটি পেতে আমি কী করতে পারি?

উত্তর:


11

SetValueAsInt পদ্ধতি আশা করছে পাইথন int- এ টাইপ, না একটি numpy uint16 প্রকার।

>>> print type(vals[0])
<type 'numpy.uint16'>

নিম্নলিখিত কাজগুলি:

rat.SetValueAsInt(i, 0, int(vals[i]))

3

vals = numpy.unique(data).tolist()পরিবর্তে আপনি যদি এটি ব্যবহার করেন তবে এটি প্রতিটি মানকে অজস্র ইন্ট টাইপে রূপান্তর করবে।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.