下面介绍一下mapping toolbox中如何绘制点(Point),线段(Line)和多边形(Polygon):
一.如何绘制点(Point):
clc;clear;
%生成背景地图地图
h = worldmap('France');
%读取和显示大陆架
landareas = shaperead('landareas.shp','UseGeoCoords', true);
geoshow (landareas, 'FaceColor', [1 1 .5]);
%埃菲尔铁塔的坐标
TowerLat = 48.85;%点纬度坐标
TowerLon = 2.28;%点经度坐标
%用红色标记绘制%埃菲尔铁塔
geoshow(TowerLat, TowerLon, 'Marker','.','MarkerEdgeColor','red')
textm(TowerLat,TowerLon + 0.5, 'Eiffel Tower');%放置文本
绘制的图像如下:
二.如何绘制线段:
clc;clear;
%生成背景地图地图
worldmap world;
framem on;%显示地图边框
%绘制线条
linem([15; 0; -45; -25],[-100; 0; 70; 110],'r-')
linem([15; -30; -60; -65],[-100; -20; 100; 150],'b-')
linem([15; 20; 40; 20],[-100; -20; 40; 50], 'g-')
绘制的线条结果如下:
绘制线条在地图中是很常用的,geoshow的内部就是调用linem来绘制河流的:
clc;clear;clf;
%生成背景地图地图
h = worldmap('France');
landareas = shaperead('landareas.shp','UseGeoCoords', true);
geoshow (landareas, 'FaceColor', [1 1 .5]);
%河流数据
rivers = shaperead('worldrivers', 'UseGeoCoords', true);
%rivers =
%
%128x1 struct array with fields:% Geometry% BoundingBox% Lon% Lat% Name%显示河流
geoshow(rivers, 'Color', 'blue')
绘制的图形如下:
对于rivers的信息,可以查看一下,下面选择第八个元素:
rivers(8)
ans =
Geometry: 'Line'
BoundingBox: [2x2 double]
Lon: [129.6929 128.9659 128.7473 NaN]
Lat: [63.3965 63.4980 63.5220 NaN]
Name: 'Lena'
三.绘制多边形
clc;clear;clf;
%多边形的顶点坐标
%注意数据中多边形的初始顶点和结束顶点必须重合
%注意数据中多边形的初始顶点和结束顶点必须重合
%注意多个多边形顶点的环绕方向
%顺时针为正,使用mapshow绘制时,里面可以被填充,是"面"
%逆时针为负,使用mapshow绘制时,里面不可以被填充,是"洞"
x = [40 55 33 10 0 5 10 40 NaN 10 25 30 25 10 10 NaN 90 80 65 80 90 NaN];
y=[50 20 0 0 15 25 55 50 NaN 20 10 10 20 30 20 NaN 10 0 20 25 10 NaN];
mapshow(x,y,'DisplayType','polygon')
下面的代码则是使用geoshow来绘制美国的地图,每个州都是一个多边形结构:
clc;clear;clf;
figure(1); ax = usamap('conus');
set(ax, 'Visible', 'off')%不显示坐标轴
%可以使用get查看常规坐标轴的属性
%可以使用getm来查看地图坐标轴的属性
states = shaperead('usastatelo', 'UseGeoCoords', true);
%使用'UseGeoCoords'为true才会返回Geostructs,否则会返回Mapstructs.names = {states.Name};%每个州的名称
indexConus = 1:numel(states);%州的数目
stateColor = [0.5 1 0.5];%州的颜色
%画出所有的州
geoshow(ax, states(indexConus), 'FaceColor', stateColor)
%画出所有的州,其实也可以这样
%>>geoshow(ax, states, 'FaceColor', stateColor)
%如果只画出一个州,可以这样
%>>
%>>geoshow(ax, states(1), 'FaceColor', stateColor)%使用setm设置一些图形的属性
setm(ax, 'Frame', 'off', 'Grid', 'off',...
'ParallelLabel', 'off', 'MeridianLabel', 'off')
查看一下states的和states(1)的结构:
>> statesstates = 51x1 struct array with fields:GeometryBoundingBoxLonLatNameLabelLatLabelLonPopDens2000>> states(1)ans = Geometry: 'Polygon'BoundingBox: [2x2 double]Lon: [1x105 double]Lat: [1x105 double]Name: 'Alabama'LabelLat: 32.282672LabelLon: -86.9206PopDens2000: 87.6
绘制的图形如下:
注意在保存图形的时候,一定要使用print,不要使用saveas!最好指定的分辨率大一点,否则保存图形的效果较差:
print('-dpng','-r600','x.png')
利用上面的语句可以将图形保存为png格式,分辨率为600的,默认的显示分辨率只有72