Monday, 14 March 2016

coordinate system - Getting incorrect slope values from an ASTER DEM in QGIS?


I have a DEM layer from ASTER satellite and I want to get the slope information from it.


I use terrain analysis > slope, but the output is so wrong. Why is that?


Here is the DEM:


enter image description here



And here is the "Slope" that is totally wrong. It should stretch the values from 0 - 89.9097 but it does not.


enter image description here



Answer



Aster DEMs are in EPSG 4326 (lat lon WGS84). According to the GDAL DEM documentation:



For LatLong projections near the equator, where units of latitude and units of longitude are similar, elevation (z) units can be converted to be compatible by using scale = 370400 (if elevation is in feet) or scale = 111120 (if elevation is in meters). For locations not near the equator, it would be best to reproject your grid using gdalwarp before using gdaldem.



In this answer for a problem with hillshading (Scale and Z factor have no effect on hillshade analysis in QGIS) user @Luke provides a way to calculate the correct scale ("ratio of vertical to horizontal units") by multiplying the cosine of the latitude times 111320. The scale affects slope calculations.


In the image below I was able to produce slopes in degrees from a DEM in EPSG 4326 at latitudes ranging from 19°45N and 20°N. The scale (-s) was set to 104550.67.


enter image description here



If you want to work with a DEM in a CRS that defines the measuring units of the coordinates and the elevations in meters you must reproject the DEM using raster/projections/warp (reproject). For example, reprojecting from EPSG 4326 (lat lon wgs84) to EPSG 32164 (UTM WGS84 14N). See below:


enter image description here


In this case, when calculating slope, the "ratio of vertical to horizontal units" (scale) would be set to 1.


No comments:

Post a Comment

arcpy - Changing output name when exporting data driven pages to JPG?

Is there a way to save the output JPG, changing the output file name to the page name, instead of page number? I mean changing the script fo...