How to get the mouse coordinates in a 3D spherical plot?

I plot the globe in 3D, and would like to get the latitude and longtitude of the current mouse position.
I tried to use get(gca,'CurrentPoint'), and I don't know how to map those coordinates to the equivalent latitude and longtitude on the map. I think the camera view has some effect as well.
figure('units','normalized','outerposition',[0 0 1 1]);
h=axesm ('globe','Grid', 'on');
axis off;
base = zeros(180,360); baseref = [1 90 0];
geoshow(base,baseref,'FaceColor','white')
load coast; % load all the map lines
plotm(lat, long); % plot the world maps
view([90 0 0])

 Accepted Answer

If you have x,y,z coordinates use spherical system coordinate:
theta is longitude (from equator), phi - latitude
Latitude:
lat1 = asind(z); % asin() [0 .. 90]degree
Longitude
t = asind(y/cosd(lat1));
Choose angle for longitude (0 .. 360)
t = [t, 180-t, 180+t, 360-t];
x1 = cosd(t)*cosd(lat1);
y1 = sind(t)*cosd(lat1);
long1 = t( abs(x-x1+y-y1) < 1e-3 );

3 Comments

Thank you Darova, I like the way that you described for finding the longitude angle.
I tried the code, but unfortunately, it is not working well. I think it is an issue of finding the correct x,y,z.
I think the correct x,y,z, should be those inside the globe. While the get current point function returns the external x,y,z of the plotted 3D shape.
I picked some points with Data Cursor and export them to workspace
Thank you Darova, I understand now why it works compared to what I was testing.
I think the issue now is only about finding a continues way of mapping the current mouse location to its equivalent data cursor values. The globe projection makes it very different.

Sign in to comment.

More Answers (0)

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!