---
title: "XML 的全球定位"
date: "2012-03-06"
tags: 
  - "altova-xmlspy"
  - "mapforce"
description: 探索 XML 如何在 .gpx 文件中组织 GPS 数据，详细介绍诸如 <trkpt> 元素用于表示位置，以及 XMLSpy 和 MapForce 等工具在数据管理方面的应用。
---
Status: #blog

Tags:  #altova-xmlspy #mapforce

Categories: [Altova](/blog/zh/category/altova.md) 
# XML 的全球定位

XML技术无处不在。如果您不相信，可以尝试连接一个GPS设备到电脑，然后查找任何以“.gpx”为扩展名的文件。我们很快在一个Garmin GPS设备上找到一个名为“Current.gpx”的2MB文件。使用[XMLSpy](https://www.altova.com/zh/xmlspy.html)打开该文件，可以看到其中包含XML数据，并且在文件顶部定义了XML模式。

[![XML 模式在 XML 文件中的应用](https://lh3.ggpht.com/-99u2euIsJ4c/T06Z3djTP2I/AAAAAAAAAoE/9dN5fozXQNg/clip_image001_thumb.png?imgmax=800 "XMLSpy XML Editor")](http://lh6.ggpht.com/-ioQAbFBAvmI/T06Z3ACH_9I/AAAAAAAAAn8/xWMUhUTx68A/s1600-h/clip_image001%25255B3%25255D.png)

浏览文件内容时，会看到大量的 <trkpt> 标签，这些标签记录了经度和纬度，以及 <ele> 和 <time> 标签，它们报告了该位置的海拔高度、日期和时间。

[![XMLSpy软件中显示的一个XML文件](https://lh6.ggpht.com/-Atzl1R22Oqo/T06Z4I8PaQI/AAAAAAAAAoU/A7BOE4jHBpU/clip_image002_thumb.png?imgmax=800 "XMLSpy XML Editor")](http://lh3.ggpht.com/-nfGGLH9kBL8/T06Z3mruepI/AAAAAAAAAoM/ReG4Av5VyJ0/s1600-h/clip_image002%25255B3%25255D.png)

无论您身在世界的哪个角落，XML技术都能告诉您您在哪里。

<!--more-->

在 .gpx 文件的开头，我们可以复制 XML Schema 的 URL，然后在 XMLSpy 中直接从网页打开它。

[![XMLSpy 的模式视图](https://lh6.ggpht.com/-s8h8QbzjvjA/T06Z4we0_3I/AAAAAAAAAok/DuDgax18qzo/clip_image003_thumb.png?imgmax=800 "XMLSpy Schema view")](http://lh4.ggpht.com/-TMJNbqtdNzg/T06Z4QT4MCI/AAAAAAAAAoc/U_pH8-qUqrk/s1600-h/clip_image003%25255B3%25255D.png)

GPX 模式文件在 XMLSpy 中以模式视图打开，我们可以看到它包含了详细的注释说明。双击根元素可以打开 XMLSpy 的内容模型视图。

[![XMLSpy 内容模型视图](https://lh3.ggpht.com/-TzsOtTQzo1Q/T06Z5ek_EwI/AAAAAAAAAo0/nJkbGlnGSaA/clip_image004_thumb.png?imgmax=800 "XMLSpy Content Model view")](http://lh5.ggpht.com/-kGUm6qnJWIQ/T06Z5HOad8I/AAAAAAAAAos/HECufLQfMNk/s1600-h/clip_image004%25255B3%25255D.png)

此 XML 模式描述了一种专门的数据架构，它使用易于理解的标签，方便普通用户使用。 展开 <trk> 元素，可以深入了解我们在 Current.gpx 文件中看到的 <trkseg> 和 <trkpt> 元素的定义。 这些元素也在 XML 模式中进行了详细说明，并提供了关于其用途的清晰解释。

[![XMLSpy 内容模型的详细信息](https://lh4.ggpht.com/-dU5KjSqntVk/T06Z53CyuMI/AAAAAAAAApE/Rh1iSi8ds7Q/clip_image005_thumb.png?imgmax=800 "Detail of the XMLSpy Content Model")](http://lh5.ggpht.com/-tXYfFLnDjKQ/T06Z5iPwZMI/AAAAAAAAAo8/V4sMhHo7dpc/s1600-h/clip_image005%25255B3%25255D.png)

在 XML 中，"X" 代表 "eXtensible"，即可扩展。GPX XML 模式中的 "extensions" 元素表明，开发者意识到他们的设计可能无法满足所有可能的需求。在 "Current.gpx" 文件的开头，我们可以在第 2 行看到扩展模式的定义，而从第 3 行开始的元数据表明，Garmin International 为此文件创建了扩展。

[![XMLSpy软件中一个XML文件的详细信息](https://lh6.ggpht.com/-cm6Jgm0i9NU/T06Z6X0ySCI/AAAAAAAAApU/uGUhl4fcPzQ/clip_image006_thumb.png?imgmax=800 "Detail of an XML file in XMLSpy")](http://lh5.ggpht.com/-aMfDGu288uI/T06Z6Gm6xSI/AAAAAAAAApM/lhSHnICj8YQ/s1600-h/clip_image006%25255B3%25255D.png)

Current.gpx 文件包含了 Garmin 的扩展功能，用于记录速度（以 <gpxtpx:speed> 格式）和方向（以 <gpxtpx:course> 格式）。

[![XMLSpy软件中一个XML文件的详细信息](https://lh3.ggpht.com/-SruSULYdhf0/T06Z62ddu-I/AAAAAAAAApk/UfeCJDJAYcM/clip_image007_thumb.png?imgmax=800 "XML Data in XMLSpy")](http://lh4.ggpht.com/-zAso4IiYCvI/T06Z6j2bhyI/AAAAAAAAApc/KRTiuQ_aGTE/s1600-h/clip_image007%25255B3%25255D.png)

像[GPS Visualizer](http://www.gpsvisualizer.com/)这样的网站允许您上传.gpx文件，并将这些文件中的数据在Google地图上进行可视化。但是，当我们上传了Current.gpx文件时，地图上显示出许多颜色线条交织在一起，显得非常混乱。网页上有一个图例，列出了近二十条独立的行程记录，每条记录都标有“ACTIVE LOG”（活动记录）以及一个日期。

[![GPX 文件中的轨迹列表](https://lh3.ggpht.com/-49Ee9GHL_dQ/T06Z7hcmb0I/AAAAAAAAAp0/mFmCqTL1l1I/clip_image008_thumb.png?imgmax=800 "List of Tracks in a gpx file")](http://lh3.ggpht.com/-_9AJOkTEiEA/T06Z7KW4yqI/AAAAAAAAAps/s6C7oK7hCuE/s1600-h/clip_image008%25255B3%25255D.png)

所有“图例”条目看起来都非常像.gpx文件部分内容的截图中的第83731行。使用XMLSpy搜索“ACTIVE LOG”可以验证我们的文件确实包含大量自驾游的记录。与许多其他车载导航设备和便携式设备一样，佳明GPS会随着时间的推移，将数据累积到一个大型文件中，每个独立的行程都包含在<trk> and </trk>标签之间。

[Altova MapForce](https://www.altova.com/zh/mapforce.html) 是一个方便的工具，可以用来将这些大型 .gpx 文件分割成更小的文件，每个文件对应一次旅行。 我们可以为映射的输入和输出端都指定 gpx.xsd XML 模式，并使用分组功能，根据 <trk> 元素的每次出现来分割 Current.gpx 文件，如下面的红色连接线所示。 我们将位于 <trk> 下方的 <name> 元素作为关键，用于标记每次分割点，并用于构建每个输出文件名，同时去除文件名中不允许使用的冒号 ":" 字符。

[![使用 MapForce 工具将大型 GPX 文件分割成多个小文件](https://lh3.ggpht.com/-7mAz9FY2tUU/T06Z8LEcE5I/AAAAAAAAAqE/eyiJBuR6RY0/clip_image009_thumb.png?imgmax=800 "MapForce mapping to split a large gpx file")](http://lh5.ggpht.com/-IJ__CRhfa_E/T06Z71I7qmI/AAAAAAAAAp8/brL4Dx4biSw/s1600-h/clip_image009%25255B3%25255D.png)

当我们点击“MapForce 输出”按钮来执行数据映射时，MapForce 会在输入流中每次遇到 "<trk>" 时生成一个新的输出文件。下图显示的是生成的 20 个文件中的第 14 个文件。请注意，每个输出文件中都包含了模式定义和元数据（第 2-8 行）。

[![MapForce 映射工具用于将文件拆分成多个部分](https://lh6.ggpht.com/-aW-M7dIu46A/T06Z866Uh4I/AAAAAAAAAqU/dyUYQDIKO_w/clip_image010_thumb.png?imgmax=800 "Output of the MapForce mapping to split files")](http://lh5.ggpht.com/-DZii6QIaYUg/T06Z8u-ANzI/AAAAAAAAAqM/1lc4QwJXoe4/s1600-h/clip_image010%25255B3%25255D.png)

现在，我们可以在 [GPS Visualizer](http://www.gpsvisualizer.com/) 网站上将任何单个文件映射出来，从而查看一次完整的行程

[![在谷歌地图上显示一条GPX轨迹的路线](https://lh4.ggpht.com/-G0UHa4mnSrw/T06Z9jQ_oSI/AAAAAAAAAqk/iQNdR_3Q1vE/clip_image011_thumb.png?imgmax=800 "Plot of a single gpx track on Google Maps")](http://lh6.ggpht.com/-AdaqaYySTIA/T06Z9TQ6_-I/AAAAAAAAAqc/WOFGx6XeuPw/s1600-h/clip_image011%25255B3%25255D.png)

这类应用程序对于运动员，例如徒步者、登山者、自行车骑行者或跑步者，以及喜欢记录旅程的旅行爱好者来说，都非常实用。有关GPS交换格式、GPX结构以及相关支持资源的更多信息，请访问[http://www.topografix.com/gpx.asp](http://www.topografix.com/gpx.asp)。如果您想试用XMLSpy、MapForce或其他Altova工具，您可以[点击此处下载免费的30天试用版](https://www.altova.com/zh/download-trial/)。

**编辑说明：** 2012年4月10日，我们发布了一篇相关文章，标题为《[为GPS XML数据创建优雅的报告](https://www.altova.com/blog/2012/04/creating-elegant-reports-for-gps-xml.html)》，该文章介绍了如何使用StyleVision样式表，以绘制GPS XML旅行日志中记录的 elevation（海拔）变化图，并以HTML、RTF、PDF和Microsoft Word格式生成报告。
