Existen varios tipos de soluciones. Vamos a centrarnos en las que no requieren ningún tipo de scripting.
Basado en la trama
En principio, el rango zonal de cada segmento proporciona la información adicional necesaria para calcular la pendiente: basta con dividirlo por la longitud del segmento. (El rango zonal es una de las estadísticas que devuelve un "resumen zonal" del MDE utilizando los segmentos como zonas).
En la práctica, esto debe corregirse porque los rangos suelen disminuir debido a los solapamientos de zonas en los extremos. La elevación de cada punto se asigna a uno solo de los segmentos.
En la mayoría de los casos, las cosas funcionarán de manera que cada segmento "mantenga" uno de sus puntos finales y pierda el otro en el segmento adyacente (puede comprobarlo visualmente convirtiendo los segmentos en una cuadrícula). Por lo tanto, dado que las elevaciones de los arroyos cambian monotónicamente, puede corregir los rangos extrapolándolos una celda más. Si 'c' es el tamaño de la celda y 'l' es la longitud del segmento, esta extrapolación equivale a multiplicar las pendientes estimadas por (l+c)/l. Si las longitudes de los arroyos son largas en comparación con la resolución del MDE (c << l), este ajuste no tiene consecuencias y puede ignorarse.
Basado en la ruta
Una forma elegante de crear los segmentos es convertir los flujos en "rutas" que sean "m-aware". Mediante una tabla de eventos (sólo una lista de nombres de arroyos y "kilometrajes" en sus tramos, fácilmente preparada con una hoja de cálculo o un programa corto) se crean entonces los segmentos como "eventos de línea" a lo largo de la ruta. Con casi la misma tabla puede crear los puntos finales de los segmentos como "eventos de punto". Como esto está bajo tu control, puedes incluir identificadores para los segmentos y los puntos, lo que te permitirá emparejarlos (mediante uniones de bases de datos) posteriormente.
Otros programas informáticos
¿Aún tienes ArcView 3? Puede extraer los valores DEM en los puntos finales del segmento con dos operaciones de Field Calculator, una para cada punto final. :-) Utilice la petición .Along (para obtener los puntos finales) y la petición .PointValue (para leer los valores DEM). Ejemplo:
av.FindDoc("View1").FindTheme("My Grid").GetGrid.PointValue([shape].Along(100), Prj.MakeNull)