文章目录
- 一、创建底图
- 二、在底图上显示数据
- 三、地理计算
使用地图制作工具箱,可以在MATLAB环境中读取、分析和显示地理信息。因为地球和大部分天体通常都是球形的,所以地理数据常常在球坐标系或椭球坐标系中定义。地球曲面上定义的距离、方位、面积甚至直线都与MATLAB笛卡儿坐标系中的不同。
将球体上的地理信息显示到平面上还需要特殊的绘图技巧。地图制作工具箱可以用简单的命令创建地图。使用工具箱提供的地图数据,可以创建详细的底图。在底图上可以绘制自己的结果。还可以导入高精度的地图数据,这些数据可以从政府或研究性网站上得到。
下面结合实例介绍利用MATLAB地图制作工具箱制作电子地图的一般过程。
一、创建底图
地理数据通常显示在底图上,底图中包含有类似海岸线或地形线的基本特征信息。创建底图的第1步是选择合适的投影方法。投影指的是如何将球体表面的信息表示在平面上。
地图制作工具箱提供了很多投影方法和几种地图集数据,利用它们可以创建对大部分应用都合适的底图。创建地球底图的命令是worldmap。该命令可以生成指定区域的地图。可以用某个洲或国家,或纬度和经度范围定义的区域。如果对区域名称的拼写没有把握,使用没有输入变量的worldmap命令,从显示的列表中选择名称。
【例1】下面打开世界底图,用geoshow函数显示底图。:
worldmap('world')
load coast
geoshow(lat, long)
生成图1。
图1 在地球底图中定义区域
【例2】下面的语句将陆地部分用绿色进行显示。landareas.shp为shape格式的文件,定义陆地区域。
geoshow('landareas.shp','FaceColor',[0 1.0 0])
生成图2。
图2 对陆地部分进行着色
在本例中,worldmap命令选择了低分辨率的地图集数据,因为南美洲覆盖的区域很大。该地图集数据包括海岸线、国界、湖和城市等。对于大面积区域的地图,例如南美洲地图,worldmap命令选择低分辨率数据并忽略类似国家名称和城市这样的细节。可以用可选参数覆盖worldmap命令的选项。
【例3】下面的代码首先载入和显示美国所在区域的海岸线轮廓图,陆地区域用绿色填充多边形表示。然后用shaperead函数读入美国各州的边界数据,用geoshow函数显示各州多边形。
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')
生成图3。
图3 美国各州底图
还可以用纬度和经度范围指定目标区域。
【例4】下面的例子创建太平洋的底图。给底图上添加了比例尺,可以用鼠标拖动它的位置。
worldmap([-60 60],[150 -30])
scaleruler
load geoid
geoshow(geoid, geoidrefvec, 'DisplayType', 'texturemap');
load coastlines
geoshow(coastlat,coastlon)
生成图4。
图4 太平洋的底图
还可以用矩阵数据创建底图。地图制作工具箱定义了两种矩阵数据。规则矩阵地图显示在等边网格上,行和列与东西方向和南北方向对齐。一般的矩阵地图可以有任意间隔和对齐方式的元素。
【例5】下面是整个世界的规则矩阵地图示例。geoid工作空间文件包含一个一度网格上的高程矩阵数据。该文件可以看作是没有海浪、潮汐和陆地影响的海面。将worldmap作为一个规则矩阵地图提供时,地理范围与矩阵的范围有关。这里,geoid高程数据显示为彩色表面。geoshow命令用曲面表示数据。
load geoid
worldmap(geoid,geoidlegend)
geoshow(geoid, geoidrefvec, 'DisplayType', 'surface');
生成图5。
图5 世界规则矩阵地图
其他颜色常用于显示高程矩阵。这种类型的数据通常称为数字高程模型(DEM)。
【例6】下面的例子用三维光照表面显示了朝鲜半岛的高程和海深。在垂向上作了很大的拉伸,以便突出地形特征。用daspectm命令控制垂向比例。
load korea
h = worldmap(map, refvec);
set(h, 'Visible', 'off')
geoshow(h, map, refvec, 'DisplayType', 'texturemap')
demcmap(map)
view(3)
生成图6。
图6 朝鲜半岛的数字高程模型
二、在底图上显示数据
地图制作工具箱可以显示矢量、矩阵和结构类型的地理数据。工具箱中的命令名通常与MATLAB中的图形命令相似,只是在末尾添加了一个“m”。这个“m”表示数据是地理数据,并且要用已经定义的地图投影进行显示。例如,在MATLAB中,使用plot(x,y),将一个点矢量显示为直线段;相应地,对于地理数据,应该使用类似plotm(lat,long)的语法格式。
因为大部分地图中间都包含了几种信息,新的绘图命令向地图坐标系中添加图形元素而不是替换图形元素。另外,x坐标和y坐标的比例设置为相等。用daspectm命令控制z轴的比例。
【例7】下面的例子显示如何通过在地图上单击找到点的地理位置,然后显示结果。将数据显示为没有标记的直线段,或显示为没有直线段的标记,改变线型的指定。
ax = worldmap('USA');
load coastlines
geoshow(ax, coastlat, coastlon,...
'DisplayType', 'polygon', 'FaceColor', [.45 .60 .30])
[lat,lon] = inputm(4);
plotm(lat,lon,'-+r')
hidem(gca)
生成图7。
图7 在地图上指定位置
显示矩阵数据的一个通用办法是显示为等值线图。地图制作工具箱提供了多种方法来表示等值线。等值线用contourm命令创建,填充的等值线用contourfm命令创建。将矩阵显示为表面并用contourcmap命令控制颜色查找表可以达到使用contourfm命令绘制等间隔的等值线的相同效果。
【例8】下面仍旧使用图18-5用过的朝鲜半岛的数据geoid。controurm和clabelm命令在地图上每隔10 m显示和标注geoid的等值线。
load korea
h = worldmap(map, refvec);
set(h, 'Visible', 'off')
geoshow(h, map, refvec, 'DisplayType', 'texturemap')
demcmap(map)
load geoid
[c,h] = contourm(geoid,geoidlegend,-100:10:100,'r');
ht = clabelm(c,h); set(ht,'color','r')
hidem(gca)
生成图8。
图8 在地图上添加等值线
三、地理计算
除了地理显示能力外,工具箱还包括一个用于分析地理数据的扩展命令集。包括单位转换、地理几何如距离、方位、高程、定位和相交等方面的命令。也可以创建地理数据如跟踪线、圆、椭圆和缓冲区等。
【例9】
nm2km(1)
ans =
1.8520
sm2km(1)
ans =
1.6093
dst = distance(45,115,30,135)
dst =
21.7213
deg2km(dst)
ans =
2.4153e+03
azimuth(45,115,30,135)
ans =
126.8377
规则矩阵地图可以用于多种操作。矩阵地图能力包括通过地理定位、将矢量转换为矩阵数据、编码闭合区域和计算坡度、方位和梯度,以及地形的可见性来插入和提取值。
【例10】下面计算黄海中某点的水深和geoid高程。
load korea
ltln2val(map,maplegend,35,125)
ans =
-64
load geoid
ltln2val(geoid,geoidlegend,35,125)
ans =
19.7490