亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

利用Matlab繪制地圖的超詳細教程

 更新時間:2022年02月25日 09:52:28   作者:slandarer  
worldmap和usamap是axesm的子類,worldmap是用于生成世界地圖坐標區(qū)域,usamap用于生成美國地圖坐標區(qū)域。本文將詳細為大家介紹如何利用這兩個函數繪制地圖,需要的可以參考一下

worldmap和usamap是axesm的子類,worldmap是用于生成世界地圖坐標區(qū)域,usamap用于生成美國地圖坐標區(qū)域,本文先在worldmap函數基礎上講解如何導入各種數據繪制各種類型圖片,略提一下如何使用usamap,再講解axesm的各種屬性以滿足更多元化的地圖繪制需求,并在最后總結地圖繪制其他可用函數。

Mapping Toolbox工具箱安裝

請通過如下步驟安裝工具箱:

1.點擊附加功能:

在這里插入圖片描述

2.搜索Mapping Toolbox,并點擊進入介紹界面:

在這里插入圖片描述

3.點安裝一路點確定:

在這里插入圖片描述

worldmap及usamap

首先是最簡單的海岸線世界地圖:

% 創(chuàng)建世界地圖坐標區(qū)域
worldmap('World')

% 導入海岸線數據
load coastlines

% 繪制海岸線
plotm(coastlat,coastlon)

在這里插入圖片描述

附帶陸地區(qū)域、湖泊、河流、城市的世界地圖:

% 創(chuàng)建世界地圖坐標區(qū)域
ax=worldmap('World');
setm(ax,'Origin',[0 180 0])

% 繪制陸地
land=shaperead('landareas.shp','UseGeoCoords',true);
geoshow(ax,land,'FaceColor',[0.5 0.7 0.5])
% 繪制湖泊
lakes=shaperead('worldlakes.shp','UseGeoCoords',true);
geoshow(lakes,'FaceColor','blue')
% 繪制河流
rivers=shaperead('worldrivers.shp','UseGeoCoords',true);
geoshow(rivers, 'Color', 'blue')
% 繪制城市
cities=shaperead('worldcities.shp','UseGeoCoords',true);
geoshow(cities,'Marker','.','Color','red')

在這里插入圖片描述

可以看到繪制的主要流程就是:

  • 創(chuàng)建地圖坐標區(qū)域(通過axesm、worldmap、usamap)
  • 導入數據(通過load或者shaperead)通過geoshow、plotm、scatterm
  • 繪制圖像(大部分普通坐標區(qū)域axes中出現(xiàn)的函數加個m就變成了用于地圖坐標區(qū)域的函數)

worldmap創(chuàng)建地圖坐標區(qū)域部分:

大家肯定想知道worldmap()里面支持哪些參數,這個連官網都沒有寫,事實上只要無參數運行一下函數worldmap()就會蹦出來一個地區(qū)選擇框,大家可以試一下啊:

在這里插入圖片描述

同時worldmap函數支持直接輸入經緯度范圍,例如:

latlim=[-50 50];
lonlim=[160 -30];
worldmap(latlim,lonlim)

在這里插入圖片描述

數據導入部分:

其中可以通過load導入的MATLAB自帶數據有:

  1. coastlines - 世界海岸線經緯度矢量
  2. conus - 用于連接的美國(conus)、五大湖、州際邊界的經緯度陣列
  3. geoid60c - 全球大地水準面高度網格(以米為單位)/度
  4. greatlakes - 顯示結構陣列中的北美五大湖
  5. korea5c - 朝鮮半島的地形和水深測量
  6. koreaEQdata - 地震位置和震級
  7. layermtx - 用于教學的地理定位地形網格
  8. mapmtx - 用于教學的地理定位地形網格
  9. moonalb20c - 克萊門汀全球月球反照率圖
  10. moontopo60c - 月球的克萊門汀激光雷達地形
  11. oceanlo - 顯示結構數組中的海洋遮罩多邊形
  12. russia - 網格化土地、水域、邊界、外部區(qū)域
  13. seatempm -全球多通道海面溫度網格
  14. stars - 4500+顆恒星的天體坐標和星等
  15. usamtx - 美國各州的數據網格,每度五個單元格
  16. usgslulegend - USGS 土地利用類別列表

其中可以通過shaperead導入的MATLAB自帶數據有:

  1. landareas.shp - 全球陸地區(qū)域多邊形
  2. tsunamis.shp - 全球1950-2006 年中到大型海嘯的百分比
  3. usastatehi.shp - 高分辨率多邊形美國各州形狀
  4. usastatelo.shp - 低多邊形美國各州形狀
  5. worldcities.shp - 全球318個城市或人口稠密位置坐標
  6. worldlakes.shp - 世界上 37 個最大的多邊形湖泊和內陸海域
  7. worldrivers.shp - 世界主要河流的線條形狀
  8. boston_placenames.shp - 美國馬薩諸塞州波士頓地名
  9. boston_roads.shp - 美國馬薩諸塞州波士頓道路
  10. concord_hydro_area.shp - 美國馬薩諸塞州康科德水域
  11. concord_hydro_line.shp - 美國馬薩諸塞州康科德水路
  12. concord_roads.shp - 美國馬薩諸塞州康科德道路

這些信息來自:\mcr\toolbox\map\mapdata\Contents.m

局部區(qū)域陸地繪制

首先繪制個南極洲,南極洲的陸地信息可以從landareas.shp中提取 :

% 創(chuàng)建世界地圖坐標區(qū)域并將區(qū)域設置為南極洲
worldmap('antarctica')

% 從陸地區(qū)域數據文件中獲取南極洲大陸數據并繪圖
antarctica = shaperead('landareas.shp', 'UseGeoCoords', true,...
  'Selector',{@(name) strcmp(name,'Antarctica'), 'Name'});
patchm(antarctica.Lat, antarctica.Lon, [0.5 1 0.5])

在這里插入圖片描述

除此之外其他面積較大,可以通過如上方式獲取的區(qū)域還有:

‘Antarctica’‘Africa and Eurasia’‘North and South America’‘Greenland’‘Australia’‘Baffin Island’‘Ellesmere Island’‘New Guinea’‘Great Britain’‘Borneo’‘Honshu’‘Victoria Island’‘Celebes’‘New Zealand North Island’‘Sumatra’‘Madagascar’‘Iceland’‘New Zealand South Island’‘Newfoundland’‘Luzon’‘Devon Island’‘Ireland’‘Cuba’‘Java’‘Mindanao’

例如我繪制中國附近的亞歐非大陸陸地:

% 創(chuàng)建世界地圖坐標區(qū)域并將區(qū)域設置為中國
worldmap('China')

% 從陸地區(qū)域數據文件中獲取亞歐非大陸數據并繪圖
antarctica = shaperead('landareas.shp', 'UseGeoCoords', true,...
  'Selector',{@(name) strcmp(name,'Africa and Eurasia'), 'Name'});
patchm(antarctica.Lat, antarctica.Lon, [0.5 0.7 0.5])

% 加個海岸線美化一下
load coastlines
plotm(coastlat,coastlon)

在這里插入圖片描述

映射貼圖

南美洲和中太平洋的大地水準面高度:

要繪制高度映射圖只需要將geoshow的’DisplayType’屬性設置為’surface’。

注意,官網的寫法,[geoid60c,geoid60cR] = egm96geoid 2020a已經被移除,如果是之后的版本,請不要按照官網而是按照如下寫法進行書寫。

% 大地水準面高度數據及海岸線數據導入
load geoid60c.mat
load coastlines

% 創(chuàng)建某經緯度范圍世界地圖坐標區(qū)域
latlim=[-50 50];
lonlim=[160 -30];
worldmap(latlim,lonlim)

% 繪制圖像
geoshow(geoid60c,geoid60cR,'DisplayType','surface')
geoshow(coastlat,coastlon,'Color','k')

在這里插入圖片描述

要是覺得不好看,可以增添陸地區(qū)域和更改顏色,例如像下面這么做:

% 大地水準面高度數導入
load geoid60c.mat

% 創(chuàng)建某經緯度范圍世界地圖坐標區(qū)域
latlim=[-50 50];
lonlim=[160 -30];
ax=worldmap(latlim,lonlim);

% 設置顏色
C=[222,238,209;126,190,174;144,213,220;
    33,118,155;30,69,128;20,49,127]./255;

geoshow(ax,geoid60c,geoid60cR,'DisplayType','surface')
colormap(C) % 應用顏色

land=shaperead('landareas.shp','UseGeoCoords',true);
geoshow(ax,land,'FaceColor',[0.5 0.7 0.5])

在這里插入圖片描述

我們發(fā)現(xiàn)有些大地水準面高度比0要高,就會畫到板塊上面,同時顏色插值不夠密集,簡單處理一下:

% 大地水準面高度數導入
load geoid60c.mat

% 創(chuàng)建某經緯度范圍世界地圖坐標區(qū)域
latlim=[-50 50];
lonlim=[160 -30];
ax=worldmap(latlim,lonlim);

% 設置顏色并插值細化
C=[222,238,209;126,190,174;144,213,220;
    33,118,155;30,69,128;20,49,127]./255;
C1(:,1)=interp1(0:5,C(:,1),0:.5:5,'linear')';
C1(:,2)=interp1(0:5,C(:,2),0:.5:5,'linear')';
C1(:,3)=interp1(0:5,C(:,3),0:.5:5,'linear')';

% 下面減了個100為了讓最大值也小于0
geoshow(ax,geoid60c-100,geoid60cR,'DisplayType','surface')
colormap(C1) % 應用顏色

land=shaperead('landareas.shp','UseGeoCoords',true);
geoshow(ax,land,'FaceColor',[0.5 0.7 0.5])

在這里插入圖片描述

紋理貼圖

朝鮮半島為例:

要繪制顏色映射圖只需要將geoshow的’DisplayType’屬性設置為’texturemap’。

% 導入數據并繪制貼圖版地圖
load korea5c
worldmap(korea5c,korea5cR);
geoshow(korea5c,korea5cR,'DisplayType','texturemap')

% 修改顏色
demcmap(korea5c)

在這里插入圖片描述

這個demcmap是一個可以描述為一個需要同時設置海洋色帶和陸地色帶的colormap,下面是MATHWORKS自帶的例子:

load korea5c
worldmap(korea5c,korea5cR);
geoshow(korea5c,korea5cR,'DisplayType','texturemap')


cmapsea=[.8  0 .8;  0 0 .8];
cmapland=[.7  0  0; .8 .8 0; 1  1 .8];
demcmap(korea5c,32,cmapsea,cmapland)

在這里插入圖片描述

顏色可能不是太好看哈,下面給個我自己弄的配色:

load korea5c
worldmap(korea5c,korea5cR);
geoshow(korea5c,korea5cR,'DisplayType','texturemap')


cmapsea=[20,49,127;30,69,128;33,118,155;144,213,220]./255;
cmapland=[10,133,102;197,226,102]./255;
demcmap(korea5c,32,cmapsea,cmapland)

在這里插入圖片描述

線路圖繪制

以美國馬薩諸塞州康科德道路道路為例

roads=shaperead('concord_roads.shp');
lineStyle = makesymbolspec('Line',...
 {'CLASS',[1 3], 'LineStyle',':'},...
 {'CLASS',[4 6],'LineStyle','-.'});
mapshow(roads,'SymbolSpec',lineStyle);

在這里插入圖片描述

各種路徑一共有六類,不但可以為不同設置線性,還可以設置顏色,粗細等各種信息:

roads=shaperead('concord_roads.shp');
lineStyle=makesymbolspec("Line", ...
    {'CLASS',2,'Color','#A2142F'}, ...
    {'CLASS',3,'Color','#77AC30'}, ...
    {'CLASS',6,'Color','#0072BD'}, ...
    {'Default','Color','k'});
mapshow(roads,'SymbolSpec',lineStyle);

在這里插入圖片描述

roads=shaperead('concord_roads.shp');
lineStyle=makesymbolspec("Line", ...
    {'CLASS',[1 3],'LineStyle',':','LineWidth',2}, ...
    {'CLASS',[4 6],'LineStyle','-.','LineWidth',0.25});
mapshow(roads,'SymbolSpec',lineStyle);

在這里插入圖片描述

usamap

usamap("conus");

states=shaperead("usastatelo.shp",'UseGeoCoords',true);
% 倆州離太遠畫不開,不要
for i=length(states):-1:1
    if states(i).Name=="Alaska"||states(i).Name=="Hawaii"
        states(i)=[];
    end
end

faceColors=makesymbolspec('Polygon',{'INDEX',[1 numel(states)],'FaceColor',...
  polcmap(numel(states))});
geoshow(states, 'DisplayType','polygon','SymbolSpec', faceColors)

在這里插入圖片描述

再換個顏色叭

usamap("conus");

states=shaperead("usastatelo.shp",'UseGeoCoords',true);
% 倆州離太遠畫不開,不要
for i=length(states):-1:1
    if states(i).Name=="Alaska"||states(i).Name=="Hawaii"
        states(i)=[];
    end
end

% 插值定義顏色
C=[222,238,209;126,190,174;144,213,220;
    33,118,155;30,69,128;20,49,127]./255;
C1(:,1)=interp1(0:5,C(:,1),linspace(0,5,numel(states)),'linear')';
C1(:,2)=interp1(0:5,C(:,2),linspace(0,5,numel(states)),'linear')';
C1(:,3)=interp1(0:5,C(:,3),linspace(0,5,numel(states)),'linear')';

faceColors=makesymbolspec('Polygon',{'INDEX',[1 numel(states)],'FaceColor',C1});
geoshow(states, 'DisplayType','polygon','SymbolSpec', faceColors)

在這里插入圖片描述

axesm

創(chuàng)建一個robinson樣式,帶框的地圖坐標區(qū)域:

axesm('MapProjection','robinson','Frame','on')

在這里插入圖片描述

創(chuàng)建好的axesm可以通過setm修改樣式:

axesm('MapProjection','robinson','Frame','on')
setm(gca,'FLineWidth',3,'Grid','on')

在這里插入圖片描述

展示一下所有類型的地圖:

mapType={'balthsrt', 'behrmann', 'bsam', 'braun', 'cassinistd', 'cassini', 'ccylin', 'eqacylin', 'eqdcylin', 'giso', 'gortho', 'gstereo', 'lambcyln',...
'mercator', 'miller', 'pcarree', 'tranmerc', 'trystan', 'utm', 'wetch', 'apianus', 'collig', 'craster', 'eckert1', 'eckert2', 'eckert3', 'eckert4',...
'eckert5', 'eckert6', 'flatplrp', 'flatplrq', 'flatplrs', 'fournier', 'goode', 'hatano', 'kavrsky5', 'kavrsky6', 'loximuth', 'modsine', 'mollweid',...
'putnins5', 'quartic', 'robinson', 'sinusoid', 'wagner4', 'winkel', 'eqaconicstd', 'eqaconic', 'eqdconicstd', 'eqdconic', 'lambertstd', 'lambert',...
'murdoch1', 'murdoch3', 'polyconstd', 'polycon', 'vgrint1', 'bonne', 'werner', 'breusing', 'eqaazim', 'eqdazim', 'globe', 'gnomonic', 'ortho',...
'stereo', 'ups', 'vperspec', 'wiechel', 'aitoff', 'bries', 'hammer'};

for i=1:72
    subplot(9,8,i)
    axesm('MapProjection',mapType{i},'Frame','on','FLineWidth',3,'Grid','on')
    tightmap
end

在這里插入圖片描述

展示一些網格設置:

% 某些視角下的地圖坐標區(qū)
axesm('MapProjection','ortho','Frame','on',...
    'grid','on','Origin',[40,40,14])

在這里插入圖片描述

MLineLimit是經線的緯度范圍,MLineException是不受經線長度范圍影響的經線,通過設置這兩個參數可以不讓所有經線都匯集到極地以顯的雜亂。

% 某些視角下的地圖坐標區(qū),經線的緯度范圍[-75 75]
axesm('MapProjection','ortho','Frame','on',...
    'grid','on','Origin',[40,40,14],...
    'MLineLimit',[-75 75])

在這里插入圖片描述

% 某些視角下的地圖坐標區(qū),其他經線的緯度范圍[-75 75],四條經線繪制完全
axesm('MapProjection','ortho','Frame','on',...
    'grid','on','Origin',[40,40,14],...
    'MLineLimit',[-75 75],...
    'MLineException',[-90,0,90,180])

在這里插入圖片描述

與之相對應的還有PLineLimit、PLineException

% 某些視角下的地圖坐標區(qū)
axesm('MapProjection','ortho','Frame','on',...
    'grid','on','Origin',[40,40,14],...
    'PLineLimit',[-75 75])

在這里插入圖片描述

更多詳細信息可以去這里查看:The Map Grid - MATLAB & Simulink - MathWorks 中國

來個用axesm繪圖的實例:

% 某些視角下的地圖坐標區(qū),其他經線的緯度范圍[-75 75],四條經線繪制完全
axesm('MapProjection','ortho','Frame','on',...
    'grid','on','Origin',[40,40,14],...
    'MLineLimit',[-75 75],...
    'MLineException',[-90,0,90,180])
% 導入海岸線數據
load coastlines

% 繪制海岸線
plotm(coastlat,coastlon)

在這里插入圖片描述

一些地圖繪制可用簡易函數

subplot

首先值得一提的是subplot函數依舊適用:

例如:

load korea5c

subplot(1,2,1)
worldmap('China')
antarctica = shaperead('landareas.shp', 'UseGeoCoords', true,...
  'Selector',{@(name) strcmp(name,'Africa and Eurasia'), 'Name'});
patchm(antarctica.Lat, antarctica.Lon, [0.5 0.7 0.5])

subplot(1,2,2)
worldmap('Europe')
antarctica = shaperead('landareas.shp', 'UseGeoCoords', true,...
  'Selector',{@(name) strcmp(name,'Africa and Eurasia'), 'Name'});
patchm(antarctica.Lat, antarctica.Lon, [0.5 0.7 0.5])

在這里插入圖片描述

tightmap

取消圖像的白邊,非常好用

subplot(1,2,1)
axesm('MapProjection','robinson','Frame','on','Grid','on')

subplot(1,2,2)
axesm('MapProjection','robinson','Frame','on','Grid','on')
tightmap

在這里插入圖片描述

邊框標簽網格快速開關函數

邊框,網格,經線標簽,緯線標簽快速設置,類似hold on\grid on:

framem on
gridm on 
mlabel on 
plabel on
%
framem off
gridm off
mlabel offf
plabel off

colormap

還可以設置其他自帶顏色

% 大地水準面高度數據及海岸線數據導入
load geoid60c.mat
load coastlines

subplot(1,2,1)
% 創(chuàng)建某經緯度范圍世界地圖坐標區(qū)域
latlim=[-50 50];
lonlim=[160 -30];
ax1=worldmap(latlim,lonlim);

% 繪制圖像
geoshow(geoid60c,geoid60cR,'DisplayType','surface')
colormap(ax1,summer)
geoshow(coastlat,coastlon,'Color','k')

subplot(1,2,2)
% 創(chuàng)建某經緯度范圍世界地圖坐標區(qū)域
latlim=[-50 50];
lonlim=[160 -30];
ax2=worldmap(latlim,lonlim);

% 繪制圖像
geoshow(geoid60c,geoid60cR,'DisplayType','surface')
colormap(ax2,pink)
geoshow(coastlat,coastlon,'Color','k')

在這里插入圖片描述

colorbar

% 導入數據并繪制貼圖版地圖
load korea5c
worldmap(korea5c,korea5cR);
geoshow(korea5c,korea5cR,'DisplayType','texturemap')

% 修改顏色
demcmap(korea5c)

% 添加顏色欄
colorbar

在這里插入圖片描述

以上就是利用Matlab繪制地圖的超詳細教程的詳細內容,更多關于Matlab繪制地圖的資料請關注腳本之家其它相關文章!

相關文章

  • C++實現(xiàn)簡單版圖書管理系統(tǒng)

    C++實現(xiàn)簡單版圖書管理系統(tǒng)

    這篇文章主要為大家詳細介紹了C++實現(xiàn)簡單版圖書管理系統(tǒng),文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-06-06
  • C++探索構造函數私有化會產生什么結果

    C++探索構造函數私有化會產生什么結果

    C++的構造函數的作?:初始化類對象的數據成員。即類的對象被創(chuàng)建的時候,編譯系統(tǒng)對該對象分配內存空間,并?動調?構造函數,完成類成員的初始化。構造函數的特點:以類名作為函數名,?返回類型
    2022-05-05
  • C++進一步認識類與對象

    C++進一步認識類與對象

    類是創(chuàng)建對象的模板,一個類可以創(chuàng)建多個對象,每個對象都是類類型的一個變量;創(chuàng)建對象的過程也叫類的實例化。每個對象都是類的一個具體實例(Instance),擁有類的成員變量和成員函數
    2021-10-10
  • C語言?模擬實現(xiàn)memcpy與memmove函數詳解

    C語言?模擬實現(xiàn)memcpy與memmove函數詳解

    這篇文章主要介紹了C語言詳解如何模擬內存函數,用到了mencpy與memmove兩個函數,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步
    2022-04-04
  • 詳解C語言解決經典問題之兔子產子

    詳解C語言解決經典問題之兔子產子

    有一對兔子,從出生后的第 3 個月起每個月都生一對兔子。小兔子長到第 3 個月后每個月又生一對兔子,假設所有的兔子都不死,問 30 個月內每個月的兔子總數為多少?本文將用C語言解決這一經典問題,需要的可以參考一下
    2022-03-03
  • C語言數組棧實現(xiàn)模板

    C語言數組棧實現(xiàn)模板

    這篇文章主要為大家詳細介紹了C語言數組棧實現(xiàn)模板,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2018-12-12
  • 詳解C語言初階之函數

    詳解C語言初階之函數

    這篇文章主要介紹了C語言中的初階函數,介紹了其相關概念,具有一定參考價值。需要的朋友可以了解下,希望能夠給你帶來幫助
    2021-11-11
  • C語言控制臺打磚塊小游戲

    C語言控制臺打磚塊小游戲

    這篇文章主要為大家詳細介紹了C語言控制臺打磚塊小游戲,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-05-05
  • c++如何保存vector到文件

    c++如何保存vector到文件

    這篇文章主要介紹了c++如何保存vector到文件,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-11-11
  • 最新clion2020激活碼附安裝教程(親測有效)

    最新clion2020激活碼附安裝教程(親測有效)

    這篇文章主要介紹了最新clion2020激活碼附安裝教程(親測有效),本文通過圖文并茂的形式給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-11-11

最新評論