4

I have 120 or so geotiff files that I'd like to build and export the raster attribute table to something a little more friendly (e.g. csv).

I'm curious if there is an open source way to do this. The files are rather large 36001 X 36001 pixels so brute force solutions may be out. Ideally, I'm looking to do this in gdal commandline/OSGEO4w or Qgis. Grass in a pinch.


Some additions in response to comments:

  • I am somewhat familiar with python. If anyone has a solution in that vein, I'd love to hear it. Same thing goes with R and windows command line.

-The table would look something like this:

Value | # of Cells
0 | 100000
1 | 3214
2 | 25125
...
98 | 2214213

Basically, I'm looking for a non-ArcGIS way to recreate the ArcGIS raster attribute table. The reason I want CSV is because I have some other mathematical operations I'd like to run, and a csv or some sort of text file works best for my workflow. Its a bit anti-dramatic, but all I really need at this stage is the number of cells for each value in the raster.

PolyGeo
65.5k29 gold badges115 silver badges350 bronze badges
asked Oct 6, 2014 at 4:54
7
  • Show a few lines about such table as an example and tell us for what purpose you think csv to be more friendly than data as raster files. Commented Oct 6, 2014 at 5:38
  • are you python friendly? Commented Oct 6, 2014 at 6:16
  • I've adjusted the posting in response to comments. Thanks for your interest thus far. @user1269942 Commented Oct 7, 2014 at 14:38
  • This link might help: gis.stackexchange.com/questions/40958/… Commented Oct 7, 2014 at 14:54
  • so you want one row per raster in your exported file? that'll be a big file. Also, can you elaborate on your format...I don't quite understand what your numbers are, thanks! Commented Oct 8, 2014 at 5:00

2 Answers 2

3

Ok, I'm still fuzzy on what exactly your export file is but I'll assume "#of cells" is simply the number of pixes for each raster and "Value" is some identifier for each raster (parse the file name??). In absence of how to get "Value", I just put an incremented variable. This script will require gdal.

import glob
from osgeo import gdal
import numpy as np
def get_raster_data(raster_file_name, band):
 r = gdal.Open(raster_file_name)
 return np.array(r.GetRasterBand(band).ReadAsArray())
fp = open('export.txt', 'w+')
fp.write('Value | # of Cells\n')
#what is Value?? I will just put an incremented number. 
#if Value is the raster number, parse yourself.
val = 1
for fname in glob.glob('*.tif'):
 arr = get_raster_data(fname, 1)
 num_cells = arr.shape[0] * arr.shape[1]
 fp.write('%i|%i\n' % (val, num_cells))
 val += 1
fp.close()
answered Oct 8, 2014 at 17:36
-1

Thanks for all the response. Turns out the Count Raster Cells tool from the LecoS plug-in is what I needed.

Kadir Şahbaz
78.6k57 gold badges260 silver badges407 bronze badges
answered Oct 27, 2014 at 5:32

Your Answer

Draft saved
Draft discarded

Sign up or log in

Sign up using Google
Sign up using Email and Password

Post as a guest

Required, but never shown

Post as a guest

Required, but never shown

By clicking "Post Your Answer", you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.