On 8 Ott, 00:09, Andrea <
andrea@biomed> wrote:
> leonardo.magis...@gmail.com ha scritto:
>
>
>
> > Salve,
> > qualcuno mi può aiutare con un problema su Matlab?
> > Ho disegnato la mappa dell'italia con la funzione
>
> > lat_limit = [34 48];
> > lon_limit = [4.5 20.5];
> > worldmap(lat_limit, lon_limit);
>
> > adesso vorrei disegnarci sopra una spezzata. Ho trovato la funzione
> > geoshow(lat, lon). Vorrei sapere se qualcuno sa come posso colorare
> > questa linea in funzione di alcuni valori che stabilisco per ciascun
> > punto della linea. Mi spiego meglio: se al primo punto assegno un
> > valore alto la linea deve comincirae col rosso per poi cambiare colore
> > verso le tinte celesti verso i punti cui assegno valori più bassi (in
> > accordo alla colormap di default).
>
> > E' possibile impostare opportuni parametri alla funzione geoshow?
> > Oppure occorre utilizzare un'altra funzione?
>
> > Grazie.
>
> Copio e incollo dalla guida in linea di geoshow
>
> % Display the EGM96 geoid heights.
>
> % Create a figure with an Eckert projection.
> figure
> axesm eckert4; framem; gridm;
> axis off
>
> % Display the geoid as a texture map.
> load geoid
> h=geoshow(geoid, geoidrefvec, 'DisplayType','texturemap');
>
> % Set the Z data to the geoid height values, rather than a
> % surface with zero elevation.
> set(h,'ZData',geoid);
> light; material(0.6*[ 1 1 1]);
>
> % Create a colorbar and title.
> set(gca,'dataaspectratio',[ 1 1 200]);
> hcb = colorbar('horiz');
> set(get(hcb,'Xlabel'),'String','EGM96 geoid heights in m.')
>
> % Mask out all the land.
> geoshow('landareas.shp', 'FaceColor', 'black');
> zdatam(handlem('patch'), max(geoid(:)));
>
> Quindi quello che ti serve è solo definire i valori di altezza in geoid,
> mettendo a una costante bassa (o forse anche NaN) tutto ciò che non
> appartiene alla spezzata. Le ampiezze relative alle coordinate della
> spezzata saranno i valori reali di ampiezza.
>
> Se la colormap in uso non ti va bene, o usi una map diversa (hot, cold,
> grey, hsv, etc), o usi colormap editor, oppure te la modifichi a mano (è
> una matrice Nx3 in rgb )
>
> Perdonami se c'è qualche imprecisione ma sono al collasso mentale.
>
> Saluti, Andrea.
Innanzitutto grazie per l'attenzione e per la risposta!
Ho, però, qualche difficoltà nell'applicare i consigli che mi dai e
per questo approfitto ancora della tua gentilezza.
Ti posto parte del codice che ho già scritto:
lat_limit = [34 48];
lon_limit = [4.5 20.5];
h = worldmap(lat_limit, lon_limit);
set(1, 'Units', 'normalized', 'Position', [0 0 1 1]);
hTitle = get(h,'Title');
h3 = xlabel('Longitude [°]');
h4 = ylabel('Latitude [°]');
percorso = [45.6306 8.7281 120 ;
45.679750 8.690766 533.4;
45.718092 8.645112 914.4;
45.789492 8.738461 1219.2;
45.722862 8.869094 1524;
45.496611 8.931896 2500;
44.964444 8.970278 4500;
44.9644 8.9703 6000;
44.4244 9.0821 6000];
upLimit = max(percorso (:,3));
geoshow(percorso (:,1), percorso (:,2), 'LineWidth',3 );
cb = colorbar;
set(cb,'YLim', [0 upLimit]);
imagesc(cb, [0 upLimit]);
cb = colorbar;
set(cb,'XColor','white','YColor','white');
Come potrai vedere questo codice traccia una spezzata di colore nero.
Io vorrei che i colori sulla spezzata fossero assegnati in accordo ai
valori di altitudine
dei punti indicati nella terza colonna della matrice percorso ed in
relazione, ovviamente, alla colorbar visualizzata.
Ti ringrazio,
Leonardo