Участок гео-локации на карте мира с Matlab
Я пытаюсь отметить несколько тысяч гео-местоположений на карте мира с помощью matlab. У меня есть широта и долгота этих мест. Есть ли хороший способ сделать это? Спасибо.
3 ответов
вот пример, который не требует никаких инструментов.
Сначала мы создаем функцию, которая преобразует местоположения longitute / latitude с помощью Меркатора проекции.
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'
};
Далее мы загружаем карты от Википедия, применить проекцию и наложить маркеры:
% 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
отличный способ построить мир!
вам просто нужно изменить следующее:
imshow(I, 'InitialMag',100, 'Border','tight'), hold on
на
imshow(img, 'InitialMag',100, 'Border','tight'), hold on
ответ Амро сработал для меня, но мне пришлось внести некоторые изменения.
Я использую Matlab 7.9 и imshow является частью панели инструментов обработки изображений. Для того, чтобы показать карту без использования imshow