MATLAB使用sinusoidal和mollweide投影绘制地图

2022年7月1日 16点热度 0人点赞

本文基于MATLAB的m_map工具箱,分别采用了sinusoidal和mollweide两种投影方式绘制分插的世界地图。本文有关内容可参考m_map homepage中的example code 4.

工具/原料

  • MATLAB
  • m_map

方法/步骤

  1. 1

    第一,首先使用sinusoidal投影方式绘制分插的世界地图。启动MATALB,新建脚本(Ctrl+N),输入如下代码:

    close all; clear all; clc

    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 i=1:7

    m_proj('sinusoidal','long',slongs(i,:),'lat',slats(i,:));

    m_grid('fontsize',6,'linest','-','color',[.7,.7,.7],...

    'xtick',[-180:30:360],'xticklabels',[],...

    'ytick',[-80:20:80],'yticklabels',[]);

    m_coast('patch','g');

    end

    xlabel('Interrupted sinusoidal projection of world oceans');

    set(gca,'xlimmode','auto','ylimmode','auto');

    其中通过for-end循环设置7组不同经度longitude和纬度latitude的绘制区域,所使用的投影方式为sinusoidal。另外,m_proj设置投影方式和经纬度区域。m_grid设置网格线属性。m_coast以填充(补丁patch)的方式设置海岸线。

    需要注意的时,set(gca,'xlimmode','auto','ylimmode','auto')需要加上,不然不能同时显示7组绘制区域。

  2. 2

    第二,保存和运行上述脚本,得到如下图形:sinusoidal投影方式的分插的(上下共7组)世界地图。

  3. 3

    第三,下面采用mollweide投影方式绘制分插的世界地图。新建脚本(Ctrl+N),输入如下代码:

    close all; clear all; clc

    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 i=1:6

    m_proj('mollweide','long',slongs(i,:),'lat',slats(i,:));

    m_grid('fontsize',6,'linest','-','color','k',...

    'xtick',[-180:30:360],'xticklabels',[],...

    'ytick',[-80:20:80],'yticklabels',[]);

    m_coast('patch',[.6,.6,.6]);

    end

    xlabel('Interrupted mollweide projection of world oceans');

    set(gca,'xlimmode','auto','ylimmode','auto');

    其中通过for-end循环设置6组不同经度longitude和纬度latitude的绘制区域,所使用的投影方式为mollweide。关于代码的其他解释参照第一步。

  4. 4

    第四,保存和运行第三步中的脚本,得到如下图形:mollweide投影方式的分插的(上下共6组)世界地图。

  5. 5

    第五,把第一步和第三步的脚本合并在一起,从而将第二步和第四步中的图形绘制在一个绘图区。合并后的脚本如下,主要是增加了subplot( )命令用于在一个绘图区绘制子图。

    close all; clear all; clc

    subplot(2,1,1)

    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 i=1:7

    m_proj('sinusoidal','long',slongs(i,:),'lat',slats(i,:));

    m_grid('fontsize',6,'linest','-','color',[.7,.7,.7],...

    'xtick',[-180:30:360],'xticklabels',[],...

    'ytick',[-80:20:80],'yticklabels',[]);

    m_coast('patch','g');

    end

    xlabel('Interrupted sinusoidal projection of world oceans');

    set(gca,'xlimmode','auto','ylimmode','auto');

    subplot(2,1,2)

    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 i=1:6

    m_proj('mollweide','long',slongs(i,:),'lat',slats(i,:));

    m_grid('fontsize',6,'linest','-','color','k',...

    'xtick',[-180:30:360],'xticklabels',[],...

    'ytick',[-80:20:80],'yticklabels',[]);

    m_coast('patch',[.6,.6,.6]);

    end

    xlabel('Interrupted mollweide projection of world oceans');

    set(gca,'xlimmode','auto','ylimmode','auto');

  6. 6

    第六,保存和运行上述合并的脚本,最终得到如下图形:上方为sinusoidal投影方式绘制的分插世界地图,下方为mollweide投影方式绘制的分插世界地图。

    END
经验内容仅供参考,如果您需解决具体问题(尤其法律、医学等领域),建议您详细咨询相关领域专业人士。
作者声明:本篇经验系本人依照真实经历原创,未经许可,谢绝转载。
展开阅读全部

laozhao

这个人很懒,什么都没留下

文章评论