Professional Documents
Culture Documents
Problema
Se pide desarrollar una rutina en Octave-Matlab que lea el fichero mdt25.asc y realice una
representacin tridimensional del mismo.
Solucin
Si abrimos el fichero mdt25.asc con un editor de texto, veremos que tiene seis lneas de
metadatos al principio, y luego vienen las verdaderas lneas de datos. Los metadatos del
fichero mdt25.asc son los siguientes:
NCOLS, NROWS: Nmero de filaas y columnas de la rejilla rectngular en que se ha
dividido el terreno, en este caso 601x410
XLLCORNER, YLLCORNER: Coordenadas UTM de la esquina inferior izquierda del MDE
CELLSIZE: Tamao del lado de la celda, en este caso cuadrada de lado 25 metros
NODATA_VALUE: Las celdas que tengan este valor quire decir que no hay dato de altura
de la celda.
En la solucin que vamos a desarrollar aqu no haremos uso de los metadatos, salvo para
saber el nmero de filas y columnas de la matriz, dato que miraremos abriendo el fichero
con un editor de texto. La solucin propuesta abre el fichero mdt25.asc, se salta las
primeras seis lneas del fichero utilizando fgets() y a continuacin lee los valores de las
alturas en una matriz. Dada la forma de trabajar de la funcin fscanf(), que va leyendo
valores y rellenando por columnas, es necesario leer la matriz con tamao [columnasxfilas]
y luego trasponerla. A continuacin se muestra el cdigo de la rutina Octave, y de la figura
resultante:
functionreadmdt(filename)
%LeeunficherorasterenformatoASC
file=fopen(filename,'r');
iffile<3
fprintf('Erroralabrirfichero%s',filename)
return;
end
fori=1:6
metadato=fgets(file);
fprintf("%s",metadato)
end
filas=410;
columnas=601;
A=fscanf(file,'%f',[columnas,filas]);
A=A';
holdoff;
close;
holdon;
xlim([0,610]);
ylim([0,410]);
xlabel('x');
ylabel('y');
view(240,60);
meshz(A);
fclose(file);
end