I agree both have their place.  Sometimes we get a more consistent or more interesting answer from our analyses than from our field measurements.<br><br>As to the approach, I agree with your assessment, I was thinking backwards-- one caveat-- how best to handle local minima?  Insert a null?  I&#39;m afraid I don&#39;t know how this is normally handled.<br>
<br>Steve<br><br><br><div class="gmail_quote">On Thu, Dec 15, 2011 at 1:45 PM, Matt Perry <span dir="ltr">&lt;<a href="mailto:perrygeo@gmail.com">perrygeo@gmail.com</a>&gt;</span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
Stephen,<br>
<br>
<br>
It&#39;d be great to see local hydrologic slope in gdaldem.<br>
<br>
I&#39;ve seen a similar discrepancy between &quot;field&quot; slope and most<br>
GIS-derived slopes. The local max hydrologic slope seems to correspond<br>
much better to our perceived slope on the ground. The integrated slope<br>
used in most GIS, however, better matches the overall planar slope<br>
over a large extent. So they both have their place depending on scale;<br>
local hydrologic max slope for the micro, integrated planar slope for<br>
the macro.<br>
<br>
However, I don&#39;t think the algorithm that you describe below will<br>
work. It&#39;s currently looking for the *maximum* local elevation and<br>
computing slope to the center cell. Instead it should calculate the<br>
slope in the direction of hydrologic flow; i.e. the slope from the<br>
center cell to surrounding cell with the *minimum* elevation.<br>
<br>
<br>
- matt<br>
<br>
On Thu, Dec 15, 2011 at 10:29 AM, Stephen Mather<br>
<div><div></div><div class="h5">&lt;<a href="mailto:mather.stephen@gmail.com">mather.stephen@gmail.com</a>&gt; wrote:<br>
&gt; I already see a flaw-- the function should be more like:<br>
&gt;<br>
&gt;<br>
&gt; float GDALSlopeHydroAlg (float* afWin, float fDstNoDataValue, void* pData)<br>
&gt; {<br>
&gt;     // Hydrologic Slope is the max<br>
&gt;     //  local slope btw center cell and adjacent cells<br>
&gt;<br>
&gt;     const double radiansToDegrees = 180.0 / M_PI;<br>
&gt;     GDALSlopeAlgData* psData = (GDALSlopeAlgData*)pData;<br>
&gt;<br>
&gt;     float pafLocalMax = afWin[0];<br>
&gt;<br>
&gt;     for ( int k = 1; k &lt; 9; k++)<br>
&gt;     {<br>
&gt;         if (afWin[k] &gt; pafLocalMax)<br>
&gt;         {<br>
&gt;             pafLocalMax=afWin[k];<br>
&gt;         }<br>
&gt;     }<br>
&gt;     return atan(sqrt(pafLocalMax - afWin[4]) / (2*psData-&gt;scale)) *<br>
&gt; radiansToDegrees;<br>
&gt;<br>
&gt; }<br>
&gt;<br>
&gt;<br>
&gt;<br>
&gt; On Thu, Dec 15, 2011 at 11:49 AM, Stephen Mather &lt;<a href="mailto:mather.stephen@gmail.com">mather.stephen@gmail.com</a>&gt;<br>
&gt; wrote:<br>
&gt;&gt;<br>
&gt;&gt; Hi All,<br>
&gt;&gt;       A colleague tipped me off to an article in Forestry Source entitled<br>
&gt;&gt; &quot;When GIS Slope Isn&#39;t What You Think&quot; showing differences between field<br>
&gt;&gt; measured slope values and GIS results.  The differences can be substantial.<br>
&gt;&gt; The short and long of it is that local hydrologic slope is closer to what&#39;s<br>
&gt;&gt; used in the field by foresters than the integrated slope from either Horn or<br>
&gt;&gt; Zevenbergen-Thorne.<br>
&gt;&gt;       And so, I have a feature request.  I would like to add hydrologic<br>
&gt;&gt; slope to gdaldem.  This is max local slope rather than integrated 9 cell<br>
&gt;&gt; slope like the existing code:<br>
&gt;&gt;<br>
&gt;&gt; The existing code for Horn, e.g. is:<br>
&gt;&gt;<br>
&gt;&gt;     dx = ((afWin[0] + afWin[3] + afWin[3] + afWin[6]) -<br>
&gt;&gt;           (afWin[2] + afWin[5] + afWin[5] + afWin[8]))/psData-&gt;ewres;<br>
&gt;&gt;<br>
&gt;&gt;     dy = ((afWin[6] + afWin[7] + afWin[7] + afWin[8]) -<br>
&gt;&gt;           (afWin[0] + afWin[1] + afWin[1] + afWin[2]))/psData-&gt;nsres;<br>
&gt;&gt;<br>
&gt;&gt; I&#39;d like something more like this (adapted from roughness):<br>
&gt;&gt;<br>
&gt;&gt; float GDALSlopeHydroAlg (float* afWin, float fDstNoDataValue, void* pData)<br>
&gt;&gt; {<br>
&gt;&gt;     // Hydrologic Slope is the max<br>
&gt;&gt;     //  local slope btw center cell and adjacent cells<br>
&gt;&gt;<br>
&gt;&gt;     float pafLocalMax = afWin[0];<br>
&gt;&gt;<br>
&gt;&gt;     for ( int k = 1; k &lt; 9; k++)<br>
&gt;&gt;     {<br>
&gt;&gt;         if (afWin[k] &gt; pafLocalMax)<br>
&gt;&gt;         {<br>
&gt;&gt;             pafLocalMax=afWin[k];<br>
&gt;&gt;         }<br>
&gt;&gt;     }<br>
&gt;&gt;     return pafLocalMax - afWin[4];<br>
&gt;&gt; }<br>
&gt;&gt;<br>
&gt;&gt; Any critques?  Reasons to not add?<br>
&gt;&gt;<br>
&gt;&gt; Best,<br>
&gt;&gt; Steve<br>
&gt;&gt;<br>
&gt;&gt; Stephen Mather<br>
&gt;&gt; GIS Manager<br>
&gt;&gt; Cleveland Metroparks<br>
&gt;&gt; 4101 Fulton Pkwy<br>
&gt;&gt; Cleveland, OH<br>
&gt;&gt; 44144<br>
&gt;<br>
&gt;<br>
&gt;<br>
</div></div>&gt; _______________________________________________<br>
&gt; gdal-dev mailing list<br>
&gt; <a href="mailto:gdal-dev@lists.osgeo.org">gdal-dev@lists.osgeo.org</a><br>
&gt; <a href="http://lists.osgeo.org/mailman/listinfo/gdal-dev" target="_blank">http://lists.osgeo.org/mailman/listinfo/gdal-dev</a><br>
<font color="#888888"><br>
<br>
<br>
--<br>
·´¯`·.¸. , . .·´¯`·.. &gt;&lt;((((º&gt;`·.¸¸.·´¯`·.¸.·´¯`·...¸&gt;&lt;((((º&gt;<br>
&quot;The best way to predict the future is to invent it.&quot;  -- Alan Kay<br>
Matthew T. Perry<br>
<a href="http://www.perrygeo.net" target="_blank">http://www.perrygeo.net</a><br>
<a href="http://viedevelo.wordpress.com" target="_blank">http://viedevelo.wordpress.com</a><br>
</font></blockquote></div><br>