Prashant Kumar answered .
2025-07-04 22:11:12
You can do this easily with the standard matlab function sph2cart. Treat the lines of latitude and longitude separately like this:
R = 6371; % earth radius in km
latspacing = 10;
lonspacing = 20;
% lines of longitude:
[lon1,lat1] = meshgrid(-180:lonspacing:180,linspace(-90,90,300));
[x1,y1,z1] = sph2cart(lon1*pi/180,lat1*pi/180,R);
plot3(x1,y1,z1,'-','color',0.5*[1 1 1])
hold on
% lines of latitude:
[lat2,lon2] = meshgrid(-90:latspacing:90,linspace(-180,180,300));
[x2,y2,z2] = sph2cart(lon2*pi/180,lat2*pi/180,R);
plot3(x2,y2,z2,'-','color',0.5*[1 1 1])
axis equal tight off

And since you can see all the way through the globe, perhaps you want to put an opaque sphere inside the globe. Do that like this. I'm making the sphere 0.99 times the size of the Earth just to make sure it doesn't overlap the lines of lat and lon:
[X,Y,Z] = sphere(100);
surf(X*R*.99,Y*R*.99,Z*R*.99,'facecolor','w','edgecolor','none')

For a little context, I'll also convert national borders to cartesian coordinates in the same way. You'll need the data from my borders function for this part:
C = load('borderdata.mat');
for k = 1:246
[xtmp,ytmp,ztmp] = sph2cart(deg2rad(C.lon{k}),deg2rad(C.lat{k}),R);
plot3(xtmp,ytmp,ztmp,'k')
end

Not satisfied with the answer ?? ASK NOW