matlab绘制中国地图

使用mapshow+shapefile的方法:

%% mapchina
clc;clear;clf
% shapefile中都包含了国界和省界
fnshp_L='E:\ChinaMap\国界与省界\bou2_4l.shp';%ShapeType: 'PolyLine'
fnshp_P='E:\ChinaMap\国界与省界\bou2_4p.shp';%ShapeType: 'Polygon'
infoL = shapeinfo(fnshp_L);
infoP = shapeinfo(fnshp_P);
readL=shaperead(fnshp_L);
readP=shaperead(fnshp_P);
subplot(121);mapshow(readL);title('PolyLine of China')
subplot(122);mapshow(readP);title('Polygon of China')

绘制图形如下:

matlab绘制中国地图_第1张图片

第二种方法使用geoshow+shapefile的方法:

%% geoshow+shapefile
clc;clear;clf
% shapefile中都包含了国界和省界
fnshp_L='E:\ChinaMap\国界与省界\bou2_4l.shp';%ShapeType: 'PolyLine'
fnshp_P='E:\ChinaMap\国界与省界\bou2_4p.shp';%ShapeType: 'Polygon'
readL=shaperead(fnshp_L);%该文件中没有每个省的名称
readP=shaperead(fnshp_P);%该文件中有每个省的名称
subplot(121);worldmap('China');geoshow(fnshp_L);title('PolyLine of China')
subplot(122);worldmap('China');geoshow(fnshp_P);title('Polygon of China')
绘制的图形如下:

matlab绘制中国地图_第2张图片

注意如果上面没有加worldmap的命令,那么和第一种方法绘制出来的图形是一样的.

如果只想显示安徽省的,那么可以这样做:

%bbox=[114,29;120,35];%安徽的地理位置
%S = shaperead(fnshp_P,'BoundingBox',bbox);
S = shaperead(fnshp_P);
n=1;
while (n>=1 && n<=numel(S))
    sname=S(n).NAME;
    if ( ~strcmp(sname,'安徽省'))
        S(n)=[];
        n=n-1;
    end
        n=n+1;
end
mapshow(S);
显示的结果如下:

如果使用geoshow,最好将数据中(X,Y)坐标转为(lon,lat):

bbox=[114,29;120,35];%安徽的地理位置
S = shaperead(fnshp_P,'BoundingBox',bbox,'UseGeoCoords', true);%只读一部分数据
n=1;
while (n>=1 && n<=numel(S))
    sname=S(n).NAME;
    if ( ~strcmp(sname,'安徽省'))
        S(n)=[];
        n=n-1;
    end
        n=n+1;
end
worldmap([29 35],[114 120]) %worldmap(latlim, lonlim)
geoshow(S)
绘制的地图为:

matlab绘制中国地图_第3张图片

其实,上面的绘制任意省的地图方式还可以进一步简化:读取shapefile文件时使用'selector'选择你想要的省份就可以了:

S = shaperead(fnshp_P, 'UseGeoCoords', true,...
  'Selector',{@(NAME) strcmp(NAME,'安徽省'), 'NAME'});
worldmap([29 35],[114 120]) %worldmap(latlim, lonlim)
geoshow(S)

绘制的结果和上面的图是一样的.

有时我们希望修改地图的某些属性,例如投影方式,那么可是使用getm和setm来实现,请看下面的例子:

S = shaperead(fnshp_P, 'UseGeoCoords', true,'Selector',{@(NAME) strcmp(NAME,'安徽省'), 'NAME'});
wm=worldmap([29 35],[114 120]); %worldmap(latlim, lonlim)
%getm(wm)%查看当期地图的所有属性
setm(wm,'mapprojection','eqacylin');%可以使用maps查看所有的地图投影方式
gs=geoshow(S);
绘制的图形如下:

matlab绘制中国地图_第4张图片

如果不想使用额外的shapefile绘图,matlab自带的shapefile也可:

wm=worldmap('world');
land=shaperead('landareas','UseGeoCoords',true);
geoshow(wm,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');
绘制的结果如下:

matlab绘制中国地图_第5张图片

下面再给出一个例子:

maps %查看当前可用的地图投影方式

%%  导入数据,全球海岸线
load coast

%% 绘图
axesm robinson
patchm(lat,long,'g');
 %% 设置属性
setm(gca);%查看当前可以设置的所有图形坐标轴(map axes)的属性
setm(gca,'Frame','on');%使框架可见
getm(gca,'Frame');%使用getm可以获取指定的图形坐标轴的属性
setm(gca,'Grid','on');%打开网格
setm(gca,'MLabelLocation',60);%标上经度刻度标签,每隔60度
setm(gca,'MeridianLabel','on');%设置经度刻度标签可见
setm(gca,'PLabelLocation',[-90:30:90])%标上经度刻度标签,[-90:30:90]
setm(gca,'ParallelLabel','on');%设置经度刻度标签可见
setm(gca,'MLabelParallel','south');%将经度刻度标签放在南方,即下部  
setm(gca,'Origin',[0,90,0]);%设置地图的中心位置和绕中心点和地心点的轴旋转角度[latitude longitude orientation]

绘制的图形如下:


你可能感兴趣的:(map,matlab,中国,地图,china)