Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

GDAL Raster Output

I'm trying to create a .tif file using GDAL in python. It's creating a file, but saying "no preview available" whenever I browse to it. Right now, I'm just trying to get it to make a copy of the input file. Here's my code:



gdal.AllRegister()

inDs = gdal.Open("C:\\Documents and Settings\\patrick\\Desktop\\tiff elevation\\EBK1KM\\color_a2.tif")
if inDs is None:
  print 'Could not open image file'
  sys.exit(1)
else:
    print "successfully opened input file"

rows = inDs.RasterYSize
cols = inDs.RasterXSize
myband = inDs.GetRasterBand(1)
elev_data = myband.ReadAsArray(0,0,cols,rows)
driver = inDs.GetDriver()
outDs = driver.Create('C:\\Documents and Settings\\patrick\\Desktop\\tiff elevation\\EBK1KM\\new.tif', cols, rows, 1, GDT_Int32)

if outDs is None:
    print "couldn't open output file"
    sys.exit(1)

outBand = outDs.GetRasterBand(1)
outData = numpy.zeros((rows,cols),numpy.int16)
outBand.WriteArray(elev_data)
outBand.FlushCache()
outBand.SetNoDataValue(-99)
outDs.SetGeoTransform(inDs.GetGeoTransform())
outDs.SetProjection(inDs.GetProjection())
del outData

============================update========================================= made some discoveries... I've studied ways of converting from one number format to another using statistical normalization. I processed the input data and transformed it to uint8 by using the following algorithm:
std = elev_data.std() #standard dev
avg = elev_data.mean()
arr = numpy.zeros((rows,cols),numpy.uint8)
for _i_ in _range_(_rows_):
    for _j_ in _range_(_cols_):
        arr[i,j] = (((out_elev[i,j]-avg)/std)*127)+128 #normalization formula
        #this puts all vals in range 1 to 255 (uint8)
dr = gdal.GetDriverByName("GTiff")
outDs = dr.Create("name",cols,rows,3,GDT_Byte) 
#creates and RGB file, accepts uint8 for input
outDs.GetRasterBand(1).WriteArray(arr) #write the output as shades of red
#this writes out a format viewable by microsoft products

the main reason I wanted to copy was to prove that I could read in, then write out updated data based on calculations.

what might be a way I could write out the output data using a color ramp, instead of shades of just one color?

like image 539
Pat Avatar asked Jul 15 '11 16:07

Pat


People also ask

What is raster in GDAL?

Getting Dataset Information As described in the Raster Data Model, a GDALDataset contains a list of raster bands, all pertaining to the same area, and having the same resolution. It also has metadata, a coordinate system, a georeferencing transform, size of raster and various other information.

Which command do we use to check the metadata of raster files in GDAL?

Lists information about a raster dataset.

What language is GDAL written?

GDAL is used in a wide range of open source and private tools, therefore it's frequently included in third-party software for every major operating system. GDAL, with parts written in C, C++, and Python, has a variety of computer language bindings, which is one reason why it is widely accessible.

What is a GDAL dataset?

GDAL is a translator library for raster and vector geospatial data formats that is released under an MIT style Open Source License by the Open Source Geospatial Foundation.


2 Answers

Do you mean you're getting "No preview available" from the Windows Picture and Fax Viewer application when trying to preview the TIFF file as an image? (See below screenshot.)

No preview available screenshot

Bear in mind that there are many different flavors of TIFF, and not all are the same. In particular, the Windows Picture and Fax Viewer does not support all kinds of TIFFs.

There is a Microsoft Knowledge Base article You Cannot View TIFF Images Using Windows Picture and Fax Viewer that says in part:

Windows Picture and Fax Viewer in Windows XP uses Windows Graphics Device Interface (GDI+). GDI+ supports many standard compression algorithms for faxes. However, it may be incompatible with some of the encoding schemes that are not used frequently.

If you're looking for a tool for viewing raster data (including GeoTIFF rasters), I'd recommend the freely available OpenEV, which you can get as part of the FWTools package.

like image 115
Daniel Pryden Avatar answered Sep 22 '22 18:09

Daniel Pryden


Couple of things I notice:

  1. You only copy one band of the source dataset. If it is a color image, it may have 3 bands, or a color map. If it has a color map, you need to copy it over as well. If it is 3 or 4 bands, you have to copy all of the data.
  2. CreateCopy() is an easier way to do what you are looking for.
like image 40
Kyle Avatar answered Sep 23 '22 18:09

Kyle