2012-07-25 15 views

risposta

8

Ecco un esempio che non richiede alcuna casella degli strumenti.

Per prima cosa viene creata una funzione che converte posizioni longitute/latitudine utilizzando Mercator projection.

function [x,y] = mercatorProjection(lon, lat, width, height) 
    x = mod((lon+180)*width/360, width) ; 
    y = height/2 - log(tan((lat+90)*pi/360))*width/(2*pi); 
end 

creiamo alcune località:

% GPS positions (latitude,longitude) of some markers 
data = [ 
    -22.976730, - 43.195080 ; 
    55.756950, 37.614975 ; 
    33.605381, - 7.631940 ; 
    35.670479, 139.740921 ; 
    51.506325, - 0.127144 ; 
    40.714550, - 74.007124 ; 
    -33.869629, 151.206955 ; 
    -26.204944, 28.040035 ; 
    37.777125, -122.419644 ; 
    30.083740, 31.255360 ; 
     6.439180, 3.423480 
]; 
labels = { 
    'Rio de Janeiro' 
    'Moscow' 
    'Casablanca' 
    'Tokyo' 
    'London' 
    'New York' 
    'Sydney' 
    'Johannesburg' 
    'San Francisco' 
    'Cairo' 
    'Lagos' 
}; 

successivo carichiamo una mappa da Wikipedia, applicare la proiezione e sovrapporre i marcatori:

% world map in Mercator projection 
fname = 'https://upload.wikimedia.org/wikipedia/commons/thumb/7/74/Mercator-projection.jpg/773px-Mercator-projection.jpg'; 
img = imread(fname); 
[imgH,imgW,~] = size(img); 

% Mercator projection 
[x,y] = mercatorProjection(data(:,2), data(:,1), imgW, imgH); 

% plot markers on map 
imshow(img, 'InitialMag',100, 'Border','tight'), hold on 
plot(x,y, 'bo', 'MarkerSize',10, 'LineWidth',3) 
text(x, y, labels, 'Color','w', 'VerticalAlign','bottom', 'HorizontalAlign','right') 
hold off 

output

+0

Wow! Questo è figo. Grazie Amro per una risposta così dettagliata! – Geni

2

Ottimo modo per trama il mondo!

Devi solo cambiare la seguente:

imshow(I, 'InitialMag',100, 'Border','tight'), hold on 

in

imshow(img, 'InitialMag',100, 'Border','tight'), hold on 
+2

Credo che questa non sia una risposta, dovrebbe essere una modifica alla risposta di @Amro. –

2

risposta di Amro ha funzionato per me, ma ho dovuto fare alcune modifiche.

Sto usando Matlab 7.9 e imshow è parte di Image Processing Toolbox. Al fine di mostrare la mappa senza utilizzare la funzione imshow, ho sostituito questa linea:

imshow(img, 'InitialMag',100, 'Border','tight') 

Con questo:

image(img) 

e ha funzionato.