我正在编写一个应用程序,利用GPS信息来确定用户所在的道路/路径(或OpenStreetMaps中的“方式”)。 OSM中的方法不包括宽度信息,只是连接在一起的一系列点,因此不需要确定GPS坐标所在的多边形框。
我所拥有的信息是在弯道时定义线索的点列表(如果它只是一条直线,可能是相距1/2英里的2点)。这些小径通常由树线(相隔50-300米)分开,并且在公园内可以有很多这样的小径,因此在边缘情况下没有宽度信息的准确性可能很棘手。通常,定义的方式沿着路径的中心运行。
似乎我需要计算路径上的所有单个向量,然后找到最近的向量。我担心每次新的GPS更新都会非常密集(每1-4秒?)。我至少可以提前填写每条路径上的点数(每隔x米强制一个点),然后在GPS更新时获得最近点。
是否有任何结构可以预先调整点数据以协助计算?解决这个问题的任何其他已知算法都是移动约束友好的吗?看起来这应该是一个已经解决的问题。
答案 0 :(得分:0)
这解决了,它被称为地图匹配 我已经为收费目的编写了这样一个系统。存在与实时匹配相关的变体,例如在导航系统中,或者与我的非实时相关的后处理GPS数据 但在每种情况下,至少需要一个月的努力。
如果你有一条在两条路上分叉的小道,事情就开始变得困难了
如果在这种情况下匹配错误的路径时没有问题,您只需搜索最近的路径即可。
为避免太多的CPU功率使用地理空间索引,如四叉树或k-d树。
答案 1 :(得分:0)
据推测,您正在使用地图渲染API,该API从某种数据格式中绘制地图。这本质上是一个称为空间数据库的专用数据库。在理想的世界中,它应该能够有效地找到一定距离内的所有道路和路径,比如50米。
一旦你有了附近道路和路径的列表,即使在一个建筑物较大的区域,在一个交叉点旁边,也不会超过数字的低十位,你可以逐个浏览它们并找到最接近你的GPS定位。有一些标准方法可以找到最近的一条线;这里有一个讨论:get closest point to a line。
这个系统(根据我的经验)应该足够快,足以每秒进行GPS更新。
如果您遵循预定的路线,那就更快了,因为那时您只需要检查路线的各个部分 - 当然,如果他或她离路线太远则通知用户被认为是在它上面,然后创建一个新的路线。这就是卫星导航系统的作用。