主要内容

本页采用了机器翻译。点击此处可查看英文原文。

在离线环境中使用底图

通过在底图(也称为基础图层)上显示数据,为您的地图提供地理背景。MathWorks® 提供了多种底图,包括使用 Natural Earth 生成的低分辨率双色选项,以及由 Esri® 托管的高缩放级别选项。有关底图选项的列表,请参阅 geobasemap 函数的 basemap 参量。

这些底图大多需要联网,包括默认底图。如果您无法稳定地连接互联网,可以采取以下策略:将部分底图下载到本地系统,或者在 "darkwater" 底图上显示数据。某些策略要求 MATLAB® 具备临时互联网访问权限,而其他策略则不要求 MATLAB 具备互联网访问权限。不同的策略支持不同类型的地图显示。

MATLAB 的互联网接入要求策略支持的地图显示方式
临时互联网接入将底图下载到本地系统
  • 具有 Basemap 属性的对象,例如:

    • 地理坐标区

    • 地理球体

    • 网站查看器 (Communications Toolbox™, Antenna Toolbox™)

    • 卫星场景查看器 (Satellite Communications Toolbox)

使用缓存的底图图块
  • 具有 Basemap 属性的这些对象:

    • 地理坐标区

    • 地理气泡图

使用来自网络的图像
  • 地理坐标区 (geoimage)

  • 地图坐标区 (geoimage)

  • 基于 axesm 的地图 (geoshow)

  • 坐标区 (mapshow)

无法连接互联网从 MBTiles 文件创建底图
  • 具有 Basemap 属性的对象

从图像创建底图
  • 具有 Basemap 属性的对象

使用随 MATLAB 一起安装的底图
  • 具有 Basemap 属性的对象

使用文件中的图像
  • 地理坐标区 (geoimage)

  • 地图坐标区 (geoimage)

  • 基于 axesm 的地图 (geoshow)

  • 坐标区 (mapshow)

使用文件中的矢量数据
  • 地理坐标区 (geoplot)

  • 地图坐标区 (geoplot)

  • 基于 axesm 的地图 (geoshow)

  • 坐标区 (mapshow)

临时互联网接入

这些策略需要 MATLAB 暂时连接互联网。当 MATLAB 处于在线环境时,您可以将底图数据保存到本地系统中。然后,当 MATLAB 处于离线环境时,您可以加载已保存的基础地图数据。

将底图下载到本地系统

当您能够连接互联网时,可以将使用 Natural Earth 创建的基础图下载到本地系统中。由 Esri 托管的底图不可供下载。这样,当您处于离线环境时,就可以使用已下载的基础地图了。

使用“附加组件资源管理器”下载底图。

  1. 在 MATLAB Home 选项卡的 Environment 部分中,依次点击 Add-OnsExplore Add-Ons

  2. 在“附加组件浏览器”中,滚动至 MathWorks Optional Features 部分,然后点击 Show All 以查找底图附加组件。您还可以按名称搜索底图插件,或者在 Filter by Type 中点击 Optional Features

  3. 选择您要下载的基础地图插件。

以下是底图及其相关底图插件的名称。

底图名称底图插件
"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 代码。

  • 通过指定 ImageDescription TIFF 标签来包含署名信息。

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)

Figure contains an axes object with type mapaxes. The mapaxes object contains an object of type rasterimage.

有关在离线环境下将数据叠加在底图图像上的更多信息,请参阅 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")

Figure contains an axes object with type mapaxes. The mapaxes object contains an object of type rasterimage.

有关在离线环境下创建 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")

Figure contains an axes object with type geoaxes. The geoaxes object is empty.

从图像创建底图

在离线环境下,您可以使用 addCustomBasemap 函数根据图像创建自定义底图。用于将图像读入工作区的函数取决于文件格式。

  • 使用 readgeoraster 函数读取 GeoTIFF 等格式的图像。

  • 使用 imreadworldfileread 函数读取与世界文件关联的图像格式,例如 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

Figure contains an axes object with type geoaxes. The geoaxes object is empty.

使用随 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")

Figure contains an axes object with type geoaxes. The geoaxes object is empty.

使用文件中的图像

在离线环境下,您可以从文件中读取一张图像,然后将其用作数据的基础图层。用于读取数据的函数取决于文件格式。

  • 使用 readgeoraster 函数读取 GeoTIFF 等格式的图像。

  • 使用 imreadworldfileread 函数读取与世界文件关联的图像格式,例如 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")

Figure contains an axes object with type mapaxes. The mapaxes object contains an object of type rasterimage.

使用文件中的矢量数据

在离线环境下,您可以从文件中读取向量数据,然后将其用作数据的基础图层。使用 readgeotable 函数读取 shapefile 等格式的向量数据。

Mapping Toolbox™ 包含一个名为 landareas.shp 的形状文件,其中包含全球陆地区域。将土地面积数据作为地理空间表导入工作区。然后,使用默认的投影坐标参考系统 (CRS),在地图坐标系上显示陆地区域。

GT = readgeotable("landareas.shp");

figure
newmap
geoplot(GT)
title("World Land Areas from Shapefile")

Figure contains an axes object with type mapaxes. The mapaxes object contains an object of type polygon.

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")

Figure contains an axes object with type geoaxes. The geoaxes object contains an object of type polygon.

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

另请参阅

函数

主题