Mostrando entradas con la etiqueta curvas. Mostrar todas las entradas
Mostrando entradas con la etiqueta curvas. Mostrar todas las entradas

lunes, 25 de febrero de 2019

Caso práctico SASPlanet: añadir capas o mapas WMS.

Algunos amigos del blog me comentan que les gustaría tener alguna capa en SASPlanet que contuviera las curvas de nivel de España, de forma que la pudieran superponer fácilmente sobre ortofotos o cualquier mapa que carezca de ellas. En nuestro lote del programa se incluyen algunas capas de relieve pero lo cierto es que ninguna nos parece demasiado convincente... Así pues nos hemos dicho que esta es una buena excusa para explicar con todo detalle el proceso para hacerlo. Vamos allá.

Lo primero que necesitamos es un servicio web que ofrezca lo que buscamos. Y lo encontramos en el WMS del SCN que lleva por título Modelos Digitales de Elevaciones de España. Aunque en su archivo de capacidades tenemos toda la información (sobre la que volveremos más adelante), abrimos el servicio en QGIS para una descripción de su contenido mucho más amable.

La descripción del servicio nos deja muy claro que contiene lo que buscamos, y además ya nos informa que la equidistancia de las curvas es de 50 metros. El servicio contiene también otros elementos en distintas capas: puntos acotados y mapas de pendientes, orientaciones, sombreado y relieve. La URL de este WMS es http://servicios.idee.es/wms-inspire/mdt

Debemos ahora por tanto configurar el archivo necesario para que SASPlanet sea capaz de visualizarlo. Aunque ya explicamos en su día los conceptos básicos para agregar fuentes de mapas al programa, repasamos rápidamente sobre la marcha.
Aunque desde programas como QGIS disponemos de toda la información del servicio cómodamente en agradables ventanas...
... cabe la posibilidad de que no uséis software de este tipo, por lo que vamos a hacerlo con el método infalible que no tiene necesidad de ningún programa alternativo. Todo servicio WMS dispone de un archivo de capacidades que puede invocarse a partir de su URL. Para ello generalmente debemos añadir la expresión ?SERVICE=WMS&REQUEST=GetCapabilities a su dirección URL.

Añadimos pues esta dirección completa a nuestro navegador de internet:
http://servicios.idee.es/wms-inspire/mdt?service=WMS&request=GetCapabilities
Y nos aparece la página con la estructura XML conteniendo toda la información del servicio:
No os asustéis, algunas de estas páginas tienen miles de líneas pero este WMS es cortito. De entre todo este mogollón de caracteres vamos a ir buscando los que nos interesan descendiendo progresivamente por ella.
Lo primero importante son los formatos de salida que soporta el WMS cuando se le hacen las peticiones (sobre todo los de imagen, ya que lo queremos para SASPlanet)...
Importantes son también los sistemas de coordenadas (CRS) que admite. SASPlanet solamente admite unos pocos y nosotros usamos casi siempre WGS84 cuyo EPSG es el 4326...
En esta parte observamos también el llamado BoundinBox, esto es, el marco espacial que cubre el servicio WMS con sus coordenadas límite por norte, sur, este y oeste.
Llegamos después al listado de capas, fácilmente identificables por la palabra Layer. La primera es la de los puntos acotados y en segundo lugar aparece la que nos interesa:
Las capas tienen dos atributos que vamos a necesitar: el nombre (Name) y el nombre del estilo (Style), marcados en verde en la imagen superior. Así tenemos que el Name operativo de nuestra capa de curvas de nivel es EL.ContourLine y que la capa tiene dos estilos de representación posibles bajo los nombres curvasnivel o EL.ContourLine.Default
Inciso: cada WMS es un mundo... Unos tienen un style marcado en cada capa y otros muchos usan default como parámetro de estilo, o incluso está en blanco. Lo que si es común a todos es que cualquier error en la literalidad al transcribir estos parámetros supone que no podamos visualizar su contenido, por lo que debemos asegurarnos de poner exactamente lo mismo que vemos, tanto en la URL como en los nombres de capa y estilo.
Con esto ya tenemos toda la información que necesitamos del archivo de capacidades del WMS. Ahora es el turno de elaborar el archivo de configuración para SASPlanet. Dicho archivo lleva por nombre params.txt, es un archivo de texto simple perfectamente modificable con cualquier editor de texto (como el bloc de notas de Windows), y se encuentran dentro de una carpeta con extensión .zmp junto con dos archivos más: GetUrlScript.txt y un icono del mapa normalmente llamado 24.bmp (aunque valen otros nombres y formatos). Preparamos el directorio resumido en esta imagen:
Estructura y ruta a nuestra nueva carpeta .zmp (le hemos dado un nombre identificativo como Curvas IGN) de configuración del nuevo mapa (capa), dentro de la carpeta Maps del directorio SASPlanet. La hemos ubicado dentro del directorio SPAIN pues queremos que la nueva capa pertenezca a dicho menú.
Los tres archivos del interior de la carpeta .zmp podéis cogerlos de cualquier otro mapa a modo de plantilla (por ejemplo de otro WMS del IGN como el PNOA), y a partir de ahí procedemos a hacer las modificaciones necesarias en el archivo params.txt de acuerdo con la información que hemos sacado del archivo de capacidades. Nuestro params.txt quedaría así:
Archivo params.txt con todas las modificaciones necesarias para configurar el nuevo servicio WMS. Paso a describir los parámetros más importantes:
  • GUID: se trata de un numero único correspondiente a cada mapa y que no debe repetirse. Podéis modificar algún número del mismo o generar uno nuevo aleatorio desde algunas webs.
  • name_es: el nombre con el que el mapa va a aparecer en nuestro menú de mapas de SASPlanet. Una línea por cada posible idioma del programa (español, inglés, ucraniano).
  • ParentSubmenu_es: categoría del menú dentro de la cual se va a ubicar el mapa. Lo mismo para los tres idiomas.
  • NameInCache: nombre de la carpeta donde van a almacenarse los mosaicos de imágenes.
  • asLayer: define si el mapa va a ser mapa principal (0) o CAPA (1). En este caso ya hemos comentado que las curvas las queremos como capa, así pues ponemos 1 para que el mapa nos aparezca en el menú de capas de SASPlanet.
  • DefURLBase: la dirección URL del servicio WMS, con el signo ? pues forma parte de una expresión completa (petición de mapa GetMap). El parámetro TRANSPARENT alude la posibilidad de que el mapa tenga transparencia, lo que es vital para una capa de curvas (true permite la transparencia, false la niega).
  • LAYERS: el nombre de capa que figura en las capacidades del WMS.
  • STYLES: el estilo de representación del servicio. Nosotros hemos elegido curvasdenivel pero como hemos visto más arriba disponemos de dos opciones que pueden venirnos muy bien dependiendo del mapa de fondo: 

A la izquierda el estilo de nombre curvasnivel y a la derecha el estilo llamado EL.ContourLine.Default 
Uno tiene trazo más fino en las curvas y etiquetado y el otro trazo más grueso sin etiquetas de altitud.
Una vez todo listo salvamos los cambios en el archivo params.txt y arrancamos SASPlanet para confirmar que nuestra nueva capa aparece en el menú de capas del programa y dentro de su grupo:

Y la activamos sobre por ejemplo el Mapa Base del IGN para ver el resultado:

Ya tenemos disponibles las curvas de nivel cada 50 metros de todo el territorio nacional a partir de la escala 1:200.000 (zoom 13 o mayor en SASPlanet). Son de enorme utilidad para muchas cartografías que carecen de ellas, como el mapa estándar OSM:

Un último apunte para terminar. Si queréis aprovechar el mismo archivo .zmp y enriquecerlo con más información, podéis añadir otra de las capas disponibles en este mismo WMS como son los puntos acotados. Recordad que también tenían dos estilos a elegir... Simplemente añadimos el nombre de la nueva layer y del nuevo estilo en su capítulo correspondiente separados por comas, tal que así:
De esta forma podéis añadir varias capas de un mismo WMS en un mismo archivo, teniendo siempre en cuenta si se prestan a ello por contenido, transparencia, orden de visualización, etc...

Notas:
1.- El archivo params.txt tiene otros muchos parámetros (formato de imagen, tiempo de espera en el servidor, sistema de coordenadas, color de fondo, bounding box, etc...) que podrían ser importantes a la hora de configurarlo.
2.- No todos los WMS son tan sencillos y bien estructurados como este ejemplo. En ocasiones somos incapaces de hacerlos funcionar en SASPlanet, por incompatibilidad de proyección, del mismo servicio, o simplemente por insuficientes conocimientos.
3.- Explicado queda para los restos lo más importante de lo que sabemos a la hora de añadir mapas o capas a SASPlanet... Suerte!!

miércoles, 3 de octubre de 2018

Caso práctico QGIS: estilo Tanaka en curvas de nivel.

Hoy vamos a intentar desarrollar un caso práctico con QGIS consistente en aplicar un estilo a las curvas de nivel conocido como Tanaka. Dicho en tres palabras este método consiste en aplicar una fuente de luz a los contornos de las curvas, con lo que se consigue una representación similar al 3D proporcionando un efecto de sombra realista sin necesidad de datos de relieve verdaderos. Dibujando en tonos más claros las líneas que miran directamente a la fuente de luz y en tonos más oscuros las que caen en sombra, y apoyados también en diferentes grosores (más delgadas las perpendiculares a la luz) se termina de pulir ese efecto realista del paisaje.
Dado que para este tipo de operaciones se requieren conocimientos avanzados de expresiones y funciones (que yo por desgracia no tengo), seguimos el excelente tutorial de LandscapeArchaeology. Todo lo que necesitamos para este caso práctico es un MDT (o DEM). Vamos con ello:

1.- Cargar en QGIS el MDT sobre el que trabajar.
Hemos elegido para este caso práctico una zona costera de las Rías Baixas para una mejor visualización del efecto.
2.- Extraer las curvas de nivel.
En QGIS disponemos de varias fórmulas para realizar esta operación: SAGA, GRASS, GDAL... Según nuestro guía parece conveniente para un resultado más óptimo que las curvas tengan la misma orientación o sentido (a favor o en contra de las agujas del reloj, pero nunca ambas). Y parece también que el algoritmo GDAL es el que nos asegura la consistencia en este proceso. Así pues, procedemos a generar las curvas de nivel con él.
Con los parámetros por defecto simplemente generamos las curvas con una equidistancia de p,ej. 20 metros.
Una rápida comprobación usando la simbología de flechas para comprobar que la orientación de las curvas es uniforme.

3.- Aplicando el estilo.
Dado que el método Tanaka busca aplicar el estilo a cada tramo de línea, es necesario segmentar la curva para disponer de polilíneas individualizadas cada dos nodos. Entendemos que este es uno de los quiz de la cuestión: a tramos más cortos el estilo se aplicará con mayor precisión que tratando la curva completa, pues cada segmento de la misma dispone de una orientación diferente respecto a la fuente de luz.
Aunque ya Anita Graser utilizó esta segmentación previa, parece que las últimas versiones de QGIS permiten integrarla dentro de la misma fórmula de estilo ahorrando este paso adicional.
  • Usamos Geometry generator como tipo de símbolo de la línea y la expresión segments_to_lines( $geometry) para conseguir la división de la línea en segmentos (split).
  • Introducimos el estilo como una expresión mediante el botón Edit. Primero para el color:
color_hsl( 0,0,
  scale_linear(
    abs(
      (135 +
        degrees(
          azimuth(
             end_point(geometry_n($geometry,@geometry_part_num)),
            start_point(geometry_n($geometry,@geometry_part_num))
     )))
      % 360 - 180),
  0, 180 ,0, 100))
  • Y después la expresión para el grosor:
scale_linear(
  abs(
    (135 +
      degrees(
        azimuth(
          end_point(geometry_n($geometry,@geometry_part_num)),
          start_point(geometry_n($geometry,@geometry_part_num))
      ) ))
    % 180 - 90),
 0, 90 ,0.2, 1)

Obviamente, sin tener los conocimientos necesarios de Python, la explicación técnica completa de estas expresiones a nosotros se nos escapa en gran parte (sigo sin entender por qué situar el Noroeste en 135° en vez de los 315° habituales depende de que las curvas estén en el sentido de las agujas del reloj o en el sentido contrario...), por lo que es conveniente que recurráis al artículo original para los detalles extra. Para variaciones en la dirección de la luz podéis modificar el "135" en ambas fórmulas (color y grosor).
  • Un par de retoques finales redondeando los extremos de línea y aplicando el modo de representación Overlay (Superponer) para un resultado más fino e integrado...

... y ya podemos Aplicar todos los cambios para ver el resultado.

4.- Podemos dar algún color al DEM para estar más cerca de un resultado realista mediante el uso de un Singleband pseudocolor.

Aunque creemos que la magia de este método es conseguir el efecto sin necesitar un DEM degradado por alturas, por lo que la prueba con un fondo plano es igualmente efectista. Hemos añadido algunos elementos básicos del mapa para comprobar el efecto conjunto:

Aún así, y a falta de probarlo a fondo, compartimos la impresión de Zoran Čučković cuando dice que "los ejemplos originales de Tanaka de contornos sombreados se usan principalmente para representar la topografía natural. Encuentro ese acercamiento visualmente demasiado pesado; es difícil agregar información adicional sin sobrecargar el mapa (pero eso es solo una impresión ...). Lo que funciona mejor son todos esos mapas de calor que, de otro modo, son salpicaduras de colores: ¡los contornos de Tanaka les dan vida! Solo echa un vistazo al hermoso mapa de profundidad a continuación ...".
Maravilloso ejemplo en el artículo original en el que se aprecia el radical efecto tras el cambio del color base y el ángulo de iluminación.
Decir por último que en el artículo original que nos ha servido de guía está disponible para descarga el archivo de definición de estilo generado con este efecto (tanaka_style.qml), y que como sabéis podemos cargar directamente en nuestra capa ahorrándonos todo el proceso, pero... ¿y lo bonito que es descubrir cómo se hacen las cosas?

Desde Cartografía Digital agradecemos de nuevo la impagable labor de estos profesionales que gracias a sus conocimientos descubren nuevas fórmulas de representación cartográfica, enriqueciendo desde la nada las posibilidades estéticas de nuestros mapas. 
Y brindamos por ellos.

lunes, 30 de mayo de 2016

Mapa del mes: EUSKADI relieve PACK.

Este mayo que acaba hemos preparado un mapa del mes distinto: un pack completo de Euskadi bajo el tema común del relieve. En dicho lote hemos incluido los principales productos que solemos usar en cartografía cuando trabajamos con relieves de una zona, y los hemos agrupado en un archivo RAR.

Su contenido es el siguiente (148 megas):


- ASTER_euskadi_38m.asc: modelo de elevaciones de Euskadi en formato asc con paso de malla 38,2 metros.

- Euskadi_areas.shp: polígonos vectoriales representando las alturas de Euskadi en rangos de 20 metros..

- Euskadi_curvas.shp: lineas vectoriales representando las curvas de nivel de Euskadi con rango de 20 metros.

- Relieve_color.tif: imagen tif representando el relieve de Euskadi con tintas hipsográficas por alturas.

- Sombras.tif: archivo tif conteniendo el relieve sombreado (hillshade) de Euskadi.

Vamos a mostrar y comentar un poco más en detalle cada uno de los productos contenidos en el lote.

ASTER_euskadi_38m.asc
A partir de los datos de relieve de ASTER GDEM v2 abiertos en Global Mapper desde su conexión online, hemos encuadrado la zona de Euskadi y exportado en formato asc a la mayor resolución que permite este proceso (38,2 metros). El área es cuadrada y cubre la totalidad de Euskadi y zonas limítrofes, pues es una faena exportar justo por los límites de la Comunidad para los usuarios cercanos a las fronteras. Reproyectado a UTM zona 30 ETRS89.
Archivo de relieve con diferentes representaciones por defecto según el programa: a la izquierda abierto en QGIS en escala de grises sin sombreado; a la derecha abierto en Global Mapper con sombreado y coloreado de alturas.
Euskadi_areas.shp
Desde el mismo Global Mapper y a partir del relieve anterior hemos extraído los polígonos por alturas del relieve con un rango de 20 metros. En realidad se trata de un proceso similar a extraer las curvas de nivel, pero generando polígonos cerrados en vez de lineas, lo que nos da muchas posibilidades a la hora de trabajar con ellos.
Detalle de zona con los polígonos por alturas.
Euskadi_curvas.shp
Prácticamente igual que el anterior, esta vez se trata de las curvas de nivel de Euskadi, extraídas cada 20 metros. Procesos ambos muy sencillos, que Global Mapper ejecuta con enorme fluidez como ya hemos explicado en algún artículo. Tanto las áreas como las curvas están sacadas en UTM zona 30 ETRS89.
Vista general del archivo de curvas de nivel.
Relieve_color.tif
Abriendo el archivo de relieve asc en QGIS hemos generado un relieve coloreado con tintas hipsográficas representando las diferentes altitudes de la comunidad. Empleando la gama de colores standard con variaciones cada 200 metros, el resultado es el siguiente:
Creemos que la imagen tif puede dar juego como fondo de cartografía, o como base para diferentes productos.

Sombras.tif
También desde QGIS hemos realizado el clásico proceso hillshade, o relieve de sombras, sobre el archivo de relieve asc original. Con los parámetros por defecto del programa, este archivo es imprescindible a la hora de aplicar sombreados sobre otras cartografías, dándoles esa sensación de volumen que las distingue de los mapas planos.
Obviamente, la resoluciones del archivo de color y el de sombras son la misma del asc original (38,2 metros), apropiadas para trabajos a escalas intermedias. También están explicados en algún artículo del blog estos procesos.

Esperamos que este lote os pueda ser de alguna utilidad al trabajar sobre la zona de Euskadi. Lo tenéis disponible para descarga en la sección Mapa del Mes. En la siguiente imagen se aprecia la generosa cobertura de terreno que abarca este pack de relieve respecto a la comunidad. Saludos!!
Área cubierta por los archivos respecto al territorio de la Comunidad de Euskadi.

jueves, 28 de enero de 2016

MDT a partir de curvas de nivel.

Si en su día explicamos en este artículo el proceso para extraer las curvas de nivel a partir de un MDT, hoy vamos a hacer el proceso contrario, es decir, conseguir un MDT a partir de un archivo vectorial de curvas de nivel. Un sencillo y habitual ejercicio que ahora podemos hacer tanto en Global Mapper como en QGIS. Para ello vamos a utilizar las curvas de nivel en formato vectorial shape .shp incluidas en cualquiera de las hojas descargadas de la BTN25 de la que hablamos en el artículo anterior, recordando que ahora contienen información tridimensional (en el ejemplo de hoy las de la hoja 105-2 del MTN25).

- En Global Mapper.
Cargamos en el programa el archivo de curvas de nivel BTN25_ETRS_BCN0201L_CUR_NIV_line.shp (recordad que debe estar descomprimido en una carpeta con sus homónimos .prj, .shx y .dbf que son los que contienen atributos y georeferencia). Desde el menú Analysis/Create Elevation Grid from 3D Vector Data... accedemos a la ventana de opciones.
Podemos elegir un nombre para la capa o modificar algunos parámetros (básicamente la resolución o Grid Spacing. Interesante la opción Save Triangulation Network (TIN) as a Vector Layer si queremos generar una capa vectorial suplementaria con los polígonos TIN). Para este ejemplo lo dejamos por defecto como veis en la imagen pues el resultado es bueno. Pulsamos OK y en unos segundos Global Mapper nos carga en pantalla nuestra malla de elevaciones resultante.
MDT en Global Mapper
Ahora simplemente lo exportamos a alguno de los muchos formatos de elevación para MDT disponibles en Global Mapper (asc o geotiff son de los más comunes) y listo.

- En QGIS.
El proceso en QGIS es el siguiente. Cargamos nuestro vectorial con las curvas de nivel y a través del menú Ráster/Interpolación accedemos a la ventana del complemento de interpolación.
En dicho complemento habremos de completar la información de algunos campos, unos son obligatorios y otros opcionales para conseguir mayor resolución. Podéis probar con toda tranquilidad a variar los parámetros e ir viendo los resultados. Para este ejemplo yo lo he configurado como sigue:
Capas vectoriales debe contener nuestra capa de curvas. En Atributo de interpolación debemos seleccionar el campo que contenga los datos de altura de nuestras curvas. Marcamos Usar coordenada Z para interpolación. Y pulsamos Añadir para insertar los datos en la ventana. En la zona derecha de la ventana escogemos el Tamaño X e Y de celda (resolución en metros del MDT) y pulsamos Establecer a la extensión actual para acotar el terreno. Por último seleccionamos un nombre y carpeta para el archivo de salida y marcamos la opción Añadir resultado al proyecto para que cargue el resultado como capa. Pulsamos Aceptar.
QGIS genera entonces nuestro archivo de relieve (por defecto parece que en formato asc) y lo carga en pantalla (por defecto también en escala de grises). Desconozco porqué la escala de alturas que nos ofrece no se corresponde con la realidad (en amarillo en la imagen), pues nuestro vectorial contiene curvas de nivel desde la cota 1110 hasta la cota 2080 metros (no importa, he comprobado que las cotas están ahí).
Coloreamos entonces el MDT a nuestro gusto y le aplicamos sombreado (podéis ver cómo hacerlo en esta entrada sobre mapas hipsométricos) para que nos resulte más lógico y atractivo, y ya tenemos nuestro resultado final: MDT degradado por alturas generado a partir de curvas de nivel vectoriales. Precioso.
PD: He probado a realizar este mismo proceso con las curvas de nivel de la misma hoja anteriores a la BTN25 (lo que era la BCN25) y los MDT generados resultan planos (sin datos) tanto en Global Mapper como en QGIS. O sea, que lo de la nueva información tridimensional de la BTN25 parece que tiene su importancia...
Versiones utilizadas para este artículo: Global Mapper v16.1 y QGIS 2.12.3 Lyon.

lunes, 16 de febrero de 2015

Generar curvas de nivel con Global Mapper o QGIS.

Este es un artículo de los básicos que quizá debimos haber hecho hace tiempo, pues extraer las curvas de nivel de un Modelo Digital del Terreno (MDT ó DEM) es una de las operaciones más frecuentes en el tratamiento de vectoriales en cartografía. Como más vale tarde que nunca, vamos a explicar como conseguirlas utilizando Global Mapper o QGIS, que tienen esta función perfectamente implementada y de una forma muy sencilla.
Abrimos en Global Mapper el archivo de relieve, en este caso el MDT25 de la hoja 157 del MTN50, disponible como toda España en el Centro de Descargas del CNIG. El formato del archivo es .asc, perfectamente reconocible por Global Mapper sin ninguna operación previa.
MDT25 de la hoja 157 cargado en Global Mapper.
A continuación seleccionamos en el menú Analysis la opción Generate Contours (from Terrain Grid):
Y se nos abre la ventana para configurar todas nuestras opciones. Destacamos en el siguiente gráfico las más significativas de la pestaña Contour Options:
El resto de pestañas de la ventana son para optimización de las curvas (Simplification), para dividir el archivo resultante en varios (Tiling) o para seleccionar zonas concretas (Contour Bounds). Una vez establecidos los parámetros deseados pulsamos OK y el programa se pone a trabajar generando las curvas; para la captura de arriba en pocos segundos el resultado es el siguiente:
Capa de curvas de nivel añadida a nuestro MDT (desactivado para verlo mejor). Hemos pinchado con la herramienta Feature info en una de las curvas, como veis concretamente una que representa la altitud de 1020 metros.
Sólo nos restaría exportar la capa en cualquiera de los múltiples y clásicos formatos vectoriales que nos permite Global Mapper (.shp, .dwg, .dxf, .kml/kmz, .gpx, etc... ) para tenerla disponible como archivo y poder utilizarla en variados softwares según nuestro propósito.
Una manera muy sencilla de conseguir las áreas en vez de las curvas es la siguiente (botón derecho sobre el MDT en el Control Center):
Secuencia creación de áreas de alturas, en este caso le hemos dicho que con un rango de 50 metros.
En pocos segundos Global Mapper nos devuelve la siguiente capa:
Capa de áreas por altura. Seleccionada con la herramienta info un área correspondiente a 900 metros.
Por supuesto esta capa de áreas puede exportarse al formato vectorial deseado exactamente igual que la de líneas perteneciente a las curvas, siendo de esta forma enormemente sencillo elaborar degradados por altura del terreno en cualquier software SIG.

En QGIS es igual de sencillo conseguir nuestras curvas de nivel a partir de un MDT. Una vez cargado en el programa (el mismo MDT en formato .asc anterior), desde el menú Ráster llegamos a esta herramienta:
Seleccionamos nombre, formato y destino del archivo de salida; el intervalo en metros entre curvas; si queremos que contengan el atributo de altitud, y si el resultado se nos cargará en la vista de mapa. En pocos segundos QGIS nos genera el archivo y lo añade a nuestra vista como capa:
En nuestro canal YouTube os dejo un vídeo resumen de cómo generar las curvas de nivel con Global Mapper y QGIS. Incluye también cómo hacerlo con gvSIG y CompeGPS. Este último, para variar, es el más lento y el que más problemas da si nos salimos de su formato vectorial propio .mpv.