You can do this easily with the standard matlab function sph2cart. Treat the lines of latitude and longitude separately like this:
R = 6371;
latspacing = 10;
lonspacing = 20;
[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
[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
Best Answer