def create_RAT(): dst_ds = open_File() for i in range(dst_ds.RasterCount): i = i + 1 band = dst_ds.GetRasterBand(i) band.SetNoDataValue(-1) rat = gdal.RasterAttributeTable() rat.CreateColumn('Value', gdal.GFT_Integer, gdal.GFU_Name) rat.CreateColumn('Value', gdal.GFT_Integer, gdal.GFU_Generic) rat.CreateColumn('Value', gdal.GFT_String, gdal.GFU_Generic) rat.SetRowCount(6) rat.WriteArray(range(6), 0) rat.SetValueAsInt(0, 1, 1) rat.SetValueAsInt(1, 1, 4) rat.SetValueAsInt(2, 1, 3) rat.SetValueAsInt(3, 1, 7) rat.SetValueAsInt(4, 1, 2) rat.SetValueAsInt(5, 1, 6) rat.SetValueAsString(0, 2, '0-1000') rat.SetValueAsString(1, 2, '1000-2000') rat.SetValueAsString(2, 2, '2000-3000') rat.SetValueAsString(3, 2, '3000-4000') rat.SetValueAsString(4, 2, '4000-5000') rat.SetValueAsString(5, 2, '5000-6000') band.SetDefaultRAT(rat) rat.DumpReadable() band.SetNoDataValue(0) print rat del band, dst_ds
def createAttributeTable(bitField, qualityCache): """ Create a GDAL raster attribute table """ # Get attributes qualityAttributes = [dict(y) for y in set(tuple(i[bitField].items()) \ for i in qualityCache.values())] #TODO Sort values gdal.UseExceptions() #https://www.gdal.org/gdal_8h.html#a810154ac91149d1a63c42717258fe16e rat = gdal.RasterAttributeTable() # Create fields rat.CreateColumn("Value", gdal.GFT_Integer, gdal.GFU_MinMax) rat.CreateColumn("Descr", gdal.GFT_String, gdal.GFU_Name) #rat.CreateColumn("Red", gdalconst.GFT_Integer, gdalconst.GFU_Red) #rat.CreateColumn("Green", gdalconst.GFT_Integer, gdalconst.GFU_Blue) #rat.CreateColumn("Blue", gdalconst.GFT_Integer, gdalconst.GFU_Red) rat.SetRowCount(len(qualityAttributes)) for i, q in enumerate(qualityAttributes): value = int(q['bits'][2:]) description = q['description'] rat.SetValueAsInt(i, 0, value) rat.SetValueAsString(i, 1, description) #rat.SetValueAsInt(intValue, 2, redDict[stringValue]) #rat.SetValueAsInt(intValue, 3, greenDict[stringValue]) #rat.SetValueAsInt(intValue, 4, blueDict[stringValue]) return rat
def saveRaster(image, path, attributes, minArea): image = image.astype(int) r, c = np.shape(image) rasterRAT = gdal.RasterAttributeTable() rasterRAT.SetRowCount(len(attributes)) rasterRAT.CreateColumn('value', gdal.GFT_Integer, gdal.GFU_Generic) rasterRAT.CreateColumn('class_name', gdal.GFT_String, gdal.GFU_Name) for i in range(len(attributes)): rasterRAT.SetValueAsInt(i, 0, i) rasterRAT.SetValueAsString(i, 1, attributes[i]) output_raster = gdal.GetDriverByName('GTiff').Create( path, c, r, 1, gdal.GDT_Int32) output_raster.GetRasterBand(1).WriteArray(image) if (minArea < 5 and minArea > 0): gdal.SieveFilter(output_raster.GetRasterBand(1), None, output_raster.GetRasterBand(1), minArea, 4, [], None, None) if minArea >= 5: gdal.SieveFilter(output_raster.GetRasterBand(1), None, output_raster.GetRasterBand(1), 5, 4, [], None, None) if minArea >= 15: gdal.SieveFilter(output_raster.GetRasterBand(1), None, output_raster.GetRasterBand(1), 15, 4, [], None, None) gdal.SieveFilter(output_raster.GetRasterBand(1), None, output_raster.GetRasterBand(1), minArea, 4, [], None, None) output_raster.GetRasterBand(1).SetDefaultRAT(rasterRAT)
def rat_3(): ds = gdal.GetDriverByName('GTiff').Create('/vsimem/rat_3.tif', 1, 1) ds.GetRasterBand(1).SetDefaultRAT(gdal.RasterAttributeTable()) ds = None gdal.GetDriverByName('GTiff').Delete('/vsimem/rat_3.tif') return 'success'
def rat_1(): gdaltest.saved_rat = None try: rat = gdal.RasterAttributeTable() except: return 'skip' rat.CreateColumn('Value', gdal.GFT_Integer, gdal.GFU_MinMax) rat.CreateColumn('Count', gdal.GFT_Integer, gdal.GFU_PixelCount) rat.SetRowCount(3) rat.SetValueAsInt(0, 0, 10) rat.SetValueAsInt(0, 1, 100) rat.SetValueAsInt(1, 0, 11) rat.SetValueAsInt(1, 1, 200) rat.SetValueAsInt(2, 0, 12) rat.SetValueAsInt(2, 1, 90) rat2 = rat.Clone() if rat2.GetColumnCount() != 2: gdaltest.post_reason('wrong column count') return 'fail' if rat2.GetRowCount() != 3: gdaltest.post_reason('wrong row count') return 'fail' if rat2.GetNameOfCol(1) != 'Count': gdaltest.post_reason('wrong column name') return 'fail' if rat2.GetUsageOfCol(1) != gdal.GFU_PixelCount: gdaltest.post_reason('wrong column usage') return 'fail' if rat2.GetTypeOfCol(1) != gdal.GFT_Integer: gdaltest.post_reason('wrong column type') return 'fail' if rat2.GetRowOfValue(11.0) != 1: gdaltest.post_reason('wrong row for value') return 'fail' if rat2.GetValueAsInt(1, 1) != 200: gdaltest.post_reason('wrong field value.') return 'fail' gdaltest.saved_rat = rat return 'success'
def hfa_unique_values_hist(): try: gdal.RasterAttributeTable() except: return 'skip' ds = gdal.Open( 'data/i8u_c_i.img' ) md = ds.GetRasterBand(1).GetMetadata() expected = '12603|1|0|0|45|1|0|0|0|0|656|177|0|0|5026|1062|0|0|2|0|0|0|0|0|0|0|0|0|0|0|0|0|75|1|0|0|207|158|0|0|8|34|0|0|0|0|538|57|0|10|214|20|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|1|31|0|0|9|625|67|0|0|118|738|117|3004|1499|491|187|1272|513|1|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|16|3|0|0|283|123|5|1931|835|357|332|944|451|80|40|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|12|5|0|0|535|1029|118|0|33|246|342|0|0|10|8|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|169|439|0|0|6|990|329|0|0|120|295|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|164|42|0|0|570|966|0|0|18|152|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|45|106|0|0|16|16517|' if md['STATISTICS_HISTOBINVALUES'] != expected: print(md['STATISTICS_HISTOBINVALUES']) gdaltest.post_reason( 'Unexpected HISTOBINVALUES.' ) return 'fail' if md['STATISTICS_HISTOMIN'] != '0' \ or md['STATISTICS_HISTOMAX'] != '255': print(md) gdaltest.post_reason( "unexpected histomin/histomax value." ) return 'fail' # lets also check the RAT to ensure it has the BinValues column added. rat = ds.GetRasterBand(1).GetDefaultRAT() if rat.GetColumnCount() != 6 \ or rat.GetTypeOfCol(0) != gdal.GFT_Real \ or rat.GetUsageOfCol(0) != gdal.GFU_MinMax: print(rat.GetColumnCount()) print(rat.GetTypeOfCol(0)) print(rat.GetUsageOfCol(0)) gdaltest.post_reason( 'BinValues column wrong.') return 'fail' if rat.GetValueAsInt( 2, 0 ) != 4: print(rat.GetValueAsInt( 2, 0 )) gdaltest.post_reason( 'BinValues value wrong.' ) return 'fail' rat = None ds = None return 'success'
def make_rat(fn): ''' __orig_author__ = "Matt Gregory <*****@*****.** >" Adds a Raster Attribute Table to the .tif.aux.xml file, then passes those values to rat_to_df function to return the RAT in a pandas DataFrame. Arguments --------- fn : raster filename Output --------- df : pd.DataFrame with raster attribute table information ''' ds = gdal.Open(fn) rb = ds.GetRasterBand(1) nd = rb.GetNoDataValue() data = rb.ReadAsArray() # Get unique values in the band and return counts for COUNT val u = np.array(np.unique(data, return_counts=True)) # remove NoData value u = np.delete(u, np.argwhere(u == nd), axis=1) # Create and populate the RAT rat = gdal.RasterAttributeTable() rat.CreateColumn('Value', gdal.GFT_Integer, gdal.GFU_Generic) rat.CreateColumn('Count', gdal.GFT_Integer, gdal.GFU_Generic) for i in range(u[0].size): rat.SetValueAsInt(i, 0, int(u[0][i])) rat.SetValueAsInt(i, 1, int(u[1][i])) # Associate with the band rb.SetDefaultRAT(rat) # Close the dataset and persist the RAT ds = None rb = None nd = None data = None #return the rat to build DataFrame df = rat_to_df(rat) return df
def createAttributeTable(bitField, qualityCache): """ Create a GDAL raster attribute table """ # Get attributes qualityAttributes = [dict(y) for y in set(tuple(i[bitField].items()) \ for i in qualityCache.values())] #https://www.gdal.org/gdal_8h.html#a810154ac91149d1a63c42717258fe16e rat = gdal.RasterAttributeTable() # Create fields rat.CreateColumn("Value", gdalconst.GFT_Integer, gdalconst.GFU_MinMax) rat.CreateColumn("Descr", gdalconst.GFT_String, gdalconst.GFU_Name) for i, q in enumerate(qualityAttributes): value = int(q['bits'][2:]) description = q['description'] rat.SetValueAsInt(i, 0, value) rat.SetValueAsString(i, 1, description) return rat
def gdal_api_proxy_sub(): src_ds = gdal.Open('data/byte.tif') src_cs = src_ds.GetRasterBand(1).Checksum() src_gt = src_ds.GetGeoTransform() src_prj = src_ds.GetProjectionRef() src_data = src_ds.ReadRaster(0, 0, 20, 20) src_md = src_ds.GetMetadata() src_ds = None drv = gdal.IdentifyDriver('data/byte.tif') if drv.GetDescription() != 'API_PROXY': gdaltest.post_reason('fail') return 'fail' ds = gdal.GetDriverByName('GTiff').Create('tmp/byte.tif', 1, 1, 3) ds = None src_ds = gdal.Open('data/byte.tif') ds = gdal.GetDriverByName('GTiff').CreateCopy('tmp/byte.tif', src_ds, options=['TILED=YES']) got_cs = ds.GetRasterBand(1).Checksum() if src_cs != got_cs: gdaltest.post_reason('fail') return 'fail' ds = None ds = gdal.Open('tmp/byte.tif', gdal.GA_Update) ds.SetGeoTransform([1, 2, 3, 4, 5, 6]) got_gt = ds.GetGeoTransform() if src_gt == got_gt: gdaltest.post_reason('fail') return 'fail' ds.SetGeoTransform(src_gt) got_gt = ds.GetGeoTransform() if src_gt != got_gt: gdaltest.post_reason('fail') return 'fail' if ds.GetGCPCount() != 0: gdaltest.post_reason('fail') return 'fail' if ds.GetGCPProjection() != '': print(ds.GetGCPProjection()) gdaltest.post_reason('fail') return 'fail' if len(ds.GetGCPs()) != 0: gdaltest.post_reason('fail') return 'fail' gcps = [gdal.GCP(0, 1, 2, 3, 4)] ds.SetGCPs(gcps, "foo") got_gcps = ds.GetGCPs() if len(got_gcps) != 1: gdaltest.post_reason('fail') return 'fail' if got_gcps[0].GCPLine != gcps[0].GCPLine or \ got_gcps[0].GCPPixel != gcps[0].GCPPixel or \ got_gcps[0].GCPX != gcps[0].GCPX or \ got_gcps[0].GCPY != gcps[0].GCPY: gdaltest.post_reason('fail') return 'fail' if ds.GetGCPProjection() != 'foo': gdaltest.post_reason('fail') print(ds.GetGCPProjection()) return 'fail' ds.SetGCPs([], "") if len(ds.GetGCPs()) != 0: gdaltest.post_reason('fail') return 'fail' ds.SetProjection('') got_prj = ds.GetProjectionRef() if src_prj == got_prj: gdaltest.post_reason('fail') return 'fail' ds.SetProjection(src_prj) got_prj = ds.GetProjectionRef() if src_prj != got_prj: gdaltest.post_reason('fail') print(src_prj) print(got_prj) return 'fail' ds.GetRasterBand(1).Fill(0) got_cs = ds.GetRasterBand(1).Checksum() if 0 != got_cs: gdaltest.post_reason('fail') return 'fail' ds.GetRasterBand(1).WriteRaster(0, 0, 20, 20, src_data) got_cs = ds.GetRasterBand(1).Checksum() if src_cs != got_cs: gdaltest.post_reason('fail') return 'fail' ds.GetRasterBand(1).Fill(0) got_cs = ds.GetRasterBand(1).Checksum() if 0 != got_cs: gdaltest.post_reason('fail') return 'fail' ds.WriteRaster(0, 0, 20, 20, src_data) got_cs = ds.GetRasterBand(1).Checksum() if src_cs != got_cs: gdaltest.post_reason('fail') return 'fail' # Not bound to SWIG # ds.AdviseRead(0,0,20,20,20,20) got_data = ds.ReadRaster(0, 0, 20, 20) if src_data != got_data: gdaltest.post_reason('fail') return 'fail' got_data = ds.GetRasterBand(1).ReadRaster(0, 0, 20, 20) if src_data != got_data: gdaltest.post_reason('fail') return 'fail' got_data_weird_spacing = ds.ReadRaster(0, 0, 20, 20, buf_pixel_space=1, buf_line_space=32) if len(got_data_weird_spacing) != 32 * (20 - 1) + 20: gdaltest.post_reason('fail') print(len(got_data_weird_spacing)) return 'fail' if got_data[20:20 + 20] != got_data_weird_spacing[32:32 + 20]: gdaltest.post_reason('fail') return 'fail' got_data_weird_spacing = ds.GetRasterBand(1).ReadRaster(0, 0, 20, 20, buf_pixel_space=1, buf_line_space=32) if len(got_data_weird_spacing) != 32 * (20 - 1) + 20: gdaltest.post_reason('fail') print(len(got_data_weird_spacing)) return 'fail' if got_data[20:20 + 20] != got_data_weird_spacing[32:32 + 20]: gdaltest.post_reason('fail') return 'fail' got_block = ds.GetRasterBand(1).ReadBlock(0, 0) if len(got_block) != 256 * 256: gdaltest.post_reason('fail') return 'fail' if got_data[20:20 + 20] != got_block[256:256 + 20]: gdaltest.post_reason('fail') return 'fail' ds.FlushCache() ds.GetRasterBand(1).FlushCache() got_data = ds.GetRasterBand(1).ReadRaster(0, 0, 20, 20) if src_data != got_data: gdaltest.post_reason('fail') return 'fail' if len(ds.GetFileList()) != 1: gdaltest.post_reason('fail') return 'fail' if ds.AddBand(gdal.GDT_Byte) == 0: gdaltest.post_reason('fail') return 'fail' got_md = ds.GetMetadata() if src_md != got_md: gdaltest.post_reason('fail') print(src_md) print(got_md) return 'fail' if ds.GetMetadataItem('AREA_OR_POINT') != 'Area': gdaltest.post_reason('fail') return 'fail' if ds.GetMetadataItem('foo') is not None: gdaltest.post_reason('fail') return 'fail' ds.SetMetadataItem('foo', 'bar') if ds.GetMetadataItem('foo') != 'bar': gdaltest.post_reason('fail') return 'fail' ds.SetMetadata({'foo': 'baz'}, 'OTHER') if ds.GetMetadataItem('foo', 'OTHER') != 'baz': gdaltest.post_reason('fail') return 'fail' ds.GetRasterBand(1).SetMetadata({'foo': 'baw'}, 'OTHER') if ds.GetRasterBand(1).GetMetadataItem('foo', 'OTHER') != 'baw': gdaltest.post_reason('fail') return 'fail' if ds.GetMetadataItem('INTERLEAVE', 'IMAGE_STRUCTURE') != 'BAND': gdaltest.post_reason('fail') return 'fail' if len(ds.GetRasterBand(1).GetMetadata()) != 0: gdaltest.post_reason('fail') return 'fail' if ds.GetRasterBand(1).GetMetadataItem('foo') is not None: gdaltest.post_reason('fail') return 'fail' ds.GetRasterBand(1).SetMetadataItem('foo', 'baz') if ds.GetRasterBand(1).GetMetadataItem('foo') != 'baz': gdaltest.post_reason('fail') return 'fail' ds.GetRasterBand(1).SetMetadata({'foo': 'baw'}) if ds.GetRasterBand(1).GetMetadataItem('foo') != 'baw': gdaltest.post_reason('fail') return 'fail' if ds.GetRasterBand(1).GetColorInterpretation() != gdal.GCI_GrayIndex: gdaltest.post_reason('fail') return 'fail' ds.GetRasterBand(1).SetColorInterpretation(gdal.GCI_Undefined) ct = ds.GetRasterBand(1).GetColorTable() if ct is not None: gdaltest.post_reason('fail') return 'fail' ct = gdal.ColorTable() ct.SetColorEntry(0, (1, 2, 3)) if ds.GetRasterBand(1).SetColorTable(ct) != 0: gdaltest.post_reason('fail') return 'fail' ct = ds.GetRasterBand(1).GetColorTable() if ct is None: gdaltest.post_reason('fail') return 'fail' if ct.GetColorEntry(0) != (1, 2, 3, 255): gdaltest.post_reason('fail') return 'fail' ct = ds.GetRasterBand(1).GetColorTable() if ct is None: gdaltest.post_reason('fail') return 'fail' if ds.GetRasterBand(1).SetColorTable(None) != 0: gdaltest.post_reason('fail') return 'fail' ct = ds.GetRasterBand(1).GetColorTable() if ct is not None: gdaltest.post_reason('fail') return 'fail' rat = ds.GetRasterBand(1).GetDefaultRAT() if rat is not None: gdaltest.post_reason('fail') return 'fail' if ds.GetRasterBand(1).SetDefaultRAT(None) != 0: gdaltest.post_reason('fail') return 'fail' ref_rat = gdal.RasterAttributeTable() if ds.GetRasterBand(1).SetDefaultRAT(ref_rat) != 0: gdaltest.post_reason('fail') return 'fail' rat = ds.GetRasterBand(1).GetDefaultRAT() if rat is None: gdaltest.post_reason('fail') return 'fail' if ds.GetRasterBand(1).SetDefaultRAT(None) != 0: gdaltest.post_reason('fail') return 'fail' rat = ds.GetRasterBand(1).GetDefaultRAT() if rat is not None: gdaltest.post_reason('fail') return 'fail' if ds.GetRasterBand(1).GetMinimum() is not None: gdaltest.post_reason('fail') return 'fail' got_stats = ds.GetRasterBand(1).GetStatistics(0, 0) if got_stats[3] >= 0.0: gdaltest.post_reason('fail') return 'fail' got_stats = ds.GetRasterBand(1).GetStatistics(1, 1) if got_stats[0] != 74.0: gdaltest.post_reason('fail') return 'fail' if ds.GetRasterBand(1).GetMinimum() != 74.0: gdaltest.post_reason('fail') return 'fail' if ds.GetRasterBand(1).GetMaximum() != 255.0: gdaltest.post_reason('fail') return 'fail' ds.GetRasterBand(1).SetStatistics(1, 2, 3, 4) got_stats = ds.GetRasterBand(1).GetStatistics(1, 1) if got_stats != [1, 2, 3, 4]: print(got_stats) gdaltest.post_reason('fail') return 'fail' ds.GetRasterBand(1).ComputeStatistics(0) got_stats = ds.GetRasterBand(1).GetStatistics(1, 1) if got_stats[0] != 74.0: gdaltest.post_reason('fail') return 'fail' minmax = ds.GetRasterBand(1).ComputeRasterMinMax() if minmax != (74.0, 255.0): gdaltest.post_reason('fail') print(minmax) return 'fail' if ds.GetRasterBand(1).GetOffset() != 0.0: gdaltest.post_reason('fail') return 'fail' if ds.GetRasterBand(1).GetScale() != 1.0: gdaltest.post_reason('fail') return 'fail' ds.GetRasterBand(1).SetOffset(10.0) if ds.GetRasterBand(1).GetOffset() != 10.0: gdaltest.post_reason('fail') return 'fail' ds.GetRasterBand(1).SetScale(2.0) if ds.GetRasterBand(1).GetScale() != 2.0: gdaltest.post_reason('fail') return 'fail' ds.BuildOverviews('NEAR', [2]) if ds.GetRasterBand(1).GetOverviewCount() != 1: gdaltest.post_reason('fail') return 'fail' if ds.GetRasterBand(1).GetOverview(-1) is not None: gdaltest.post_reason('fail') return 'fail' if ds.GetRasterBand(1).GetOverview(0) is None: gdaltest.post_reason('fail') return 'fail' if ds.GetRasterBand(1).GetOverview(0) is None: gdaltest.post_reason('fail') return 'fail' got_hist = ds.GetRasterBand(1).GetHistogram() if len(got_hist) != 256: gdaltest.post_reason('fail') return 'fail' (minval, maxval, nitems, got_hist2) = ds.GetRasterBand(1).GetDefaultHistogram() if minval != -0.5: gdaltest.post_reason('fail') return 'fail' if maxval != 255.5: gdaltest.post_reason('fail') return 'fail' if nitems != 256: gdaltest.post_reason('fail') return 'fail' if got_hist != got_hist2: gdaltest.post_reason('fail') return 'fail' ds.GetRasterBand(1).SetDefaultHistogram(1, 2, [3]) (minval, maxval, nitems, got_hist3) = ds.GetRasterBand(1).GetDefaultHistogram() if minval != 1: gdaltest.post_reason('fail') return 'fail' if maxval != 2: gdaltest.post_reason('fail') return 'fail' if nitems != 1: gdaltest.post_reason('fail') return 'fail' if got_hist3[0] != 3: gdaltest.post_reason('fail') return 'fail' got_nodatavalue = ds.GetRasterBand(1).GetNoDataValue() if got_nodatavalue is not None: gdaltest.post_reason('fail') return 'fail' ds.GetRasterBand(1).SetNoDataValue(123) got_nodatavalue = ds.GetRasterBand(1).GetNoDataValue() if got_nodatavalue != 123: gdaltest.post_reason('fail') return 'fail' if ds.GetRasterBand(1).GetMaskFlags() != 8: gdaltest.post_reason('fail') return 'fail' if ds.GetRasterBand(1).GetMaskBand() is None: gdaltest.post_reason('fail') return 'fail' ds.CreateMaskBand(0) if ds.GetRasterBand(1).GetMaskFlags() != 2: print(ds.GetRasterBand(1).GetMaskFlags()) gdaltest.post_reason('fail') return 'fail' if ds.GetRasterBand(1).GetMaskBand() is None: gdaltest.post_reason('fail') return 'fail' ds.GetRasterBand(1).CreateMaskBand(0) if ds.GetRasterBand(1).HasArbitraryOverviews() != 0: gdaltest.post_reason('fail') return 'fail' ds.GetRasterBand(1).SetUnitType('foo') if ds.GetRasterBand(1).GetUnitType() != 'foo': gdaltest.post_reason('fail') return 'fail' if ds.GetRasterBand(1).GetCategoryNames() is not None: gdaltest.post_reason('fail') return 'fail' ds.GetRasterBand(1).SetCategoryNames(['foo']) if ds.GetRasterBand(1).GetCategoryNames() != ['foo']: gdaltest.post_reason('fail') return 'fail' ds.GetRasterBand(1).SetDescription('bar') ds = None gdal.GetDriverByName('GTiff').Delete('tmp/byte.tif') return 'success'
import os import gdal os.chdir('../dati/osgeopy-data/Switzerland/') DS = gdal.Open('dem_class2.tif') BAND = DS.GetRasterBand(1) BAND.SetNoDataValue(-1) rat = gdal.RasterAttributeTable() rat.CreateColumn('Valore', gdal.GFT_Integer, gdal.GFU_Name) rat.CreateColumn('Conteggio', gdal.GFT_Integer, gdal.GFU_PixelCount) rat.CreateColumn('Elevazione', gdal.GFT_String, gdal.GFU_Generic) rat.SetRowCount(6) rat.WriteArray(range(6), 0) rat.WriteArray(BAND.GetHistogram(-0.5, 5.5, 6, False, False), 1) rat.SetValueAsString(1, 2, '0-800') rat.SetValueAsString(2, 2, '800-1300') rat.SetValueAsString(3, 2, '1300-2000') rat.SetValueAsString(4, 2, '2000-2600') rat.SetValueAsString(5, 2, '2600 +') BAND.SetDefaultRAT(rat) BAND.SetNoDataValue(0) del BAND, DS