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
_______________________________________________
gdal-dev mailing list
gdal-dev@lists.osgeo.org
http://lists.osgeo.org/mailman/listinfo/gdal-dev