1. 程式人生 > >用matlab繪製中國地圖

用matlab繪製中國地圖

 

 reference:https://jingyan.baidu.com/article/870c6fc36fdacfb03ee4be58.html

       shp: http://muchong.com/html/201304/5748467.html

MATLAB是著名的科學軟體,具有繪圖、程式設計、模擬等強大的功能。現在介紹MATLAB繪製中國地圖的三種方式,分別是(1)使用m_map工具箱命令繪製中國地圖;(2)使用mapshow和geoshow命令直接繪製中國地圖;(3)使用worldmap+geoshow命令繪製中國地圖。

由於沒有找到合適的shp資料包,P/L用同一個shp;

%E:\wml\matlab_workspace\map\chain_sharp.shp
close all, clear all, clc, dbstop if error
infoL=shapeinfo('E:\wml\matlab_workspace\map\chain_sharp.shp')
infoP=shapeinfo('E:\wml\matlab_workspace\map\chain_sharp.shp')
ChinaL=shaperead('E:\wml\matlab_workspace\map\chain_sharp.shp');
ChinaP=shaperead('E:\wml\matlab_workspace\map\chain_sharp.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);

  

左圖使用的蘭伯特(lambert)投影,右圖使用的羅賓遜(robinson)投影和增加了海岸線(coast)。

 


 

fnshp_L='E:\weimengliang\matlab_workspace\map\chain_sharp.shp';
fnshp_P='E:\weimengliang\matlab_workspace\map\chain_sharp.shp';
infoL=shapeinfo(fnshp_L);
infoP=shapeinfo(fnshp_P);
readL=shaperead(fnshp_L);
readP=shaperead(fnshp_P);

subplot(2,2,1);mapshow(readL,...
                      'DefaultFaceColor', 'green', ...
                      'DefaultEdgeColor', 'black');  
title('China mapshow PolyLine_1')
subplot(2,2,2);mapshow(readP,...
                      'DefaultFaceColor', 'green', ...
                      'DefaultEdgeColor', 'black'); 
title('China mapshow Polygon_2')
subplot(2,2,3);geoshow(readL,  ...
                      'DefaultFaceColor', 'red', ...
                      'DefaultEdgeColor', 'black');              
title('China geoshow PolyLine-3')
subplot(2,2,4);geoshow(readP,  ...
                      'DefaultFaceColor', 'red', ...
                      'DefaultEdgeColor', 'black');
title('China geoshow Polygon-4')

直接使用MATLAB本身自帶的mapshow和geoshow命令繪製中國地圖。這兩個命令可以直接讀取.shp格式的中國國界省界資料。

其中圖1和圖2使用的mapshow命令畫得,並且圖1使用的.shp資料為PloyLine屬性的,圖2使用的.shp資料為Ploygon屬性的;圖3和圖4使用的geoshow命令畫得,並且圖3使用的.shp資料為PloyLine屬性的,圖4使用的.shp資料為Ploygon屬性的。值得注意的是,title(‘ ’)命令中的下劃線可以起到下角標的作用,而中劃線就無此作用(對比Figure 2的前兩幅圖和後兩幅圖的標題就會發現)。

 


 

fnshp_L='E:\weimengliang\matlab_workspace\map\chain_sharp.shp';
fnshp_P='E:\weimengliang\matlab_workspace\map\chain_sharp.shp';
% infoL=shapeinfo(fnshp_L);
% infoP=shapeinfo(fnshp_P);
% readL=shaperead('E:\weimengliang\matlab_workspace\map\chain_sharp.shp');
% readP=shaperead('E:\weimengliang\matlab_workspace\map\chain_sharp.shp');
%figure(3) 
subplot(2,2,1);
worldmap('China');           
mapshow(fnshp_L,...
                      'DefaultFaceColor', 'green', ...
                      'DefaultEdgeColor', 'black'); 

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,  ...
        'DefaultFaceColor', 'white', ...
        'DefaultEdgeColor', 'black');  

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)為設定緯度標籤每隔幾度。 

可以看出worldmap+mapshow命令不起作用(前兩張圖不顯示);然後worldmap+geoshow命令起作用(後兩張圖效果不錯)。