[gdal-dev] Re: Slope in gdaldem
    Joaquim Luis 
    jluis at ualg.pt
       
    Thu Dec 15 22:51:10 EST 2011
    
    
  
On 16-12-2011 03:31, Stephen Mather wrote:
> Hmm.  I don't follow?  The revision would be this:
>
> float GDALSlopeHydroAlg (float* afWin, float fDstNoDataValue, void* pData)
>
> {
>     // Hydrologic Slope is the max
>     //  local slope btw center cell and adjacent cells
>
>     const double radiansToDegrees = 180.0 / M_PI;
>     GDALSlopeAlgData* psData = (GDALSlopeAlgData*)pData;
>                 double key;
>
>     float pafLocalMin = afWin[0];
>      float pafLocalMax = afWin[0];
>
>     for ( int k = 1; k < 9; k++)
>     {
>         if (afWin[k] < pafLocalMin)
>         {
>             pafLocalMin=afWin[k];
>         }
>
>         if (afWin[k] > pafLocalMax)
>         {
>             pafLocalMax=afWin[k];
>         }
>     }
>
>     key = afWin[4] - pafLocalMin;
>
>     if (psData->slopeFormat == 1)
>         return (float) (atan(sqrt(key) / (2*psData->scale)) * 
> radiansToDegrees);
>     else
>         return (float) (100*(sqrt(key) / (2*psData->scale)));
> }
>
> But, clearly I'm not understanding something about the window.
>
Steve, there are more things I do not understand either. What is 
'psData->scale'? Is it the grid cell size?
So, if 'pafLocalMin' is on one of the 4 corners the distance is not cell 
size (let's call it DX) but instead sqrt(DX*DX + DX*DX).
And what if data is in geogs? Than DX is clearly different from DY and 
changes with latitude. You need to take that into account to compute the 
slope.
Joaquim
    
    
More information about the gdal-dev
mailing list