I am trying to mark a few thousands of geo-locations on the world-map with matlab. I have the latitudes and longitudes of those locations. Is there any good way to do this? Thanks.
Here is an example that doesn't require any toolbox.
First we create a function that converts longitute/latitude locations using the 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
We create some locations:
% 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'
};
Next we load a map from Wikipedia, apply the projection and overlay the markers:
% 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
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With