MATLAB3种方式绘制地图(m_map/mapshow/geoshow)
MATLAB是著名的科学软件,具有绘图、编程、仿真等强大的功能。现在介绍MATLAB绘制中国地图的三种方式,分别是(1)使用m_map工具箱命令绘制中国地图;(2)使用mapshow和geoshow命令直接绘制中国地图;(3)使用worldmap+geoshow命令绘制中国地图。
操作方法
- 01
第一种方式:使用m_map工具箱命令绘制中国地图,同时使用到了.shp格式的中国国界省界数据。关于m_map工具箱的安装,搜索安装M_Map工具箱和测试使用。关于.shp数据,也自行搜索下载。下面直接附上第一方式的源代码: close all, clear all, clc, dbstop if error infoL=shapeinfo('D:\Matlab\MATLAB2017\bou2_4l.shp') infoP=shapeinfo('D:\Matlab\MATLAB2017\bou2_4p.shp') ChinaL=shaperead('D:\Matlab\MATLAB2017\bou2_4l.shp'); ChinaP=shaperead('D:\Matlab\MATLAB2017\bou2_4p.shp'); bou2_4lx=[ChinaL(:).X]; bou2_4ly=[ChinaL(:).Y]; bou2_4px=[ChinaP(:).X]; bou2_4py=[ChinaP(:).Y]; figure(1) subplot(1,2,1); m_proj('lambert','lon',[70,140],'lat',[0,60]);m_plot(bou2_4lx,bou2_4ly,'k'); m_grid; subplot(1,2,2); m_proj('robinson','lon',[70,140],'lat',[0,60]);m_plot(bou2_4px,bou2_4py,'k'); m_grid; m_coast('color','r','linewidth',1); 其中bou2_4lx=[ChinaL(:).X],bou2_4ly=[ChinaL(:).Y]分别是获取经度X信息和获取纬度Y信息的意思。其他的命令就不再赘述。
- 02
将上述代码写入脚本编辑器,然后点击保存和运行。出来如下图形Figure 1。左图使用的兰伯特(lambert)投影,右图使用的罗宾逊(robinson)投影和增加了海岸线(coast)。
- 03
第二种方式:直接使用MATLAB本身自带的mapshow和geoshow命令绘制中国地图。这两个命令可以直接读取.shp格式的中国国界省界数据。具体代码如下: figure(2) fnshp_L='D:\Matlab\MATLAB2017\bou2_4l.shp'; fnshp_P='D:\Matlab\MATLAB2017\bou2_4p.shp'; readL=shaperead(fnshp_L);readP=shaperead(fnshp_P); subplot(2,2,1);mapshow(readL,'Color','k'); title('China mapshow PolyLine_1') subplot(2,2,2);mapshow(readP,'FaceColor','r');title('China mapshow Polygon_2') subplot(2,2,3);geoshow(readL,'Color','r'); title('China geoshow PolyLine-3') subplot(2,2,4);geoshow(readP,'FaceColor','y');title('China geoshow Polygon-4') 在第一种方式的代码后面,紧接着写入上述代码。
- 04
写入上述第二种方式的代码后,保存,运行,又会出现如下图形Figure 2。其中图1和图2使用的mapshow命令画得,并且图1使用的.shp数据为PloyLine属性的,图2使用的.shp数据为Ploygon属性的;图3和图4使用的geoshow命令画得,并且图3使用的.shp数据为PloyLine属性的,图4使用的.shp数据为Ploygon属性的。值得注意的是,title(‘ ’)命令中的下划线可以起到下角标的作用,而中划线就无此作用(对比Figure 2的前两幅图和后两幅图的标题就会发现)。
- 05
第三种方式:使用worldmap+geoshow命令绘制中国地图。在第二种方式的代码后直接写入如下代码: figure(3) subplot(2,2,1); worldmap('China'); mapshow(fnshp_L,'Color','k'); subplot(2,2,2); worldmap([0,55],[70,140]); mapshow(fnshp_P,'FaceColor',[0.5,1.0,0.5]); setm(gca,'MLineLocation',10); setm(gca,'PLineLocation',10); setm(gca,'MLabelLocation',20); setm(gca,'PLabelLocation',10); subplot(2,2,3); worldmap('China'); geoshow(fnshp_L,'Color','k'); subplot(2,2,4); worldmap([0,55],[70,140]); geoshow(fnshp_P,'FaceColor',[0.5,1.0,0.5]); setm(gca,'MLineLocation',10); setm(gca,'PLineLocation',10); setm(gca,'MLabelLocation',20); setm(gca,'PLabelLocation',10); title('中国地图','FontSize',14,'FontWeight','Bold') 其中worldmap([0,55],[70,140])为设置显示纬度经度范围;setm(gca,'MLineLocation',10)为设置经度间隔;setm(gca,'PLineLocation',10)为设置纬度间隔;setm(gca,'MLabelLocation',20)为设置经度标签每隔几度;setm(gca,'PLabelLocation',10)为设置纬度标签每隔几度。
- 06
写入第三种方式的代码后,保存,运行,又会出现如下图形Figure 3。可以看出worldmap+mapshow命令不起作用(前两张图不显示);然后worldmap+geoshow命令起作用(后两张图效果不错)。