मैं GDAL के RasterizeLayer का उपयोग कर एक रेखापुंज को एक आकृति को जलाने की कोशिश कर रहा हूं। मैं एक अलग आकार-प्रकार से ब्याज रेखापुंज का एक क्षेत्र पूर्व-निर्मित करता हूं, एक विशिष्ट पिक्सेल आकार दिया जाता है। यह एओआई तब सभी निम्नलिखित रेखापुंजों के लिए एक आधार के रूप में कार्य करता है (समान संख्या में कॉलम और पंक्तियाँ, एक ही प्रक्षेपण और भू-आकृतियाँ)।
हालाँकि, समस्या तब होती है, जब मैं समान पिक्सेल आकार और अनुमानों के आधार पर, अपने स्वयं के रेखापुंज को आकृतियाँ जलाने जाता हूँ। नीचे दिए गए लिंक (छवि को पोस्ट करने के लिए पर्याप्त प्रतिनिधि नहीं है), तन में मूल शेपफाइल दिखाता है, और गहरे गुलाबी जहां रैस्टरलाइलेयर ने डेटा जला दिया है। हल्का गुलाबी, गहरे गुलाबी रेखापुंज डेटा के लिए नोडटा मान है। ग्रे AOI है जिसके आधार पर शेपफाइल बर्न पूरा किया गया था।
शेपफाइल पॉलीगॉन के विस्तार को देखते हुए, मैं नीचे दो कोनों में जले हुए मूल्यों को देखने की उम्मीद करूंगा, साथ ही जो डेटा दिखाता है उसके नीचे दो पिक्सल हैं। जाहिर है, हालांकि, यह मामला नहीं है।
इस प्रकार कोड है कि मैं इन उत्पन्न करने के लिए इस्तेमाल किया है। सभी आकार QGIS का उपयोग करके बनाए गए थे, और सभी एक ही प्रक्षेपण में बनाए गए थे। (यह ध्यान दिया जाना चाहिए कि दिखाए गए चित्र में ग्रिडिंग सिर्फ पिक्सेल आकार का उपयोग करने का एक विचार देने के लिए था।)
from osgeo import ogr
from osgeo import gdal
aoi_uri = 'AOI_Raster.tif'
aoi_raster = gdal.Open(aoi_uri)
def new_raster_from_base(base, outputURI, format, nodata, datatype):
cols = base.RasterXSize
rows = base.RasterYSize
projection = base.GetProjection()
geotransform = base.GetGeoTransform()
bands = base.RasterCount
driver = gdal.GetDriverByName(format)
new_raster = driver.Create(str(outputURI), cols, rows, bands, datatype)
new_raster.SetProjection(projection)
new_raster.SetGeoTransform(geotransform)
for i in range(bands):
new_raster.GetRasterBand(i + 1).SetNoDataValue(nodata)
new_raster.GetRasterBand(i + 1).Fill(nodata)
return new_raster
shape_uri = 'activity_3.shp'
shape_datasource = ogr.Open(shape_uri)
shape_layer = shape_datasource.GetLayer()
raster_out = 'new_raster.tif'
raster_dataset = new_raster_from_base(aoi_raster, raster_out, 'GTiff',
-1, gdal.GDT_Int32)
band = raster_dataset.GetRasterBand(1)
nodata = band.GetNoDataValue()
band.Fill(nodata)
gdal.RasterizeLayer(raster_dataset, [1], shape_layer, burn_values=[1])
क्या यह GDAL में एक बग है, या RasterizeLayer एक निर्दिष्ट पिक्सेल क्षेत्र के भीतर बहुभुज की उपस्थिति या कमी के अलावा किसी अन्य चीज़ पर आधारित डेटा जल रहा है?