You have collected your data, loaded it into Matlab , analyzed everything to death, and now you want to make a simple map showing how it relates to the world.
But you can't.
Instead you have to figure out how to save all your data, and then read it intoanother program (like, for example GMT ),and then spend all that extra timefiguring out why it doesn't give you whatyou expected it would...
No more!
Announcing M_Map v1.3e!
- Routines to project data in 18 different spherical projections (and determineinverse mappings)
- A grid generation routine to make nice axes with limits either in lat/long termsor in planar X/Y terms.
- A coastline database (with 1/4 degree resolution)
- A global elevation database (1 degree resolution)
- Hooks into freely available high-resolution coastline and bathymetry databases
M_Map is now use at almost 1800 locations around the world!
New in release 1.2 are
- Built-in functions for drawing lines, text, and quiver plots in long/lat coords
- Built-in functions for contouring data (filled and line contours) in long/lat coords
- Hooks into a 5-minute global bathymetry ( TerrainBase ) available from the net.
- Fancy quiver plots, thanks to E. Firing (see example 8)
- Gall-Peters projection (handy for large tropical areas)
- Fancy outline boxes! (see example 2 and example 6)
- High-resolution coastlines! (through hooks into the nested set of coastlinesat different resolutions making up the Global Self-consistent HierarchicalHigh-resolution Shoreline Database (GSHHS) used by GMT (see example 9)
- Instructions on how to use the new Sandwell and Smith bathymetry
- Hammer-Aitoff (example 11) and Mollweide projections (example 4)
- m_patch primitive
- m_scale primitive to allow drawing of maps at a required scale
- True elliptical UTM projection (thanks to P. Lemmond)
- m_track for drawing tracklines with time/date annotation (thanks to P. Lemmond)(example 10)
- m_plotbndry - hooks into an online database of political boundaries (Thanks to M. Mann)
- m_range_rings primitive to draw range rings (just great for nuclear weapon destructionradii and seismic travel-time data - see example 11).
- Extended usefullness of m_ungrid to allow removal of any specific plot element bya command line option.
How to get M_Map
You can download the M_Map toolbox either as a gzipped tar-file , or as zip archive (Click on these links to download). Both arearound 250k in size. Once you have this archive, read the Getting started section of the User's guide tocorrectly install this toolbox, and sections 9and 10.1 to install TerrainBase and GSHHSrespectively.
A number of examples have been given to highlight thevarious capabilities of M_Map.
User's guide
- Getting started
- Specifying projections
- Azimuthal projections
- Cylindrical and Pseudo-cylindrical projections
- Conic projections
- Miscellaneous global projections
- Yeah, but which projection should I use?
- Map scales
- Coastlines and Bathymetry
- Coastline options
- Topography/Bathymetry options
- Customizing the axes
- Grid lines and labels
- Titles and x/ylabels
- Adding your own data
- Drawing lines, text, arrows, patches and contours
- Drawing tracklines
- Drawing range rings
- Converting longitude/latitude to projection coordinates
- Converting projection coordinates to longitude/latitude
- More complex plots
- Removing data from a plot
- Adding your own coastlines
- DCW political boundaries
- Adding your own topography/bathymetry
- Sandwell and Smith Bathymetry
- Using TerrainBase 5-minute global bathymetry/topography
- Using the GSHHS high-resolution coastline database
- Installing GSHHS
- Using GSHHS effectively
- M_Map toolbox contents and description
- Known Problems and Bugs
- Changes since last release
Examples
1. M_Map Logo
m_proj('ortho','lat',48','long',-123');m_coast('patch','r');m_grid('linest','-','xticklabels',[],'yticklabels',[]);patch(.55*[-1 1 1 -1],.25*[-1 -1 1 1]-.55,'w');text(0,-.55,'M\_Map','fontsize',25,'color','b',... 'vertical','middle','horizontal','center');set(gcf,'units','inches','position',[2 2 3 3]);set(gcf,'paperposition',[3 3 3 3]);
2. Lambert Conformal Conic projection of North American Topography
m_proj('lambert','long',[-160 -40],'lat',[30 80]);m_coast('patch',[1 .85 .7]);m_elev('contourf',[500:500:6000]);m_grid('box','fancy','tickdir','in');colormap(flipud(copper));
3. Stereographic projection of North Polar regions
% Note that coastline is drawn OVER the grid because of the order in which% the two routines are calledm_proj('stereographic','lat',90,'long',30,'radius',25);m_elev('contour',[-3500:1000:-500],'edgecolor','b');m_grid('xtick',12,'tickdir','out','ytick',[70 80],'linest','-');m_coast('patch',[.7 .7 .7],'edgecolor','r');
4. Two Interrupted Projections of the World's Oceans
subplot(211);Slongs=[-100 0;-75 25;-5 45; 25 145;45 100;145 295;100 290];Slats= [ 8 80;-80 8; 8 80;-80 8; 8 80;-80 0; 0 80];for l=1:7, m_proj('sinusoidal','long',Slongs(l,:),'lat',Slats(l,:)); m_grid('fontsize',6,'xticklabels',[],'xtick',[-180:30:360],... 'ytick',[-80:20:80],'yticklabels',[],'linest','-','color',[.9 .9 .9]); m_coast('patch','g');end;xlabel('Interrupted Sinusoidal Projection of World Oceans');% In order to see all the maps we must undo the axis limits set by m_grid calls:set(gca,'xlimmode','auto','ylimmode','auto');subplot(212);Slongs=[-100 43;-75 20; 20 145;43 100;145 295;100 295];Slats= [ 0 90;-90 0;-90 0; 0 90;-90 0; 0 90];for l=1:6, m_proj('mollweide','long',Slongs(l,:),'lat',Slats(l,:)); m_grid('fontsize',6,'xticklabels',[],'xtick',[-180:30:360],... 'ytick',[-80:20:80],'yticklabels',[],'linest','-','color','k'); m_coast('patch',[.6 .6 .6]);end;xlabel('Interrupted Mollweide Projection of World Oceans');set(gca,'xlimmode','auto','ylimmode','auto');
5. Oblique Mercator Projection with quiver and contour data
%% Nice looking data[lon,lat]=meshgrid([-136:2:-114],[36:2:54]);u=sin(lat/6);v=sin(lon/6);m_proj('oblique','lat',[56 30],'lon',[-132 -120],'aspect',.8);subplot(121);m_coast('patch',[.9 .9 .9],'edgecolor','none');m_grid('tickdir','out','yaxislocation','right',... 'xaxislocation','top','xlabeldir','end','ticklen',.02);hold on;m_quiver(lon,lat,u,v);xlabel('Simulated surface winds');subplot(122);m_coast('patch',[.9 .9 .9],'edgecolor','none');m_grid('tickdir','out','yticklabels',[],... 'xticklabels',[],'linestyle','none','ticklen',.02);hold on;[cs,h]=m_contour(lon,lat,sqrt(u.*u+v.*v));clabel(cs,h,'fontsize',8);xlabel('Simulated something else');
6. Miller Projection with Great Circle
% Plot a circular orbitlon=[-180:180];lat=atan(tan(60*pi/180)*cos((lon-30)*pi/180))*180/pi;m_proj('miller','lat',82);m_coast('color',[0 .6 0]);m_line(lon,lat,'linewi',3,'color','r');m_grid('linestyle','none','box','fancy','tickdir','out');
7. Lambert Conformal Projection with high-resolution bathymetry of Western Mediterranean
m_proj('lambert','lon',[-10 20],'lat',[33 48]);m_tbase('contourf');m_grid('linestyle','none','tickdir','out','linewidth',3);
8. Demonstration of fancy vectors
m_vec % See code in m_vec.m for details
9. Zoom in on Prince Edward Island to show different coastline resolutions
% Example showing the default coastline and all of the different resolutions % of GSHHS coastlines as we zoom in on a section of Prince Edward Island.clfaxes('position',[.35 .6 .37 .37]);m_proj('albers equal-area','lat',[40 60],'long',[-90 -50],'rect','on');m_coast('patch',[0 1 0]);m_grid('linest','none','linewidth',2,'tickdir','out','xaxisloc','top','yaxisloc','right');m_text(-69,41,'Standard coastline','color','r','fontweight','bold');axes('position',[.09 .5 .37 .37]);m_proj('albers equal-area','lat',[40 54],'long',[-80 -55],'rect','on');m_gshhs_c('patch',[.2 .8 .2]);m_grid('linest','none','linewidth',2,'tickdir','out','xaxisloc','top');m_text(-80,52.5,'GSHHS\_C (crude)','color','m','fontweight','bold','fontsize',14);axes('position',[.13 .2 .37 .37]);m_proj('albers equal-area','lat',[43 48],'long',[-67 -59],'rect','on');m_gshhs_l('patch',[.4 .6 .4]);m_grid('linest','none','linewidth',2,'tickdir','out');m_text(-66.5,43.5,'GSHHS\_L (low)','color','m','fontweight','bold','fontsize',14);axes('position',[.35 .05 .37 .37]);m_proj('albers equal-area','lat',[45.8 47.2],'long',[-64.5 -62],'rect','on');m_gshhs_i('patch',[.5 .6 .5]);m_grid('linest','none','linewidth',2,'tickdir','out','yaxisloc','right');m_text(-64.4,45.9,'GSHHS\_I (intermediate)','color','m','fontweight','bold','fontsize',14);axes('position',[.55 .23 .37 .37]);m_proj('albers equal-area','lat',[46.375 46.6],'long',[-64.2 -63.7],'rect','on');m_gshhs_h('patch',[.6 .6 .6]);m_grid('linest','none','linewidth',2,'tickdir','out','xaxisloc','top','yaxisloc','right');m_text(-64.18,46.58,'GSHHS\_H (high)','color','m','fontweight','bold','fontsize',14);
10. Tracklines and UTM projection
m_proj('UTM','long',[-72 -68],'lat',[40 44]);m_gshhs_i('color','k');m_grid('box','fancy','tickdir','in');% fake up a tracklinelons=[-71:.1:-67];lats=60*cos((lons+115)*pi/180);dates=datenum(1997,10,23,15,1:41,zeros(1,41));m_track(lons,lats,dates,'ticks',0,'times',4,'dates',8,... 'clip','off','color','r','orient','upright');
11. Range rings
m_proj('hammer','clong',170); m_grid('xtick',[],'ytick',[],'linestyle','-'); m_coast('patch','g'); m_line(100.5,13.5,'marker','square','color','r'); m_range_ring(100.5,13.5,[1000:1000:15000],'color','b','linewi',2); xlabel('1000km range rings from Bangkok');
Last changed 18/Dec/1998. Questions and comments to rich@ocgy.ubc.ca