MATLAB—地圖


一、畫亞洲地圖

1、worldmap()

(1)

clear all worldmap('World')

clear all worldmap('World')%世界地圖 load coast %載入海岸線 plotm(lat,long)%經緯度

(2)

clear all ax = worldmap('World'); setm(ax, 'Origin', [0 180 0])%更改經度,從0到180再到0 land = shaperead('landareas', 'UseGeoCoords', true);%陸地 geoshow(ax, land, 'FaceColor', [0.5 0.7 0.5])

 

clear all ax = worldmap('World'); setm(ax, 'Origin', [0 180 0])%更改經度,從0到180再到0 land = shaperead('landareas', 'UseGeoCoords', true); geoshow(ax, land, 'FaceColor', [0.5 0.7 0.5]) lakes = shaperead('worldlakes', 'UseGeoCoords', true); geoshow(lakes, 'FaceColor', 'blue') rivers = shaperead('worldrivers', 'UseGeoCoords', true); geoshow(rivers, 'Color', 'blue') cities = shaperead('worldcities', 'UseGeoCoords', true); geoshow(cities, 'Marker', '.', 'Color', 'red')

land = shaperead('landareas', 'UseGeoCoords', true)%陸地 后者參數x,y為經緯度 geoshow(land, 'FaceColor', [0.5 0.7 0.5])

 (3)

clear all worldmap([-50 50],[160 -30]) %載入范圍 load geoid %載入水准面數據 geoshow(geoid, geoidrefvec, 'DisplayType', 'texturemap'); %畫圖顯示 load coast %載入海岸線 geoshow(lat, long) %顯示

2、shaperead函數

 (1)

clear all landareas = shaperead('landareas.shp','UseGeoCoords',true); axesm ('mercator', 'Frame', 'on', 'Grid', 'on','origin',[0 120 0]); geoshow(landareas,'FaceColor',[1 1 .5],'EdgeColor',[.6 .6 .6]);

 UseGeoCoords:可以選擇為true或者false(默認),即是否使用地理結構(GeoStruts)。如果數據已經被投影了就選擇false,如果還未被投影,可以選擇true以生成投影。

 3、 geoshow的用法

geoshow是用來顯示地圖數據的函數,非常重要,大部分的地圖都使用該函數進行顯示。

(1)          基本用法:

                            1)              geoshow(lat,lon)直接輸入經緯度,將以該經緯度為中心,生成一小片地圖。

                            2)              geoshow(filename)直接輸入地圖文件名,生成該地圖

                            3)              geoshow(_,Name,Value,)輸入相關屬性並設定參數,生成所需要的地圖。

(2)          常用屬性:

                            1)              facecolor:定義了地圖表面的顏色,需要輸入三個參數且均在0至1之間。

                            2)              edgecolor:定義了海岸線邊界的顏色,參數值同上。

clear all geoshow('maps\bou2_4p.shp','FaceColor','G') geoshow('maps\hyd1_4p.shp','FaceColor','b') geoshow('maps\hyd2_4p.shp','FaceColor','r')

clear all ax=worldmap([29.5 30.5],[122 123]);%載入地圖 geoshow(ax,'maps\bou2_4p.shp','FaceColor','G')%將邊界線載入地圖中

舟山群島附近

(3)

clear all
figure
worldmap('na');%北美地圖
states = shaperead('usastatehi', 'UseGeoCoords', true);%州界線
symspec = makesymbolspec('Polygon', ...
   {'Name', 'Alaska', 'FaceColor', 'red'}, ...
   {'Name', 'Hawaii', 'FaceColor', 'red'}); %hawaii和alaska設置為紅色
geoshow(states, 'SymbolSpec', symspec,...
    'DefaultFaceColor', 'blue','DefaultEdgeColor', 'black');%邊界黑色,表面顏色藍色,

 (4)

clear all
load korea
figure;
worldmap(map, refvec)%空白地圖
geoshow(gca,map,refvec,'DisplayType','texturemap');%紋理貼圖
demcmap(map)
S = shaperead('landareas','UseGeoCoords',true);
geoshow([S.Lat], [S.Lon],'Color','black'); %邊界設置為黑色

 

 ()

clear all

ax=worldmap('china'); % 使用worldmap的坐標軸作圖
setm(ax,'grid','off') % 關閉grid
setm(ax,'frame','off') % 關閉邊框
setm(ax,'parallellabel','off') % 關閉坐標軸標記
setm(ax,'meridianlabel','off') % 關閉坐標軸標記


sheng=shaperead('maps/bou2_4p.shp', 'UseGeoCoords', true);
geoshow(sheng); % 

關閉邊框,關閉坐標軸

4、 makesymbolspec函數

(1)

clear all
roads = shaperead('concord_roads.shp');
mapshow(roads);

clear all
roads = shaperead('concord_roads.shp');
geoshow(roads)

 (2)

clear all
roads = shaperead('concord_roads.shp');
blueRoads = makesymbolspec('Line',{'Default','Color','r'});%紅色
mapshow(roads,'SymbolSpec',blueRoads);

 

clear all
roads = shaperead('concord_roads.shp');

blueRoads = makesymbolspec('Line',{'Default','Color','r'});

geoshow(roads,'SymbolSpec',blueRoads)

  

(3)

clear all
roads = shaperead('concord_roads.shp');
roadColors = ...
makesymbolspec('Line',{'CLASS',2,'Color','r'},...
                      {'CLASS',3,'Color','g'},...
                      {'CLASS',6,'Color','b'},...
                      {'Default','Color','k'});
mapshow(roads,'SymbolSpec',roadColors);

clear all
roads = shaperead('concord_roads.shp');
roadColors = ...
makesymbolspec('Line',{'CLASS',1,'Color','r'},...
                      {'CLASS',4,'Color','g'},...
                      {'CLASS',5,'Color','b'},...
                      {'Default','Color','k'});
geoshow(roads,'SymbolSpec',roadColors);

(4)

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

 

 

3、

(1)美國分州顏色

clear all
ax = worldmap('USA');
load coastlines
geoshow(ax, coastlat, coastlon,'DisplayType', 'polygon', 'FaceColor', [.45 .60 .30])

 

美國地圖輪廓

clear all
ax = worldmap('USA');
load coastlines
geoshow(ax, coastlat, coastlon,'DisplayType', 'polygon', 'FaceColor', [.45 .60 .30])

states = shaperead('usastatelo', 'UseGeoCoords', true);%州界線

geoshow(ax, states, 'DisplayType', 'polygon')

州默認顏色

clear all ax = worldmap('USA'); load coastlines geoshow(ax, coastlat, coastlon,'DisplayType', 'polygon', 'FaceColor', [.45 .60 .30]) states = shaperead('usastatelo', 'UseGeoCoords', true);%州界線 faceColors = makesymbolspec('Polygon',{'INDEX', [1 numel(states)], 'FaceColor', ... polcmap(numel(states))}); % NOTE - colors are random,多邊形, geoshow(ax, states, 'DisplayType', 'polygon','SymbolSpec', faceColors)

(2)中國分省顏色

clear all
ax = worldmap('china');

setm(ax,'grid','off') % 關閉grid
setm(ax,'frame','off') % 關閉邊框
setm(ax,'parallellabel','off') % 關閉坐標軸標記,平行線
setm(ax,'meridianlabel','off') % 關閉坐標軸標記,子午線

states = shaperead('maps/bou2_4p.shp', 'UseGeoCoords', true);%州界線
faceColors = makesymbolspec('Polygon',{'INDEX', [1 numel(states)], 'FaceColor', ...
  polcmap(numel(states))}); % NOTE - colors are random,多邊形,
geoshow(ax, states,'DisplayType', 'polygon', 'SymbolSpec', faceColors)

 

 

clear all
ax = worldmap('china');
%load coastlines
%geoshow(ax, coastlat, coastlon,'DisplayType', 'polygon', 'FaceColor', [.45 .60 .30])

%setm(ax,'grid','off') % 關閉grid
%setm(ax,'frame','off') % 關閉邊框
%setm(ax,'parallellabel','off') % 關閉坐標軸標記,平行線
%setm(ax,'meridianlabel','off') % 關閉坐標軸標記,子午線

states = shaperead('maps/bou2_4p.shp', 'UseGeoCoords', true);%州界線
faceColors = makesymbolspec('Polygon',{'INDEX', [1 numel(states)], 'FaceColor', ...
  polcmap(numel(states))}); % NOTE - colors are random,多邊形,
geoshow(ax, states,'DisplayType', 'polygon', 'SymbolSpec', faceColors)

 4、海拔高度的不同顏色顯示

%-- 分省中國地圖在MATLAB中的畫法 --%
% Author: gaospecial@gmail.com
% Date: 2012-6-5 14:04:01
% 地圖數據來源:國家基礎地理信息系統網站
% 人口數據來源:國家統計年鑒2011版
%% 載入地圖數據
clear all
% 載入各省的多邊形數據
sheng=shaperead('maps/bou2_4p.shp', 'UseGeoCoords', true);% 本文件下的邊界省
% 檢查數據發現中午名稱為亂碼,可能是由於字符編碼引起的,需要糾正文件導入時出現的亂碼
% 中文名稱記錄在相應的dbf文件中,可以使用Excel打開,並且不會出現亂碼,截取其中的中文保存為文本文件
% 然后在導入工作區,並將其保存為*.mat格式文件,隨用隨取。
% 依次替換sheng數據中的亂碼【算是變通之法,有誰知道更好的方法一定告訴我哦】
load chinese_name.mat % 省,省會,主要城市的正確中文
for i=1:length(sheng)
    sheng(i).NAME=sheng_chinese_name{i}; % 糾正中文顯示錯誤
end
%unique(sheng_chinese_name) % 含有34個省(直轄市)的數據,合並相同的值
length(sheng) % 共分為925個區塊
%% 使用importdata向導導入2011年全國31個省的人口數據
% data為人口數目 textdata為省名稱
d=importdata('gaodu.txt');
%d=importdata('renkou.txt');
data=d.data; % 海拔高度
textdata=d.textdata; % 相對應的省的名稱
%% 定義地圖參數
% 針對不同省份,分別設置不同的顏色(FaceColor),由人口數據決定顏色數據
% 定義顏色
k=128;  
mycolormap=summer(k);
% 生成不同區域按大小的顏色,按照人口數目多少分別指定不同的顏色
% 人口越多,顏色越突出
geoname={sheng.NAME}';%省的名字,925個
max_data = max(data);
n=length(data);
mysymbolspec=cell(1,n); % 預定義變量可以加快處理速度

%%
%高度和顏色對應起來,然后省份和顏色對應起來,利用歸一化排序,定位
for i=1:n
    count=data(i);%高度
    mycoloridx=floor( k * count / max_data );
    mycoloridx(mycoloridx<1)=1;
    myprovince=textdata{i};%省,31個
    geoidx=strmatch(myprovince, geoname);%從925中挑31的位置
    if numel(geoidx) > 0
        province_name=geoname( geoidx(1) );
        mysymbolspec{i} = {'NAME', char(province_name), 'FaceColor', mycolormap( mycoloridx, :) };%省份和顏色對應
    end
end
%% 顯示地圖
figure
ax=worldmap('china'); % 使用worldmap的坐標軸作圖
setm(ax,'grid','off') % 關閉grid
setm(ax,'frame','off') % 關閉邊框
setm(ax,'parallellabel','off') % 關閉坐標軸標記,平行線
setm(ax,'meridianlabel','off') % 關閉坐標軸標記,子午線

% 最關鍵的兩個語句
symbols=makesymbolspec('Polygon',{'default','FaceColor',[0.9 0.9 0.8],...
    'LineStyle','--','LineWidth',0.2,...
    'EdgeColor',[0.8 0.9 0.9]},...
    mysymbolspec{:}...
    );
geoshow(sheng,'SymbolSpec',symbols); % 此處用mapshow投影會不正確

 

%% 圖的標注
% 在圖像右側顯示bar
colormap(summer(k))
hcb=colorbar('EastOutside');
step=round(max_data/11);

 

set(hcb,'YTick',(0:.1:1))
set(hcb,'YTickLabel',num2cell(0:step:max_data))%設置高度

% 給圖像加標題
title('中國各省海拔分布圖(單位:m)')

5、人口的不同顏色顯示

%-- 分省中國地圖在MATLAB中的畫法 --%
%% 載入地圖數據
clear all
% 載入各省的多邊形數據
sheng=shaperead('maps/bou2_4p.shp', 'UseGeoCoords', true);% 本文件下的邊界省

%% 使用importdata向導導入2011年全國31個省的人口數據
% data為人口數目 textdata為省名稱
d=importdata('renkou.txt');
data=d.data; % 人口數據
textdata=d.textdata; % 相對應的省的名稱
%% 定義地圖參數
% 針對不同省份,分別設置不同的顏色(FaceColor)
% 定義顏色
k=500;  
mycolormap=summer(k);
% 生成不同區域按大小的顏色,按照人口數目多少分別指定不同的顏色
% 人口越多,顏色越突出
geoname={sheng.NAME}';%
max_data = max(data);%最大人口
n=length(data);%31個省
mysymbolspec=cell(1,n); % 預定義變量可以加快處理速度
for i=1:n
    count(i)=data(i);%人口
    mycoloridx(i)=round( k * count(i)/ max_data );%四舍五入
    mycoloridx(mycoloridx<1)=1;% 0變1
    myprovince{i}=textdata{i};%省
    
    geoidx=strmatch(myprovince{i}, geoname);
    if numel(geoidx) > 0 %geoidx元素個數
        province_name=geoname( geoidx(1) );%省名字
        mysymbolspec{i} = {'NAME', char(province_name), 'FaceColor', mycolormap( mycoloridx(i), :) };
    end
end
%% 顯示地圖
figure
ax=worldmap([20 55], [70 140]); % 使用worldmap的坐標軸作圖
setm(ax,'grid','off') % 關閉grid
setm(ax,'frame','off') % 關閉邊框
setm(ax,'parallellabel','off') % 關閉坐標軸標記
setm(ax,'meridianlabel','off') % 關閉坐標軸標記

% 最關鍵的兩個語句
symbols=makesymbolspec('Polygon',{'default','FaceColor',[0.9 0.9 0.8],...
    'LineStyle','--','LineWidth',0.2,...
    'EdgeColor',[0.8 0.9 0.9]},...
    mysymbolspec{:}...
    );
geoshow(ax,sheng,'SymbolSpec',symbols); % 此處用mapshow投影會不正確

%% 圖的標注
% 在圖像右側顯示bar
colormap(summer(k))
hcb=colorbar('southOutside');
step=round(max_data/10);%四舍五入
%set(hcb,'YTick',(0:.1:1))
set(hcb,'YTickLabel',num2cell(0:step:max_data))

% 給圖像加標題
title('中國各省人口分布圖(單位:)')

 

 

 

 

 

 

 

 

  

 

  

  

 

  


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM