2013-01-14 12 views
5

Używam "plot_google_map.m", który wykorzystuje interfejs API Map Google do wykreślenia mapy w tle aktualnej figury. Wygenerowana w ten sposób liczba automatycznie odświeża mapę po zbliżeniu, a ja dodałem kilka kodów, aby odświeżyć dane również podczas panoramowania.Jak programowo wywołać zdarzenie powiększenia w MatLab?

Teraz chciałbym programowo zmienić zakres osi bez użycia przycisków powiększania lub panoramowania, ale problem polega na tym, że mapa nie jest odświeżana automatycznie. Tak, myślę o programowaniu generowania zoomu lub panoramowania, ale nie znalazłem sposobu na zrobienie tego. Czy masz jakiś pomysł?

Pozwól, że rozwiążę moje pytanie. Na "plot_google_map.m" znajduje się podfunkcja, która jest callback zdarzenia powiększania.

function plot_google_map 
% Listen to Zoom events  
h = figure(1); plot(1:10); 
hz = zoom(h); 
set(hz,'ActionPostCallback',@mypostcallback); 

function mypostcallback(obj,evd) 
disp('Refreshes map data'); 

Co chcę zrobić, to wywołać tę podfunkcję poza "plot_google_map".
Każdy pomysł jest mile widziany i dziękuję za odpowiedzi z góry!

+0

Czy "pomoc osi" zawiera informacje potrzebne do powiększania? –

Odpowiedz

0

Zakładając, że osie uchwyt jest hAxes, następnie można wykonać powiększenia zmieniając xLim i yLim właściwości swoich osiach zamiast stosunku powiększanie, jak następuje:

Jeżeli działka jest za pomocą osi x od 0-100 następnie można powiększyć zakres szczególności sub OG 0-100 na przykład:

set(hAxes,'xLim',[20 40]) 

a także dla osi Y można powiększać na konkretnym przedziale Y:

set(hAxes,'xLim',[30 70]) 

a jeśli chcesz, aby powiększyć na określonym obszarze na działce, na przykład x [20-50], y [10-50], można to zrobić poprzez wykonanie dwóch poprzednich działań takich jak:

set(hAxes,'xLim',[20 50]) 
set(hAxes,'yLim',[10 50]) 


Więc, zmienić wartości toporem w zależności od wielkości działki lub obrazu xLim i yLim, i tak rzeczywiście powiększanie pracy z osiami.

Można nawet spróbować tego skryptu Demo:

clear;clc; 
figure; 
h = axes; 
y = sin(0:2*pi/100:pi); 
plot(y); 
%// ============================= 
pause(1); 
set(h , 'xlim' , [20 80]); 
%// ============================= 
pause(1); 
set(h , 'xlim' , [30 40]); 
%// ============================= 
pause(1); 
set(h , 'xlim' , [10 100]); 
%// ============================= 
pause(1); 
set(h , 'ylim' , [.1 .4]); 
%// ============================= 
pause(1); 
set(h , 'ylim' , [.2 .7]); 
%// ============================= 
pause(1); 
set(h , 'ylim' , [.3 .9]); 
%// ============================= 
pause(1); 
set(h , 'ylim' , [.1 .2]); 
set(h , 'xlim' , [10 80]); 
%// ============================= 
pause(1); 
set(h , 'ylim' , [.3 .7]); 
set(h , 'xlim' , [40 90]); 
%// ============================= 
+0

Dziękuję Sameh. Próbowałem twoich sugestii, ale ustawienie "xTick" zmienia tylko etykietowanie osi. –

+0

@SeungwooNoh .. Tak mi przykro, że to nie 'xTick' ani' yTick', to 'xLim' i' yLim'. –

+0

@SeungwooNoh, naprawiłem kod i dodałem wersję demonstracyjną do powiększania osi. –

3

słyszałeś o poleceniu zoom?

>> help zoom 
zoom Zoom in and out on a 2-D plot. 

Wygląda na to, że program rozpoznaje powiększanie.

+0

Dziękuję bdecaf, ale nie znalazłem jeszcze sposobu na rozwiązanie tego problemu. Dodałem więc przykładowy kod, aby wyjaśnić mój problem. Proszę też o to popatrzeć. –

+1

, więc jeśli otrzymasz oryginalny uchwyt postaci używając 'get (hz, 'ActionPostCallback')' - nie powinieneś być w stanie go wykonać? – bdecaf

+0

Świetnie! To było dokładnie to, czego szukałem. Teraz wiem, jak uzyskać uchwyt wywołania zwrotnego powiększenia i wykonać go za pomocą uchwyconego uchwytu. Dziękuję bdecaf. –

0

Dlaczego po prostu nie wywoływać ponownie plot_google_map po każdej zmianie zakresu osi? Spowoduje to aktualizację mapy w nowym zakresie.

Powiązane problemy