在离线环境中使用底图
通过在底图(也称为基础图层)上显示数据,为您的地图提供地理背景。MathWorks® 提供了多种底图,包括使用 Natural Earth 生成的低分辨率双色选项,以及由 Esri® 托管的高缩放级别选项。有关底图选项的列表,请参阅 geobasemap 函数的 basemap 参量。
这些底图大多需要联网,包括默认底图。如果您无法稳定地连接互联网,可以采取以下策略:将部分底图下载到本地系统,或者在 "darkwater" 底图上显示数据。某些策略要求 MATLAB® 具备临时互联网访问权限,而其他策略则不要求 MATLAB 具备互联网访问权限。不同的策略支持不同类型的地图显示。
| MATLAB 的互联网接入要求 | 策略 | 支持的地图显示方式 |
|---|---|---|
| 临时互联网接入 | 将底图下载到本地系统 |
|
| 使用缓存的底图图块 |
| |
| 使用来自网络的图像 |
| |
| 无法连接互联网 | 从 MBTiles 文件创建底图 |
|
| 从图像创建底图 |
| |
| 使用随 MATLAB 一起安装的底图 |
| |
| 使用文件中的图像 |
| |
| 使用文件中的矢量数据 |
|
临时互联网接入
这些策略需要 MATLAB 暂时连接互联网。当 MATLAB 处于在线环境时,您可以将底图数据保存到本地系统中。然后,当 MATLAB 处于离线环境时,您可以加载已保存的基础地图数据。
将底图下载到本地系统
当您能够连接互联网时,可以将使用 Natural Earth 创建的基础图下载到本地系统中。由 Esri 托管的底图不可供下载。这样,当您处于离线环境时,就可以使用已下载的基础地图了。
使用“附加组件资源管理器”下载底图。
在 MATLAB Home 选项卡的 Environment 部分中,依次点击 Add-Ons 和 Explore Add-Ons。
在“附加组件浏览器”中,滚动至 MathWorks Optional Features 部分,然后点击 Show All 以查找底图附加组件。您还可以按名称搜索底图插件,或者在 Filter by Type 中点击 Optional Features。
选择您要下载的基础地图插件。
以下是底图及其相关底图插件的名称。
| 底图名称 | 底图插件 |
|---|---|
"bluegreen" | MATLAB 底图数据 - 蓝绿 |
"grayland" | MATLAB 底图数据 - grayland |
"colorterrain" | MATLAB 底图数据 - colorterrain |
"grayterrain" | MATLAB 底图数据 - 灰色地形 |
"landcover" | MATLAB 底图数据——土地覆盖 |
使用缓存的底图图块
当您通过互联网查看底图时,MATLAB 会临时缓存底图图块。如果网络连接中断,您仍然可以查看缓存的基础地图图块。
当您处于离线环境并尝试查看之前未曾查看过的底图图块时,MATLAB 会发出警告,并根据底图的类型显示不同的图块。当您尝试查看使用 Natural Earth 创建的图块时,MATLAB 会显示 "darkwater" 图块。当您尝试查看自定义底图中的图块或由 Esri 托管的图块时,会发现地图图块缺失。
缓存的底图图块存在以下限制:
MATLAB 将缓存的图块存储在临时文件夹中。您的操作系统可以删除该临时文件夹。
缓存的图块可能会过期。
MATLAB 仅为当前的 MATLAB 会话缓存自定义底图图块。
使用来自网络的图像
当您能够连接互联网时,可以将底图或 Web 地图服务 (WMS) 服务器上的图像作为图片读取,并将其保存为 MAT 或 GeoTIFF 文件。这样,当您处于离线环境时,就可以从文件中加载该图像,并将其用作数据的基础图层。
读取并保存底图中的图像
使用 readBasemapImage 函数,将波士顿的卫星影像作为数组、栅格参考对象和属性表导入工作区。
[A1,R1,attrib1] = readBasemapImage("satellite",[42.3453 42.3711],[-71.099 -71.0454]);使用 geotiffwrite 函数将影像保存为 GeoTIFF 文件。
readBasemapImage函数使用 Web Mercator 投影坐标参考系 (CRS)(EPSG 代码为3857)来引用该图像。使用CoordRefSysCode名称-值参量指定 CRS 代码。通过指定
ImageDescriptionTIFF 标签来包含署名信息。
tag = struct("ImageDescription",attrib1); geotiffwrite("satelliteBoston.tif",A1,R1,CoordRefSysCode=3857,TiffTags=tag)
要使用底图数据,请加载 GeoTIFF 文件及其归属信息。
[A2,R2] = readgeoraster("satelliteBoston.tif"); info = imfinfo("satelliteBoston.tif"); attrib2 = info.ImageDescription;
使用地图坐标轴以及存储在参考对象中的投影坐标参考系统 (CRS) 来显示数据。
figure pcrs2 = R2.ProjectedCRS; newmap(pcrs2) geoimage(A2,R2) title("Boston Imagery from Basemap") subtitle("Attribution: " + attrib2)

有关在离线环境下将数据叠加在底图图像上的更多信息,请参阅 Display Data over Basemaps When Internet Access Is Intermittent。
从 WMS 服务器读取并保存图像
WMS 服务器提供来自基于 Web 的数据源的、可供公众访问的地理空间数据。在 WMS 数据库中搜索来自美国地质调查局 (USGS) 国家地图的正射影像。
usgs = wmsfind("basemap.nationalmap",SearchFields="ServerURL"); imagery = refine(usgs,"USGSImageryOnly",SearchFields="ServerURL"); imagery = wmsupdate(imagery);
使用 wmsread 函数读取波士顿某区域的正射影像。然后,将影像保存为 GeoTIFF 文件。
[A3,R3] = wmsread(imagery,Latlim=[42.3453 42.3711],Lonlim=[-71.099 -71.0454]);
geotiffwrite("usgsImageryLayer.tif",A3,R3)要使用 WMS 正射影像,请加载 GeoTIFF 文件。然后,使用地图坐标轴以及适合该地区的投影坐标系来显示数据。
[A4,R4] = readgeoraster("usgsImageryLayer.tif"); figure pcrs4 = projcrs(26986); newmap(pcrs4) geoimage(A4,R4) title("Boston Imagery from WMS Server") subtitle("Attribution: USGS National Map")

有关在离线环境下创建 WMS 地图的更多信息,请参阅 Create WMS Maps When Internet Access Is Intermittent。
无法连接互联网
这些策略无需 MATLAB 连接互联网。
从 MBTiles 文件创建底图
在离线环境下,您可以使用 addCustomBasemap 函数根据 MBTiles 文件创建自定义底图。
MBTiles 文件可以包含栅格或向量地图图块。如果您不确定自己的 MBTiles 文件中包含的是栅格地图图块还是向量地图图块,请向您的数据提供商确认。
栅格地图图块可用于显示卫星图像和正射影像。您可以使用
mbtileswrite函数将栅格数据写入 MBTiles 文件。向量地图图块可让您自定义底图的外观,且通常比栅格地图图块包含更高的缩放级别。有关自定义向量底图外观的信息,请参阅 Customize Appearance of Vector Basemaps。
从栅格 MBTiles 文件创建底图
Mapping Toolbox™ 包含一个名为 usgsimagery.mbtiles 的栅格 MBTiles 文件,其中包含低分辨率的 USGS 影像。根据该文件创建自定义底图,并使用地理球体将其显示出来。将相机定位在波士顿上空 3200 公里处。
addCustomBasemap("usgsimagery","usgsimagery.mbtiles") uif = uifigure; g = geoglobe(uif); geobasemap(g,"usgsimagery") campos(g,42.3582,-71.0722,3200000)

从矢量 MBTiles 文件创建底图
Mapping Toolbox 包含一个名为 naturalearth.mbtiles 的向量 MBTiles 文件,其中包含该地区及陆地边界的低缩放级别数据。根据该文件创建自定义底图。使用预定义的地形样式,指定底图的外观,包括颜色和字体。预定义样式无需联网。有关向量底图样式的信息(包括在离线环境中的限制),请参阅 addCustomBasemap 参考页面的 Style 参量。
addCustomBasemap("naturalearth","naturalearth.mbtiles",Style="topographic")
使用地理坐标区显示自定义底图。
figure geobasemap naturalearth geolimits([40.1951 47.8433],[-77.5238 -64.0377]) title("Northeast United States with Vector MBTiles Basemap") subtitle("Attribution: Natural Earth")

从图像创建底图
在离线环境下,您可以使用 addCustomBasemap 函数根据图像创建自定义底图。用于将图像读入工作区的函数取决于文件格式。
使用
readgeoraster函数读取 GeoTIFF 等格式的图像。使用
imread和worldfileread函数读取与世界文件关联的图像格式,例如 TIFF、JPEG 或 PNG。
将波士顿的 GeoTIFF 图像作为数组和地图像元引用对象读入工作区。该数组是一个以投影坐标为参考的单元格网格。
[A5,R5] = readgeoraster("boston.tif");从数组和引用对象中添加自定义底图。addCustomBasemap 函数会发出警告,因为数组和引用对象未为缩放级别 0 指定全局数据。
addCustomBasemap("bostonBasemap",A5,R5)Warning: Basemap contains regional data with latitude limits in the range [42.3451, 42.3713] and longitude limits in the range [-71.0999, -71.0454]. Global map displays might show missing tiles.
使用地理坐标区显示自定义底图。MATLAB 将坐标轴的范围设置为与底图数据的范围紧密匹配。黑色背景表示底图图块中没有数据的区域。
figure
geobasemap bostonBasemap
使用随 MATLAB 一起安装的底图
MATLAB 包含 "darkwater" 底图,这是一幅双色陆海图,其中陆地区域为浅灰色,水域为深灰色。使用 "darkwater" 底图无需联网。
使用地理坐标区显示 "darkwater" 底图。将地图中心对准美国东北部。
figure geobasemap darkwater geolimits([40.1951 47.8433],[-77.5238 -64.0377]) title("Northeast United States with Darkwater Basemap") subtitle("Attribution: Natural Earth")

使用文件中的图像
在离线环境下,您可以从文件中读取一张图像,然后将其用作数据的基础图层。用于读取数据的函数取决于文件格式。
使用
readgeoraster函数读取 GeoTIFF 等格式的图像。使用
imread和worldfileread函数读取与世界文件关联的图像格式,例如 TIFF、JPEG 或 PNG。
将波士顿的 GeoTIFF 图像作为数组和栅格引用对象读入工作区。然后,使用地图坐标轴以及存储在参考对象中的投影坐标参考系统 (CRS) 来显示该图像。
[A6,R6] = readgeoraster("boston.tif"); figure pcrs6 = R6.ProjectedCRS; newmap(pcrs6) geoimage(A6,R6) title("Boston Imagery from GeoTIFF File") subtitle("Attribution: GeoEye")

使用文件中的矢量数据
在离线环境下,您可以从文件中读取向量数据,然后将其用作数据的基础图层。使用 readgeotable 函数读取 shapefile 等格式的向量数据。
Mapping Toolbox™ 包含一个名为 landareas.shp 的形状文件,其中包含全球陆地区域。将土地面积数据作为地理空间表导入工作区。然后,使用默认的投影坐标参考系统 (CRS),在地图坐标系上显示陆地区域。
GT = readgeotable("landareas.shp"); figure newmap geoplot(GT) title("World Land Areas from Shapefile")

Mapping Toolbox™ 包含一个名为 usastatehi.shp 的形状文件,其中包含美国各州的边界数据。将 shapefile 文件作为地理空间表导入工作区。裁剪边界,仅包含东北部各州。
GT = readgeotable("usastatehi.shp");
ne = geoclip(GT.Shape,[40.1951 47.8433],[-77.5238 -64.0377]);使用地理坐标区显示边界。为防止 MATLAB 使用 MathWorks 提供的底图,请将底图设置为 "none"。
figure geobasemap none hold on geoplot(ne) title("Northeast United States from Shapefile")

当您使用 geoplot 函数显示底层时,可以通过将图形对象的 AffectAutoLimits 属性设置为 "off",将该底层从坐标轴限值的自动计算中排除。有关示例,请参阅 Create Base Layer from OpenStreetMap Data。