主要内容

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

gpxread

读取 GPX 文件

说明

P = gpxread(filename) 从 GPS 交换格式 (GPX) 文件 filename 中读取点数据,并返回一个 n-by-1 的地理点向量 P,其中 n 表示航点(即定义路线或轨迹的点)的数量。

gpxread 会先在文件中搜索航点,然后搜索航线,最后搜索轨迹,并返回其找到的第一个数据类型。P 的元数据字段用于标识要素类型('waypoint''track''route'),以及与航点、路线或轨迹相关的任何其他元数据。如果文件包含多个轨迹或路线,则 P 包含定义该文件中第一个轨迹或路线的点。如果 gpxread 无法在文件中找到任何要素,则返回一个空的地理点向量。

示例

P = gpxread(URL)URL 中读取 GPX 数据。URL 必须包含协议类型(例如,http://)。

S = gpxread(___,'Index',V) 仅在 GPX 文件包含轨迹或路线数据,且您将 'Index' 的值指定为向量(即 V)时,才会将 GPX 文件中的数据以几何形状向量的形式返回,而非地理点向量。当您希望将数据视为一条线(而非一组点)进行处理时,请使用此语法。

示例

___ = gpxread(___,Name,Value) 从 GPX 文件中读取数据,并通过一个或多个 Name,Value 参量对来指定附加选项,这些选项用于控制导入过程的各项特性。Name 是参量名称,Value 是对应的值。Name 必须位于单引号 ('') 之内,且不区分大小写。您可以按任意顺序指定多个名称-值参量。

示例

示例

全部折叠

boston_placenames.gpx 文件中读取并显示航点,并将这些点叠加到 boston.tif 图像上。

首先,导入航点和 GeoTIFF 文件。

p = gpxread("boston_placenames.gpx");
[A,R] = readgeoraster("boston.tif");

获取 GeoTIFF 图像的投影结构。将 XY 限制的长度单位转换为米,以便与投影结构配合使用。

proj = geotiffinfo("boston.tif");
mstruct = geotiff2mstruct(proj);
R.XWorldLimits = R.XWorldLimits * proj.UOMLengthInMeters;
R.YWorldLimits = R.YWorldLimits * proj.UOMLengthInMeters;

显示地图。

axesm(mstruct)
mapshow(A,R)

显示每个点的名称和位置。

for k=1:length(p)
   textm(p(k).Latitude, p(k).Longitude, p(k).Name, ...
      Color="k",BackgroundColor=[0.9 0.9 0],...
      Interpreter="none");
end
geoshow(p)
xlim(R.XWorldLimits)
ylim(R.YWorldLimits)

读取并显示从波士顿洛根国际机场到马萨诸塞州纳蒂克市 MathWorks 的路线。

从 GPX 文件中读取路线信息。

route = gpxread('sample_route.gpx');

使用 0.05 的缓冲量计算 latlimlonlim

[latlim, lonlim] = geoquadline(route.Latitude, route.Longitude);
[latlim, lonlim] = bufgeoquad(latlim, lonlim, .05, .05);

显示路线。

fig = figure;
pos = fig.Position;
fig.Position = [300 300 1.25*pos(3) 1.25*pos(4)];
ax = usamap(latlim, lonlim);
setm(ax, 'MLabelParallel', 43.5)
geoshow(route.Latitude, route.Longitude)

Figure contains an axes object. The hidden axes object contains 11 objects of type patch, line, text.

提取路线中包含转弯描述的元素,在地图上为每个转弯标注标记和颜色代码,并制作一个显示这些描述的图例。将顺序颠倒过来,使图例中第一圈显示在顶部,最后一圈显示在底部。

turns = route(~cellfun(@isempty, route.Description));
turns = turns(end:-1:1);
n = length(turns);
colors = cool(n);
for k=1:n
   geoshow(turns(k).Latitude, turns(k).Longitude, ...
       'DisplayType','point','MarkerEdgeColor',colors(k,:),...
       'Tag','turn','DisplayName',turns(k).Description)
end
legend(findobj(ax,'Tag','turn'),'Location','SouthOutside')

Figure contains an axes object. The hidden axes object contains 20 objects of type patch, line, text. One or more of the lines displays its values using only markers These objects represent The MathWorks, Inc., Natick, MA., Take the 1st right onto Apple Hill Dr Destination will be on the right, Turn left toward Apple Hill Dr, Slight right onto Apple Hill Dr, Merge onto MA-9 E/Worcester St via the ramp on the left to Boston, Turn right onto Speen St, Take exit 13 to merge onto MA-30 E/Cochituate Rd toward Natick Partial toll road, Keep left at the fork, follow signs for I-90 W/I-93 S/Williams Tunnel/Mass Pike and merge onto I-90 W Partial toll road, Head southeast.

读取 GPX 文件中的轨迹日志。gpxread 函数返回 geoshape 对象中的数据。

idx = 1:2;
tracks = gpxread("sample_tracks.gpx",Index=idx);

在地图上显示轨迹。为每条轨迹日志使用不同的颜色。

figure
geobasemap streets-light
hold on
for k = idx
    track = tracks(k);
    lat = track.Latitude;
    lon = track.Longitude;
    geoplot(lat,lon)
end

Figure contains an axes object with type geoaxes. The geoaxes object contains 2 objects of type line.

放大到围绕第一条轨迹的区域。

[latlim,lonlim] = geoquadline(tracks(1).Latitude,tracks(1).Longitude);
[latlim,lonlim] = bufgeoquad(latlim,lonlim,0.0005,0.0005);
geolimits(latlim,lonlim)

Figure contains an axes object with type geoaxes. The geoaxes object contains 2 objects of type line.

从 GPX 文件中读取轨迹日志和航点。

trk = gpxread("sample_mixed.gpx",FeatureType="track");
wpt = gpxread("sample_mixed.gpx");

geopoint 向量中提取坐标。然后,将坐标显示在地图上。使用一条线表示轨迹,用图标表示航点。

figure
geobasemap topographic
hold on

trkLat = trk.Latitude;
trkLon = trk.Longitude;
geoplot(trkLat,trkLon,DisplayName="Track Log")

wptLat = wpt.Latitude;
wptLon = wpt.Longitude;
geoiconchart(wptLat,wptLon,DisplayName="Waypoints")
legend

Figure contains an axes object with type geoaxes. The geoaxes object contains 2 objects of type line, iconchart. These objects represent Track Log, Waypoints.

本示例演示了如何显示海拔和时间区域图,以及如何利用轨迹日志计算距离。

读取 sample_mixed.gpx 文件中的轨迹日志。

trk = gpxread('sample_mixed.gpx','FeatureType','track');

通过去除秒数的小数部分和时区偏移量,简化时间值字符串的格式。将字符串转换为 datetime 数组。

timeStr = strrep(trk.Time,'.000Z','');
t = datetime(timeStr);

绘制时间和海拔值的值图。

figure
area(t,trk.Elevation)
xtickformat('HH:mm:ss')
xlabel('time (hours:minutes:seconds)')
ylabel('elevation (meters)')
title('Elevation Area Plot');

Figure contains an axes object. The axes object with title Elevation Area Plot, xlabel time (hours:minutes:seconds), ylabel elevation (meters) contains an object of type area.

计算并显示地面轨迹距离。将以米为单位的距离转换为以美国测绘英里为单位的距离。

e = wgs84Ellipsoid;
lat = trk.Latitude;
lon = trk.Longitude;
d = distance(lat(1:end-1), lon(1:end-1), lat(2:end), lon(2:end), e);
d = d * unitsratio('sm', 'meter');

显示累计地面轨迹距离和经过时间。

elapsedTime = t - t(1);
figure
line(elapsedTime(2:end),cumsum(d))
ylabel('cumulative ground track distance (statute mile)')
xlabel('elapsed time  (hours:minutes:seconds)')
title({'Cumulative Ground Track Distance in Miles',  ...
   ['Total Distance in Miles: ' num2str(sum(d))]});

Figure contains an axes object. The axes object with title Cumulative Ground Track Distance in Miles Total Distance in Miles: 46.0637, xlabel elapsed time (hours:minutes:seconds), ylabel cumulative ground track distance (statute mile) contains an object of type line.

输入参数

全部折叠

要打开的 GPX 文件的名称,指定为字符串标量或字符向量。如果该文件不在当前文件夹或 MATLAB® 路径下的某个文件夹中,则必须指定文件夹路径。如果文件名中包含扩展名 '.gpx'(无论大写还是小写),则可以在 filename 中省略该扩展名。

数据类型: char | string

包含 GPX 数据的互联网位置,以 URL 形式指定。URL 必须包含协议类型(例如,https://)。

数据类型: char | string

名称-值参数

全部折叠

将可选参量对组指定为 Name1=Value1,...,NameN=ValueN,其中 Name 是参量名称,Value 是对应的值。名称-值参量必须出现在其他参量之后,但对各个参量对组的顺序没有要求。

如果使用的是 R2021a 之前的版本,请使用逗号分隔每个名称和值,并用引号将 Name 引起来。

示例: 'FeatureType','track'

要从文件中读取的特征类型,指定为以下选项之一:'track''route''waypoint''auto'。如果 gpxread 无法在文件中找到指定的要素,则返回一个空的地理点向量。

示例: 'FeatureType','waypoint'

数据类型: char | string

文件中航点、轨迹或航路数据的索引,指定为正整数的标量或向量。

  • 如果该值是标量,则 gpxread 会将指定的航点、路线或轨迹作为地理点向量返回。如果标量值大于文件中找到的元素总数,gpxread 将返回一个空的地理点向量。

  • 如果该值是一个向量,且文件中包含航点,则 gpxread 将返回该向量所指定的航点。如果文件中包含路线或轨迹(且不包含航点),gpxread 会将指定的路线或轨迹日志返回为一个地理形状向量。gpxread 将该地理形状向量的“几何”字段设置为 'line'

示例: 如果文件中包含路线或轨迹,'Index', [1:2] 将从地理形状向量中读取最多两条路线或轨迹。

数据类型: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64

输出参量

全部折叠

航点、轨迹或路线数据,以 n-by-1 地理点向量的形式返回,其中 n 表示点数。

对于包含多个区段的轨迹日志或路线,gpxread 会使用 NaN 作为分隔符将各区段的坐标连接起来。NaN 表示文件中未找到的数值元素。空字符向量 ('') 用于表示文件中未找到的文本元素。

轨迹或路线数据,以 n-by-1 地理坐标向量的形式返回

详细信息

全部折叠

提示

  • 不包括扩展名,GPX 1.1 版本得到全面支持。如果检测到其他版本,系统将发出警告。不过,在大多数情况下,1.0 版本的 GPX 文件都能被成功读取,除非其中包含某些元数据标签。有关详细信息,请参阅 GPX 1.1 架构文档

版本历史记录

在 R2012a 中推出