这个问题在某种程度上与地理空间信息系统的知识重叠,但我认为它属于这里而不是GIS.StackExchange
有很多应用可以处理GPS数据与非常相似的对象,其中大多数是由GPX standard定义的。这些对象将是路线,轨道,航点等的集合。一些重要的程序,如GoogleMaps,或多或少地以KML格式序列化相同的实体。在线有很多其他的地图应用程序(ridewithgps,strava,runkeeper,仅举几例),它们以不同的方式处理这种数据,但允许对数据进行或多或少的等效“操作”。这些操作的示例如下:
有一些小型库(如GpxPy)尝试对这些对象及其方法进行建模,其理想情况是允许封装的,可能与语言无关的库/ API。
事实是:这个问题已经存在足够长的时间,可以让“普遍接受的标准”出现,不是吗?另一方面,大多数GIS软件都非常专业地面向地理空间分析,地形和制图应用,而典型的旅行记录和旅行计划应用似乎更倾向于消费者爱好者,这可能解释了不同的分散方式项目/应用程序处理和建模问题。
因此,考虑到所说的一切,问题是:目前或正在计划中,是否有一种标准的方式来以面向对象的方式对canonicaly进行建模,最常用的GPS / Tracklog实体及其规范属性和方法?< / p>
有GPX架构,它非常接近我的想象,但它只包含对象和属性,而不是方法。
非常感谢任何信息,谢谢!
答案 0 :(得分:3)
据我所知,在存储/操作/处理&#34; route&#34;时,没有标准的库,接口,甚至是已建立的最佳实践集。数据。我们已经通过GPS在Ride上为这些问题付出了很多努力,我知道解决相关问题的其他网站也可以这么说。我希望有一个标准,并希望与某人合作。
GPX没问题,似乎是一种标准......至少在你开始处理GPX文件并发现每个人都同时在格式中添加自己的自定义扩展以处理心率,节奏,功率等数据之前此外,还没有将路线点与轨迹点相关联的标准方法。你的&#34;面包屑小道&#34;路线的一部分表示为一系列trkpt元素,并且路线点(例如&#34;左转到第四条街道&#34;)在一系列单独的rtept元素中表示。理想情况下,您希望将给定的航线点与特定的航迹点相关联,而不是仅仅为航线点提供经度和纬度。如果你的路径在同一条街道上进行了几次循环,那么它可能会在路线上沿路线附加路线时引入一些歧义。
KML和Garmin的TCX格式与GPX类似,各有利弊。最后,这些格式实际上只用于在程序之间传输数据。它们没有解决如何在程序中表示数据的问题,或者可以对数据执行何种类型的操作。
我们将轨道数据存储为一个对象数组,其中的键对应于不同的属性,如纬度,经度,海拔,开始时间,开始距离,速度,心率等。另外,我们存储了一些元数据。路由以指定每个部分的详细信息。在解析我们的跟踪点数组时,我们使用此元数据将Route拆分为一系列Segments。分段可以被分割,连接,移除,附加,反转等。它们还封装了跟踪点生成的方法,无论是通过沿直线插值点,还是请求表示端点之间的方向的路径。这些方法允许合理直接地实现拖放编辑和其他常见操作。 Route对象可用于处理涉及多个段的操作。一个例子是如果你有一个由段组成的路线 - 一些行驶方向,直线,行走方向,等等 - 并且想要扭转路线。您可以要求每个段自行反转,并在此过程中保持其设置。在更高级别,我们使用Map类连接接口,将命令分派给Route,并保持一系列快照或转换函数正确更新,以获得合理的撤消/重做支持。
路线操纵和生成是目标之一。其他的是聚合摘要统计数据,用于构建数据以实现高效的可视化/交互。这些问题已在某种程度上由任何将接收数据并生成折线图的系统解决。这里不是新领域。路径数据的一个有趣特征是,您通常会有两个变量可供您选择x轴:从开始的时间和从开始的距离。两者都是单调递增的,并且都提供有用但不同的数据解释。查看具有x轴距离的高程图将显示骑自行车在山坡上上下对称。使用x轴时间,上坡部分相当宽。这不仅仅是在图形上可视化数据,它还可以转换为在将数据处理为摘要统计时所做出的决策。一些加权平均值有意义基于时间,一些偏离距离。您最终想要的操作是最小值,最大值,加权(基于您选择的独立变量)平均值,过滤点和执行过滤的最小值/最大值/平均值的能力(仅使用您移动的点,忽略异常值等) ),不同的平滑功能(例如,有助于计算总高度增益),地图/缩小功能的基本概念(我在20-30mph之间花费了多少时间等),以及涉及一些插值的固定窗口移动平均值。如果你想确定最快的10分钟,或者10分钟的最高平均心率等,那么后者是必要的。最后,你需要一种简单有效的方法来执行你正在运行的任何计算。您的跟踪点的子集。
如果您有兴趣,可以在此处查看所有这些操作的示例:http://ridewithgps.com/trips/964148
底部的图形可以被鼠标悬停,拖动选择可以放大.x轴有一个链接可以在距离/时间之间切换。在底部的左侧边栏上,您将看到最佳的30秒和60秒的努力 - 这些是通过插值固定窗口移动平均线完成的。在右侧边栏上,点击&#34;指标&#34;标签。拖动选择以放大图表上的某个部分,您将看到所有指标都会更新以反映您的选择。
很乐意回答任何问题,或者与某些人合作,对某些想法进行某种标准或公开实施。
这可能不是你想要的答案,但我想我会提供一些关于我们如何使用GPS在Ride上做事情的细节,因为我们不知道你似乎在寻找任何真正的标准
谢谢!
答案 1 :(得分:1)
经过一些深入的研究后,我觉得有责任,为了记录和未来寻找这个问题的人的帮助,提到两个实体完成的关于这个主题的非常详尽的工作,有时合作:ISO和OGC。
从ISO(国际标准化组织),“TC 211 - Geographic information/Geomatics”部分几乎包含了所有内容。
来自OGS(开放地理空间联盟),他们的Abstract Specifications非常广泛,同时也是ISO的冗余和补充。
我不确定它是否包含与建议的应用程序相关的对象方法(gps跟踪和航路点分析和操作),但是确保这些文档中包含的核心概念相当可靠。 UML是他们选择的架构表示。
ISO 6709 “[...]指定要在数据交换中使用的坐标表示,包括纬度和经度。它还使用除纬度以外的坐标类型指定水平点位置的表示它还指定了可以与水平坐标相关联的高度和深度的表示。表示包括度量单位和坐标顺序。“
ISO 19107 “指定用于描述地理要素的空间特征的概念模式,以及与这些模式一致的一组空间操作。它将矢量几何和拓扑处理为三维。它定义了标准用于访问,查询,管理,处理和数据交换的空间操作,用于最多三个拓扑维度的空间(几何和拓扑)对象,最多可嵌入三个轴的坐标空间。“
如果我发现新内容,我会回来编辑此内容,包括可用的链接。