2012-07-25 87 views

回答

8

這是一個不需要任何工具箱的例子。

首先我們創建一個函數,使用Mercator projection轉換longitute /緯度位置。

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 

我們創造出一些位置:

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

接下來把從Wikipedia地圖,應用投影和疊加的標記:

% 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

哇!這很酷。謝謝Amro這樣一個詳細的答案! – Geni 2012-07-27 16:46:29

2

偉大的方式來繪製世界!

你只需要改變如下:

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

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

我相信這不是一個答案,它應該是對@Amro答案的編輯。 – 2015-08-03 11:43:48

2

荷銀的回答爲我工作,但我不得不做一些改變。

我正在使用Matlab 7.9和imshow是圖像處理工具箱的一部分。爲了顯示地圖,而無需使用imshow功能,我換成這一行:

​​

有了這一個:

image(img) 

和它的工作。