Search code examples
geolocationplotmatlabmatlab-figure

Plot Geo-Locations on Worldmap with Matlab


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.


Solution

  • 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
    

    output