---
title: "利用Web服务作为查找表，以优化GPS数据"
date: "2012-06-20"
categories: 
  - "data-integration"
tags: 
  - "altova-xmlspy"
  - "charts"
  - "data-mapping"
  - "diffdog"
  - "file-comparison"
  - "mapforce"
  - "missionkit"
  - "stylevision"
  - "web-services"
  - "wsdl"
description: 本文探讨了如何利用美国地质调查局（USGS）的在线服务作为参考表，通过数据映射技术来优化GPS海拔数据，从而提高数据的准确性。
---
Status: #blog

Tags:  #altova-xmlspy #charts #data-mapping #diffdog #file-comparison #mapforce #missionkit #stylevision #web-services #wsdl

Categories: [data-integration](/blog/zh/category/data-integration.md)
# 利用Web服务作为查找表，以优化GPS数据

GPS设备记录的 elevation (海拔) 数据通常非常不准确，尤其是在像俄勒冈州俄勒冈河谷（[如我们在之前的文章中提到的例子](https://www.altova.com/blog/2012/04/creating-elegant-reports-for-gps-xml.html)）这样的丘陵地形中。

从俄勒冈河谷（Russian River Valley）的GPX文件中提取出的海拔数据图存在一些可疑之处。首先，该图显示我们下降到几乎低于海平面50英尺。这很难令人相信，因为我们当时正沿着河岸行驶，距离太平洋仅约10英里。

![Altova StyleVision 图表](https://lh5.ggpht.com/-RyKmstA4f98/T-HOw4cQf4I/AAAAAAAAA1I/__oEl7-5bUk/clip_image001%25255B3%25255D.png?imgmax=800 "Altova StyleVision Chart") 其次，我们主要向西行驶，沿着河流向下游方向前进，但轨迹显示，大部分路段都是向上坡。

我们可以通过将记录的GPS海拔数据与美国地质调查局（USGS）提供的信息进行比较来进行评估。USGS提供一个网络服务，该服务接受经纬度坐标，并返回由美国国家航空航天局（NASA）测量的海拔数据，并通过对美国大陆13000多个控制点进行评估，确保数据的准确性。

在 [Altova MapForce](https://www.altova.com/zh/mapforce.html) 映射中使用海拔数据 Web 服务，可以让我们从 GPX 文件中提取每个点，将坐标发送到美国地质调查局 (USGS) 的 Web 服务，并创建一个新的 GPX 文件，其中包含经过校正的海拔数据。

<!--more-->

该解决方案将Web服务与文档中描述的“查找表”模式进行匹配 [数据映射模式](https://www.altova.com/blog/2012/06/data-mapping-patterns.html) 博客文章。每组由纬度和经度标识的坐标，都对应着一个唯一的海拔值。就像一个本地查找表，原始数据点是唯一的，但输出值可能会重复。

我们可以通过在 XMLSpy 中打开 WSDL 文件，开始了解 USGS 的 Web 服务。 这种方法尤其适用于阅读其中嵌入的文档。

![在 XMLSpy 的文本视图中查看 WSDL 文件](https://lh6.ggpht.com/-x9YnOlGaefU/T-HOxNqsHkI/AAAAAAAAA1Q/_qQdDkJrzX4/clip_image002%25255B3%25255D.png?imgmax=800 "Reviewing a WSDL in XMLSpy text view")

XMLSpy 还可以生成用于 Web 服务的 SOAP 请求，从而方便用户识别和测试所需的参数。

![由 XMLSpy 生成的 SOAP 请求](https://lh6.ggpht.com/--sibDXwVNF8/T-HOxmci9hI/AAAAAAAAA1Y/KUv5-B89JJ8/clip_image003%25255B3%25255D.png?imgmax=800 "SOAP request generated by XMLSpy")

在第一次测试中，我们使用了那些标高低于海平面的坐标。`Source_Layer` 元素指定了用于查询结果的地图集。我们从以下链接中的地图列表中选择了一个覆盖美国西部一半的地图：[http://gisdata.usgs.gov/XMLWebServices2/Elevation\_Service\_Methods.php](http://gisdata.usgs.gov/XMLWebServices2/Elevation_Service_Methods.php)

![在 XMLSpy 中，如何发送包含参数的 SOAP 请求](https://lh6.ggpht.com/-3oYTJSX8V0w/T-HOx2xpomI/AAAAAAAAA1g/mFUacQiAX0o/clip_image004%25255B3%25255D.png?imgmax=800 "SOAP request with parameters in XMLSpy")

XMLSpy 可以向 Web 服务提供商发送请求，并自动打开结果。

 

![SOAP 响应在 XMLSpy 中查看](https://lh6.ggpht.com/-SQvGvjeqwnU/T-HOyeyDPCI/AAAAAAAAA1o/EJnfZXMsXCU/clip_image005%25255B3%25255D.png?imgmax=800 "SOAP response viewed in XMLSpy")

GPS数据显示该位置的海拔为低于海平面12米，但美国地质调查局（USGS）的报告显示，该位置的实际海拔实际上高于海平面33米以上。

我们本可以要求以英尺为单位提供海拔高度，但我们没有这样做，因为 GPX 数据格式定义的海拔值是以米为单位的。 无论如何，我们计划在最终数据上应用 [StyleVision](https://www.altova.com/zh/stylevision.html) 样式表进行 [本地化](https://www.altova.com/blog/2012/04/xpath-enhances-xml-reports.html)。

**使用Web服务进行数据映射**

有时，为了在向 Web 服务发送大量数据之前对其进行测试，创建一个小型、简化的 MapForce 映射会很有用。下图展示了一个简单的 MapForce 映射，用于“getElevation” Web 服务，其中使用字符串常量作为参数，并将输出结果保存到文本文件中。

![在 MapForce 中进行 Web 服务测试映射](https://lh5.ggpht.com/-VZuHV13mkDQ/T-HOyduSq5I/AAAAAAAAA1w/Ljkg-tSkQwk/clip_image006%25255B3%25255D.png?imgmax=800 "Web service test mapping in MapForce")

点击“MapForce 输出”按钮，将使用提供的参数执行数据映射。以下是结果：

![MapForce 测试映射的输出结果](https://lh5.ggpht.com/-ENG6c5uitZ8/T-HOy3C4nPI/AAAAAAAAA14/0zCeHpE6ZO0/clip_image007%25255B3%25255D.png?imgmax=800 "Output of the MapForce test mapping")

我们将从两个GPX模式副本开始，构建MapForce的正式版本。我们将连接源数据中的所有元素到目标，除了海拔数据。

![在 MapForce 中，支持部分 GPX 格式的地图数据导入](https://lh6.ggpht.com/-SbmDoTbcEwo/T-HOzMe4htI/AAAAAAAAA2A/KBqYrPAT4aA/clip_image008%25255B3%25255D.png?imgmax=800 "Partial GPX mapping in MapForce")

接下来，我们只需将测试环境中的Web服务定义及其参数复制到生产环境，并将Web服务中的X_Value和Y_Value分别连接到源GPX文件中包含的经度和纬度。

![MapForce Web服务调用可以优化GPX格式的海拔数据](https://lh6.ggpht.com/-mjks13bElcc/T-HOzfuX3MI/AAAAAAAAA2I/KXSffKCwi-g/clip_image009%25255B3%25255D.png?imgmax=800 "MapForce Web service call refines GPX elevation data")

在Web服务的输出端，我们只需将结果连接到输出组件中的“海拔”元素即可。(我们把海拔高度（以米为单位）保留两位小数，因为精确到个位似乎有些过度——我们这里不是在测量板块的上升和下降！)

当我们执行新的地图版本时，每个 <trkpt> 标签中的坐标会被传递给 Web 服务，然后，Web 服务返回的海拔值会被填入输出端的 <ele> 标签中。

![MapForce GPX 地图输出，已更新海拔数据](https://lh5.ggpht.com/-vn8sNaJY74Q/T-HOzgpx6lI/AAAAAAAAA2Q/2FuKiNwGmd4/clip_image010%25255B3%25255D.png?imgmax=800 "Output of the MapForce GPX mapping with updated elevation")

我们可以使用 [Altova DiffDog](https://www.altova.com/zh/diffdog/diff-merge-tool.html) 软件，将转换后的 GPX 文件与新的高程数据进行比较，并与原始文件进行对比。差异会在网格视图中清晰地突出显示。此外，在转换过程中，经度和纬度值中一些无关的尾部零也被去除了。

![DiffDog 对原始 GPX 文件和更新后的 GPX 文件进行比较](https://lh5.ggpht.com/-2KgbPgsJsa8/T-HO0TwCP4I/AAAAAAAAA2Y/CrTQV9WDUXc/clip_image011%25255B3%25255D.png?imgmax=800 "DiffDog comparison of the original and updated GPX files")

我们还可以使用StyleVision SPS样式表，该样式表具有本地化功能，从而对转换后的文件进行可视化呈现。

![StyleVision 图表，展示更新后的 GPX 数据](https://lh3.ggpht.com/-vSWj8_nctng/T-HO0yFa0HI/AAAAAAAAA2g/sHHvELJqhiU/clip_image012%25255B3%25255D.png?imgmax=800 "StyleVision chart of the updated GPX data")正如您所期望的，沿着河流向下行驶，轨迹不会低于海平面，总体趋势是向下倾斜！

GPS设备记录的 elevation (海拔) 数据本质上不如 x-y 坐标那样精确。此外，在移动过程中，山丘和其他障碍物可能会阻挡对一个或多个 GPS 卫星的视线，导致无法接收到它们的无线信号。

以下地图展示了俄罗斯河谷旅行的其中一段。红色圆点标记了一个地点，GPS记录的该地点的海拔高度为-12.8米，但美国地质调查局（USGS）报告的该地点的海拔高度为+33.28米。位于正西方向的“野猪山”海拔超过1100英尺，遮挡了很大一部分天空，并且很可能阻挡了GPS卫星信号。

![野猪山地形图](https://lh5.ggpht.com/-3qCQGD1C36s/T-HO1Ua6bhI/AAAAAAAAA2o/Mp4-wETUD2Y/clip_image013%25255B3%25255D.png?imgmax=800 "Terrain map of Wild Hog Hill")
作为最后一点补充，我们转换了来自[新罕布什尔徒步路线的GPX文件](https://www.altova.com/blog/2012/04/xpath-enhances-xml-reports.html)中的高程数据，并使用XMLSpy将美国地质调查局（USGS）的高程数据以绿色绘制在原始GPS高程轨迹上，作为叠加图。

![XMLSpy 软件生成的，展示原始和更新后的高程数据的图表](https://lh6.ggpht.com/-rmK0R4VS9ko/T-HO1r7-KfI/AAAAAAAAA2w/BhJxiujYmpE/clip_image014%25255B3%25255D.png?imgmax=800 "XMLSpy chart of original and updated elevation data")

很容易就能看出哪个形状更能准确地描绘新英格兰地区一座被风化侵蚀的山坡。

**如果您想使用以下工具，请** [Altova MissionKit 套件](https://www.altova.com/zh/missionkit/software-development-tools.html) **用于创建您自己的数据映射，并将Web服务作为查找表** [点击此处下载免费试用版](https://www.altova.com/zh/download-trial/)**.**
