Hola DavTux, casi me sale un blog, aquí va:
Tal vez también le sirva la función ST_length3d_spheroid que toma en cuenta la altura y un esferoide de referencia.
Con respecto a la segunda pregunta, sería muy útil que revise el concepto de segmentación dinámica y de referencia lineal, aquí puede ver una introducción al mismo:
www.fing.edu.uy/inco/cursos/sig/clases/DynSeg041201.ppt
Para empezar, debe tener rutas, puntos de calibración de las rutas y tablas de eventos.
Los
puntos de calibración son aquellos que indican medidas conocidas a lo largo de la ruta, es decir, son puntos sobre la ruta para los que conocemos cuál es la distancia desde el principio de la ruta hasta allí. Por ejemplo, podemos saber que el punto (1500000, 1456000) corresponde al Km. 0+300 sobre la ruta de interés. Estos puntos son muy útiles pues nos permiten interpolar valores para que cada punto de la ruta tenga un valor de distancia.
Las medidas sobre la ruta se conocen como la coordenada M.
Las
tablas de eventos pueden representar puntos o líneas. Por ejemplo, sobre una carretera, podemos conocer que en el Km. 0+450 hay una señal de tránsito (se representa con un punto sobre la ruta) o por ejemplo, para un oleoducto, podemos conocer que desde el Km. 0+000 hasta el Km. 1+500 tenemos un díametro de tubo de 16", pero del Km. 1+500 hasta el Km. 2+000 tenemos un diámetro de 12" (se representan como líneas sobre la ruta).
PostGIS tiene funciones básicas para realizar tareas de referencia lineal y segmentación dinámica (
ST_locate_along_measure, ST_locate_between_measures, ST_line_interpolate_point, ST_line_substring, ST_line_locate_point). Recientemente Martin Dobias ha desarrollado un Plugin para QGIS que facilita enormemente su implementación.
https://wiki.faunalia.it/dokuwiki/doku.php/qgis/lrs
El plugin crea la línea con coordenada M a partir de una capa de líneas convencionales y de la capa de puntos de calibración.
Sobre la ruta calibrada se pueden hacer dos tipos de operaciones: 1. Ubicar eventos de los cuales tenemos la coordenada M. 2. Calcular la coordenada M de posiciones (X,Y) conocidas.
Ahora, cuando nos metemos con la altura y con la coordenada M, las geometrías en PostGIS deben definirse como 4D, este es el valor de la dimensión de las coordenadas (no confundir con la dimensión espacio-temporal

), se guarda en la tabla geometry_columns. El 4D se refiere a X, Y, Z y M.
Según
este enlace, las funciones de referencia lineal y segmentación dinámica soportan la altura. Nótese que el enlace apunta a la documentación de la versión 1.4 de PostGIS, aún en desarrollo. Aunque en la versión 1.3 ya se hacen anotaciones que indican el soporte 3D para estas funciones (Ver:
postgis.refractions.net/documentation/ma.../ch06.html#id2578698).
En todo caso, un ejercicio con X, Y y M no caería mal antes de meterse con la Z.
En el plugin para QGIS, parece no estar implementado el Z (según lo que se ve en el código), así que para trabajar con la altura habría que pensar en trabajar directamente con PostGIS.
En este enlace hay un pequeño ejemplo: En la parte superior la tabla de eventos (con coord. M), abajo la ruta calibrada sobre la que se ubican los eventos.
Saludos, espero que sirva

.