What I'm trying to do is capture the value of each pixel in a raster, but I'm only interested in each unique value per row.In the 10 x 10 example below, the first row pixel values that would be listed are: 191,192,188,190,181,203,183,192,203,195where the second row would have 8 unique values because 181 and 172 are repeated: 181,187,172,186,182,189,161,208[ATTACH=CONFIG]30468[/ATTACH]I suppose ideally the output would be like this:row:values0:191,192,188,190,181,203,183,192,203,1951:181,187,172,186,182,189,161,208I'm stuck with 10.1 at the moment so I'll have to work within those parameters.
import arcpy import numpy raster = 'path\to\raster' output = 'the\output.file' data = arcpy.RasterToNumPyArray(raster).tolist result = open(output, 'w') rowNum = 0 for row in data: unique = set(row) result.write('%s:'%rowNum) line = '' for val in unique: line += '%s,'%val line = line[:-1] + '\n' #eliminates a trailing comma result.write(line) rowNum += 1 result.close()
import arcpy raster = 'path\to\ASCIIraster.asc' output = 'the\output.file' ASCIIData = open(raster, 'r') OutData = open(output, 'w') rowNum = 0 for line in ASCIIData: values = line.split() writeLine = '%s:'%rowNum try: test = int(values[0]) #This will fail for the headers unique = set(values) #All strings already for val in unique: writeLine += val + ',' writeLine = writeLine[:-1] + '\n' #eliminates a trailing comma OutData.write(writeLine) rowNum += 1 #Has to be here because we don't increment for the header except ValueError: pass #Pass because we are skipping the text header OutData.close()
import arcpy raster = arcpy.Raster("image.tif") array = arcpy.RasterToNumPyArray(raster) (height, width)=array.shape for row in range(0,height): for col in range(0,width): print str(row)+","+str(col)+":"+str(array.item(row,col))
Angemeldete Mitglieder können Beiträge verfassen, Updates folgen und mehr. Neu hier? Registriere ein kostenloses Konto.
Find useful guides, FAQs, and documents to help you navigate and make the most of Esri Community.