5

这个问题与地理空间信息系统的知识有些重叠,但我认为它属于这里而不是 GIS.StackExchange

周围有很多应用程序处理具有非常相似对象的 GPS 数据,其中大多数由GPX 标准定义。这些对象将是路线、轨迹、航路点等的集合。一些重要的程序,如 GoogleMaps,以 KML 格式序列化或多或少相同的实体。还有很多其他在线地图应用程序(ridewithgps、strava、runkeeper 等等)以不同的方式处理这种数据,但允许或多或少地对数据进行等效的“操作”。这些操作的示例是:

  • 用鼠标直接操作轨迹/轨迹点(包括在地图上绘制);
  • 基于时间和/或距离的合并和拆分;
  • 用 DEM/SRTM 高程代替 GPS 采集的高程;
  • 计算部分轨道的属性(总上升、平均速度、距离、经过的时间);

有一些小型库(如GpxPy)尝试对这些对象及其方法进行建模,以理想情况下允许封装的、可能与语言无关的库/API。

事实是:这个问题已经存在了足够长的时间以允许出现“共同接受的标准”,不是吗?另一方面,大多数 GIS 软件非常专业地面向地理空间分析、地形和制图应用程序,而典型的旅行记录和旅行计划应用程序似乎更面向消费者爱好者,这可能解释了不同的方式相当分散项目/应用程序处理和建模问题。

因此,考虑到所说的一切,问题是:目前或正在计划中,是否有一种标准方法来规范地以面向对象的方式对最常用的 GPS/Tracklog 实体及其规范属性和方法进行建模?

有 GPX 模式,它非常接近我的想象,但它只包含对象和属性,而不包含方法。

任何信息将不胜感激,谢谢!!

4

2 回答 2

3

据我所知,在存储/操作/处理“路由”数据时,没有标准库、接口,甚至没有一套既定的最佳实践。我们在 Ride with GPS 上为这些问题付出了很多努力,我知道其他解决相关问题的站点也可以这样说。我希望有一个标准,并愿意与某人一起工作。

GPX 没问题,似乎是一种标准……至少在您开始处理 GPX 文件并发现每个人都同时向格式添加了自己的自定义扩展来处理心率、节奏、功率等数据之前。此外,没有将路线点与跟踪点相关联的标准方法。路线的“面包屑轨迹”表示为一系列 trkpt 元素,而路线点(例如“左转进入第 4 街”)则表示为一系列单独的 rtept 元素。理想情况下,您希望将给定的路线点与特定的跟踪点相关联,而不是仅仅为路线点提供纬度和经度。如果您的路径在同一条街道上进行了多次循环,则可能会在路线点应沿路线连接的位置产生一些歧义。

KML 和 Garmin 的 TCX 格式与 GPX 类似,各有优缺点。最后,这些格式实际上仅用于在程序之间传输数据。它们没有解决如何在程序中表示数据的问题,或者可以对数据执行什么类型的操作。

我们将轨迹数据存储为对象数组,其键对应于不同的属性,例如纬度、经度、海拔、开始时间、开始距离、速度、心率等。此外,我们沿路线存储一些元数据以指定每个部分的详细信息。在解析我们的跟踪点数组时,我们使用此元数据将 Route 拆分为一系列 Segment。段可以拆分、连接、移除、附加、反转等。它们还封装了跟踪点生成的方法,无论是通过沿直线插入点,还是请求表示端点之间方向的路径。这些方法允许相当直接地实现拖放编辑和其他常见操作。Route 对象可用于处理涉及多个段的操作。一个例子是,如果您有一条由路段组成的路线 - 一些行车路线、直线、步行路线等等 - 并且想要反转路线。您可以要求每个段自行反转,在此过程中保持其设置。在更高的层次上,我们使用 Map 类来连接接口,向 Route(s) 发送命令,并保持一系列快照或转换函数正确更新,以支持合理的撤消/重做。

路线操纵和生成是目标之一。其他人正在汇总汇总统计信息,正在构建数据以实现有效的可视化/交互。任何可以接收数据并生成折线图的系统都已在一定程度上解决了这些问题。这里不完全是新领域。路线数据的一个有趣特征是,您通常会为 x 轴选择两个变量:距起点的时间和距起点的距离。两者都是单调递增的,并且都提供了有用但不同的数据解释。查看带有 x 轴距离的高程图将显示骑自行车上下山是对称的。使用 x 轴时间,上坡部分相当宽。这不仅仅是在图表上可视化数据,它还转化为您在将数据处理为汇总统计数据时所做的决策。一些加权平均值基于时间,一些基于距离是有意义的。您最终想要的操作是最小、最大、加权(基于您选择的独立 var)平均值、过滤点和执行过滤的最小/最大/平均值的能力(仅使用您移动的点、忽略异常值等) )、不同的平滑函数(例如帮助计算总高程增益)、地图/减少功能的基本概念(我在 20-30 英里/小时之间花费了多少时间等),以及涉及一些插值的固定窗口移动平均值。如果您想确定您最快的 10 分钟或 10 分钟的最高平均心率等,则后者是必要的。最后,您

如果您有兴趣,可以在此处查看所有这些操作的示例:http ://ridewithgps.com/trips/964148

可以将鼠标悬停在底部的图表上,拖动选择以放大。x 轴有一个链接可以在距离/时间之间切换。在底部的左侧边栏中,您会看到 30 秒和 60 秒的最佳效果 - 这些都是通过固定窗口移动平均线和插值完成的。在右侧边栏上,单击“指标”选项卡。拖动选择以放大图表上的某个部分,您将看到所有指标更新以反映您的选择。

乐于回答任何问题,或与任何人一起就其中一些想法的某种标准或开放实施进行合作。

这可能不是您正在寻找的答案,但我想我会提供一些关于我们如何在 Ride with GPS 上做事的细节,因为我们不知道您似乎正在寻找任何真正的标准。

谢谢!

于 2012-10-26T09:16:42.187 回答
1

在进行了一些更深入的研究之后,我觉得有义务为记录和帮助未来的人们寻找这个,提一下两个实体在这个主题上所做的非常详尽的工作,有时是协同工作的:ISO 和 OGC。

来自 ISO(国际标准组织)的“ TC 211 - 地理信息/地理信息”部分几乎包含了所有内容。

来自 OGS(开放地理空间联盟)的抽象规范非常广泛,同时是对 ISO 的冗余和补充。

我不确定它是否包含与提议的应用程序相关的对象方法(gps 跟踪和航点分析和操作),但可以肯定的是,这些文档中包含的核心概念相当扎实。UML 是他们选择的模式表示。


ISO 6709 “[...] 指定了坐标的表示,包括纬度和经度,用于数据交换。它还指定了使用纬度和经度以外的坐标类型表示水平点位置。它还指定了高度的表示和可以与水平坐标相关联的深度。表示包括测量单位和坐标顺序。

ISO 19107 “指定了用于描述地理特征的空间特征的概念模式,以及与这些模式一致的一组空间操作。它处理矢量几何和拓扑最多三个维度。它定义了用于访问、查询、管理的标准空间操作、处理和数据交换空间(几何和拓扑)对象的地理信息,这些对象具有最多三个拓扑维度,嵌入最多三个轴的坐标空间中。”


如果我发现新的东西,我会回来编辑它,包括可用的链接。

于 2012-10-27T14:12:40.737 回答