9

I have been able to import into QGIS a set of raster topographic maps and the associated DEM raster maps. It registered the two for me. From there I have calculated the associated slope raster map. Now I want to export the data to a CSV file (or similar format) for processing in a program that I am writing. Ideally the data would be structured in a way that would permit me to query for the slope and elevation data for any given point on the map.

If this is possible, then how do I do it?

Specifically, I have been able to export the data (slope & DEM) to two different CSV files. However I would prefer the data in one file if possible.

PolyGeo
  • 65,136
  • 29
  • 109
  • 338
DaemonMaker
  • 273
  • 1
  • 3
  • 11
  • 1
    You kind of need a two-band raster, it seems. – elrobis Dec 05 '12 at 18:14
  • Hi @elrobis, what is a two-band raster? (I'm new to GIS.) – DaemonMaker Dec 05 '12 at 18:16
  • 1
    CSV can be awfully inefficient for large DEMs. Is there a strong reason you need this, or can your programming platform read other formats (such as BIP, BIL, etc)? Note, too, that "CSV" is ambiguous: do you need the output to include explicit coordinates or can it represent the coordinates implicitly (which is much more compact and efficient)? – whuber Dec 05 '12 at 18:23
  • Hi @whuber, I have not strong requirements short of being able to query for slope and elevation at a designated point. I am not familiar with BIP and BIL formats however so if you could provide a link to documentation on them that would help. – DaemonMaker Dec 05 '12 at 18:26
  • 1
    A raster "band" corresponds to the value you can extract from any given position/cell in the dataset. The most common example of a multi-band raster is probably the three-band Red, Green, Blue (RGB) images we encounter all the time. In contrast, your DEM is only one band, and I think your slope is also one band. But you can have several bands, which is commonplace during an analysis. Here's a fancy word: data cube---all kinds of bands, maybe a hundred-plus. I don't think you need a data cube, though. :) – elrobis Dec 05 '12 at 18:26
  • 1
    Read http://webhelp.esri.com/arcgisdesktop/9.2/index.cfm?TopicName=BIL,_BIP,_and_BSQ_raster_files . You can adapt these layouts to ASCII-based files if you want. It sounds like you want to focus on BIP. – whuber Dec 05 '12 at 18:27
  • @elrobis, that makes sense. In that context it would seem that I want to export my slope and elevation data to a two band file format. – DaemonMaker Dec 05 '12 at 18:28
  • That's perfect @whuber. So the question becomes, how do I combine my slope and elevation bands into one file in any of these formats using the Grass plugin for QGIS? – DaemonMaker Dec 05 '12 at 18:36
  • DaemonMaker, I appended my answer to demonstrate how you can use QGIS to make a two-banded image and analyze it with the Raster Calculator. Also, @nhopton's answer is very much in-theme with your original goals. – elrobis Dec 05 '12 at 19:10

2 Answers2

8

If you really want a text-based raster..

whuber is quite right about a text-representation of raster data being inefficient. But at the same time, it can help to "see the data" when it's represented in text, especially while you're cutting your teeth on some concepts

So in the spirit of endorsing text-based-raster for some purposes, you might want to check out the Golden Surfur ASCII Grid (GSAG), which QGIS can export for you (Raster menu > Conversion > Translate).

Furthermore, the format of the GSAG file is described in this document, which you might find useful.


On banding..

If you want to make a two-banded image in QGIS, open Raster menu > Miscellaneous > Merge, and in this dialog you can create a multi-band image, probably alot like I'm doing, below. Note that QGIS implements the Geospatial Data Abstracion Library (GDAL) to accomplish alot of its functionality, so it's often a good idea to become familiar with what GDAL is doing behind the scenes. In this case, here is the documentation for the gdal_merge.py command line utility.

You can't tell in the screen grab, but two different raster files are selected in the Input files field. If you could see all of it, they're comma-separated, like this:

D:/GIS/01_tutorials/geene_dem/slope/slope.tif,D:/GIS/01_tutorials/geene_dem/slope/dem.tif

..and you can just CTRL-click them to do a multi-select in the UI. Also, I believe the bands are index 0-n according to the order that GDAL receives them, so band 1 (index 0) would correspond to the slope values. I hope someone shall correct me there if I am wrong. But the point is, you need to keep track of which band is which value.

enter image description here

Later, once you have the two-band image created, you can check out the Raster Calculator (Raster menu > Raster Calculator) for most any analysis you want to accomplish. In the Raster Calculator, notice how I created a simple expression to evaluate using my bands 1 (slope) and 2 (elevation) to create a new value---a value which I can export into a brand new raster, if I want.

enter image description here

elrobis
  • 6,456
  • 1
  • 31
  • 53
8

You can export a two-band raster to a space-delimited text file using gdal2xyz.

gdal2xyz.py -band 1 -band 2 filename.tif filename.txt

The raster doesn't have to be a TIFF. I think QGIS still comes with gdal2xyz as part of the package.

Just to add, you have a DEM TIFF and a slope TIFF. It will possible to stack these together in one raster using gdal_merge from within QGIS. Raster -> Miscellaneous -> Merge, tick "Layer stack". Then use gdal2xyz on the resulting two-band raster.

PolyGeo
  • 65,136
  • 29
  • 109
  • 338
nhopton
  • 6,983
  • 1
  • 19
  • 36