Sto provando a contrassegnare alcune migliaia di posizioni geografiche sulla mappa del mondo con MATLAB. Ho le latitudini e le longitudini di quelle posizioni. C'è un buon modo per farlo? Grazie.Stampa geo-localizzazioni su Worldmap con Matlab
risposta
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
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
Credo che questa non sia una risposta, dovrebbe essere una modifica alla risposta di @Amro. –
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.
Wow! Questo è figo. Grazie Amro per una risposta così dettagliata! – Geni