Нанести стрелку на линию между двумя геопространственными точками на Matlab - PullRequest
4 голосов
/ 19 октября 2011

Я пытаюсь нанести стрелки на линии между двумя геопространственными точками (широтой и долготой) на Matlab, но безуспешно. Чтобы нарисовать только линии без стрелок, я использую следующее:

path = loadGPSPoints();
[lttrk,lntrk] = track(path);    
geoshow(lttrk,lntrk,'DisplayType','line','color','r');

Функция отслеживания строит список координат, который позволяет функции геошоу построить ряд линий между этими координатами. Однако я не контролирую эти линии. Они, видимо, один объект. Поэтому я не могу добавить стрелки в конец каждой точки пути.

Функция annotation () не работает, поскольку она не добавляет аннотацию со стрелкой как часть карты. То есть, например, при увеличении или уменьшении карты стрелка смещается.

Я также пробовал использовать функцию arrow () из http://www.mathworks.com/matlabcentral/fileexchange/278, но она, видимо, не работает с картами.

Наконец, я посмотрел на функцию quiverm (), но она не позволяет мне указывать две разные координаты. Его применение кажется несовместимым с тем, что мне нужно.

Есть еще идеи?

1 Ответ

4 голосов
/ 19 октября 2011

Чтобы построить материал вручную на фигуре geoshow, нужно использовать mfwdtran для преобразования данных широты и долготы в систему координат фигуры. Тогда вы можете использовать arrow как обычно. Вот пример построения на примере из http://www.mathworks.com/help/toolbox/map/ref/track.html:

load coast
axesm('mercator','MapLatLimit',[28 47],'MapLonLimit',[-10 37],...
    'Grid','on','Frame','on','MeridianLabel','on','ParallelLabel','on')
geoshow(lat,long,'DisplayType','line','color','b')
waypoints = [36,-5; 36,-2; 38,5; 38,11; 35,13; 33,30; 31.5,32];
[X, Y] = mfwdtran(waypoints(:,1),waypoints(:,2));
arrow([X(1:(end-1)) Y(1:(end-1))], [X(2:end) Y(2:end)])

enter image description here

Кстати, вы также можете указать свойство Marker в своих вызовах на geoshow. Например:

geoshow(waypoints(:,1),waypoints(:,2),'DisplayType','line','Marker','>','color','r')

enter image description here

...