2012-07-25 26 views

Respuesta

8

Aquí hay un ejemplo que no requiere ninguna caja de herramientas.

Primero creamos una función que convierta las ubicaciones de longitute/latitude usando 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 

Creamos algunas localidades:

% 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' 
}; 

continuación cargar un mapa de Wikipedia, aplique la proyección y la superposición de los marcadores:

% 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

¡Guau! Eso es genial. ¡Gracias Amro por una respuesta tan detallada! – Geni

2

Gran manera de trama el mundo!

Sólo hay que cambiar lo siguiente:

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

en

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

Creo que esta no es una respuesta, debería ser una edición de la respuesta de @Amro. –

2

respuesta de Amro trabajó para mí, pero tenía que hacer algunos cambios.

Estoy usando Matlab 7.9 y imshow es parte de Image Processing Toolbox. Con el fin de mostrar el mapa sin utilizar la función imshow, que sustituye esta línea:

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

Con éste:

image(img) 

y funcionó.

Cuestiones relacionadas