অজগর ফাঁকা বহুভুজ তৈরি করতে জিডিএল বহুভুক্ত?


12

পাইথনে বহুভুক্ত ফাংশনটি ব্যবহার করতে আমার সমস্যা হচ্ছে trouble এর জন্য কুকবুক উদাহরণটি এখানে পাওয়া যাবে

আমার কোডের প্রাসঙ্গিক অংশটি হ'ল:

sourceRaster = gdal.Open('myraster.tif')
band = sourceRaster.GetRasterBand(1)
bandArray = band.ReadAsArray()
outShapefile = "polygonized"
driver = ogr.GetDriverByName("ESRI Shapefile")
if os.path.exists(outShapefile+".shp"):
    driver.DeleteDataSource(outShapefile+".shp")
outDatasource = driver.CreateDataSource(outShapefile+ ".shp")
outLayer = outDatasource.CreateLayer("polygonized", srs=None)
gdal.Polygonize( band, None, outLayer, -1, [], callback=None )
outDatasource.Destroy()
sourceRaster = None

আমি জানি যে ব্যান্ডটির প্রাসঙ্গিক তথ্য রয়েছে, এটির একটি স্নিপেট এখানে bandArray:

array([[ 4.,  4.,  3.,  3.,  3.,  2.,  2.,  2.,  2.,  3.,  3.,  3.,  3.,
         3.,  3.,  3.,  3.,  4.,  4.,  4.,  4.,  4.,  4.,  4.,  4.,  4.,
         4.,  4.,  4.,  4.],

আমি যখন QGIS এ বিশিষ্ট টেবিলটি খুলি, এটি খালি থাকে: কিউজিআইএস স্ক্রিনক্যাপচার

সম্পাদনা:

রূপান্তরটি রাস্টার -> রূপান্তর -> বহুভুক্ত সরঞ্জাম ব্যবহার করে কিউজিআইএস-এ ঠিক কাজ করে fine

বহুভুক্ত করার জন্য রাস্টার স্ক্রিনশট:

বহুভুক্ত করতে রাস্টার

এবং কিউজিআইএস সরঞ্জাম থেকে ফলাফল রূপান্তরকরণের স্ক্রিনশট:

কিউজিআইএস সরঞ্জাম থেকে বহুভুক্ত রাস্টার

আমি উইন্ডোজ,, জিডিএল সংস্করণ ১.১০.০-৩ এ এনটচেট ডিস্ট্রো ব্যবহার করছি

সমস্যাটি হ'ল আমি জিডিএল এবং কুকবুক উদাহরণ ব্যবহার করে অজগরটিতে একটি রাস্টারকে বহুভুক্ত করতে পারি না, আমি কিউজিআইএস জিইউতে কোনও সমস্যা ছাড়াই এই একই রাস্টারকে বহুভুক্ত করতে পারি


আপনার রাস্টার দেখতে কেমন? এটিতে কি বহুভুজ রয়েছে? আপনি যদি এর পরিবর্তে gdal_polygonize.py ব্যবহার করেন তবে এটি কাজ করে?
ব্র্যাডহার্ডস

কিউজিআইএস
ক্যামডেনল

এখানে আসল সমস্যাটা কী?
ফেজার

নির্দিষ্ট সমস্যা যুক্ত হয়েছে
ক্যামডেনল

3
আমার অনুরূপ সমস্যা ছিল (ফাঁকা শেফফিল তৈরি হচ্ছে), এবং ক্ষেত্র তৈরি করে কোনও লাভ হয়নি। আমি যেটা ভুল করছিলাম তা হ'ল বহুভুজ বলার আগে আমি নিজের কোডে শেফফাইলটি বন্ধ করেছিলাম না। আপনি আপনার উদাহরণে এটি বন্ধ করুন, আমি কেবল অন্যের রেফারেন্সের জন্য এটি পোস্ট করছি।
স্টেফানি 21

উত্তর:


19

সমস্যাটি হ'ল আমি রাস্টার ব্যান্ডটি সঞ্চয় করার জন্য কোনও ক্ষেত্র তৈরি করছিলাম না। Gdal_polygonize.py ফাইলটি খননের পরে, আমি বুঝতে পেরেছি যে gdal.Polygonize কল করার সময় এটি স্বয়ংক্রিয়ভাবে করা হয় না, যা পরিবর্তে এখানে পাওয়া ফাংশনটি ব্যবহার করে ।

ক্ষেত্র তৈরি করতে এবং ফিল্ডটিতে একটি ব্যান্ড লিখতে এখানে অতিরিক্ত পদক্ষেপের প্রয়োজন রয়েছে:

newField = ogr.FieldDefn('MYFLD', ogr.OFTInteger)
outLayer.CreateField(newField)

তারপরে আমরা 0 টি সূচক সহ এই ক্ষেত্রটিতে ব্যান্ডটি লিখতে পারি:

gdal.Polygonize(band, None, outLayer, 0, [], callback=None )

অজগরটিতে আমার রেস্টারটিকে বহুভুজ হিসাবে পাওয়ার জন্য আমি gdal.Polygonize () ফাংশনটিও ব্যবহার করার চেষ্টা করছি। তবে শেষ লাইনে এটি রানটাইম ত্রুটি দেখাচ্ছে! কেন?
শিউলি পারভীন

এটি জিওরিফারেন্সযুক্ত রাস্টার ফাইলগুলির সাথে ভাল কাজ করে। ফলাফলটি অনেকগুলি বহুভুজ, তবে আমি কেবল একটি বড় বহুভুজ চাই যা রাস্টারের বাহ্যরেখা দেখায়। এটি একই সাথে কীভাবে কাজ করে তার কারও কি ধারণা আছে?
শিউলি পারভীন

তবুও আমি খালি শেফফাইল পাচ্ছি, তবে আমার ডিবিএফ ফাইলে সারি রয়েছে। আমাকে সাফ করুন!
সত্য চন্দ্র

আমার কেবল এই সমস্যাটি ছিল তবে একটি ডামি ক্ষেত্র যুক্ত করার পরিবর্তে, আপনি -1 এর সূচি প্রবেশ করতে পারেন। দেখুন এখানে যে ক্ষেত্র শুধুমাত্র যদি সূচক> = 0 যোগ করা হয়।
jon_two
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.