Anem a la Muntanya

En aquesta entrada utilitzarem els Models Digitals de Terreny  (DTM) d’una determinada àrea geogràfica per fer-ne la visualització en Matlab i proposar una petita pràctica associada.

El passat dia 19 de Juliol, vaig formar part del tribunal que valorava la tesi doctoral d’en Oscar Argudo Medrano, del grup ViRVIG del departament de Computer Science de la FIB, codirigit per C. Andujar i A. Chica. A més de tractar-se d’un magnífic treball, em va inspirar a preparar una pràctica pels meus estudiants i que espero trobeu interessant.

1. Les dades

La representació digital d’un terreny, l’hem d’entendre com una quadrícula que pot ser de diferents resolucions 2×2 m, 5×5 m, 15×15 m, etc. i que per cada node d’aquesta quadrícula disposem també de la seva alçada. Això permet pensar un terreny com una superfície en 3D formada per elements quadrilàters dels que sabem l’alçada a cada vèrtex.

La primera cosa necessària per poder representar un terreny son les dades. En el nostre cas disposem de les dades de l’Institut Cartogràfic i Geològic de Catalunya (ICGC) , amb dades de 15, 5 i 2m de resolució de tota Catalunya. A nivell estatal, també l’Instituto Geográfico Nacional té dades de 1000, 200, 25 i 5m de resolució. També hi ha d’altres  llocs webs on trobar DTM a nivell mundial.

1.1 El Pedraforca

En el nostre cas, utilitzarem una quadrícula de 5x5m de resolució i agafarem 400×400 elements de la zona de la muntanya del Pedraforca al Berguedà. De manera que la zona que visualitzarem és un terreny de 2×2 km al voltant del cim del Pedraforca.

2. Visualització de les dades amb Matlab

Volem utilitzar el Matlab per poder visualitzar terrenys. Distingirem entre les dades d’alçada i la superfície que defineixen. Baixeu les dades d’aquest enllaç.

2.1 Visualització de les alçades

El fitxer DTM de dades del Pedraforca és un fitxer ascii que hem anomenat pedraforca_heights.data. Aquest fitxer es correspon a una matriu numèrica de 400×400 elements amb l’alçada corresponent de cada element.

%% Càrrega d'un Model Digital de Terreny
%
% Carreguem les dades del fitxer utilitzant la funció dlmread de Matlab
% (escriu en linia de comandes  >>doc dlmread, per més informació) 
% 
M=dlmread('pedraforca_heights.data');
[m,n]=size(M)
%visualitzem les dades com una imatge
imshow(M,[]); 

Tota matriu en Matlab es pot tractar com una imatge i per tant mostrar-la amb la funció imshow . En aquest cas, el resultat és la imatge de grisos que teniu a continuació. Els punts més blancs es corresponent amb els d’alçada màxima i els més foscos amb els punts més baixos.

Aquesta imatge es correspon amb la que s’obté des de molta alçada (ortogràfica) i que es pot obtenir també al ICGC, però que no té aquesta informació d’alçades i de vegades costa d’interpretar.

2.2 Visualització de la superficie

Per poder interpretar la matriu de dades com una superfície, cal dir-li al Matlab que estem treballant en una quadrícula (grid) i per això cal afegir les línies següents al codi anterior:

%% Càrrega d'un Model Digital de Terreny
%
% Carreguem les dades del fitxer utilitzant la funció dlmread de Matlab
% (escriu en línia de comandes  >>doc dlmread, per més informació) 
% 
M=dlmread('pedraforca_heights.data');
[m,n]=size(M);
%visualitzem les dades d'alçada com una imatge
imshow(M,[]); 

%define and visualize the surface
x=1:n; %all points in the x-axis
y=1:m; %all points in the y-axis
[X,Y] = meshgrid(x,y); %create a grid of points
Z = M; %height values
figure();
surf(X,Y,Z); %visualize the surface

El resultat obtingut serà:

(recordeu que aquesta imatge és 3D i la podeu rotar des de la finestra del Matlab activant la icona de girar de la finestra del dibuix).

3. Pràctica pels estudiants

Una vegada hem entès les dades de que disposem, podem plantejar la pràctica de posar una boleta a un punt determinat de la superfície i deixar-la caure a veure on es para o per on sortirà de la nostra part de muntanya representada. Ens guardarem la trajectòria que segueix la bola per poder-la visualitzar al final.

3.1 Algoritme

La idea és simple i consisteix en els passos que expliquem a continuació:

1. Ens situem en una component de la nostra matriu (i,j)  que tindrà una alçada h_act. Iniciem el camí amb aquesta component.

2. Mirem els veïns laterals (i+1,j), (i-1,j), (i,j+1), (i,j-1) i les seves alçades.

3. La nova posició serà la del veï d’alçada mínima, sempre que sigui inferior a h_act.

4. En cas afirmatiu, actualitzem la posició de la bola, l’afegim al camí i tornem a començar. En cas negatiu,  s’acaba la trajectòria.

Obs. Si la nova posició es correspon a una component de la frontera (fila o columna, igual a 1 o a 400).  S’atura la trajectòria.

(si algú vol el codi final, que me’l demani…)

3.2 Resultats

Com a verificació de la pràctica, si iniciem la bola posant-la a la component (200,200) a una alçada inicial de 2362.5m, el camí recorregut passa per 246 components i surt per la component (244,1) a una alçada de 1790.8m. La imatge de la trajectòria la podeu veure aquí sota

Hits: 207

Deixa un comentari

L'adreça electrònica no es publicarà. Els camps necessaris estan marcats amb *