【问题标题】:Is gps location between two locations是两个位置之间的gps位置
【发布时间】:2012-07-03 09:44:47
【问题描述】:

我正在开展一个项目,该项目将在车辆四处行驶时对其进行跟踪。车辆位置取自Geoloqi API,并显示在自动更新的地图上。坐标被传递给 Drupal 中的 AHAH 函数,该函数将通过其他一些 API:s 加载有关位置的更多信息。其中之一是 Geonames.org。

我不想过于频繁地从远程服务器加载数据,因为这会增加负载并过快地使用我们的积分。然而。我确实希望它尽可能实时,因为这对项目至关重要。所以我想这样做:

Geonames 为当前街道提供一串 GPS 位置,以便将其绘制在地图上。 “线”被赋予下一个交叉点。如果每次位置更改时都询问当前街道名称,我们会吃得太快,但是在每个十字路口呢?

是否可以在 PHP 中检查给定的 gps 坐标是否位于其他两个坐标之间的线上?如果这条线可以向各个方向延伸几米以消除任何偏移,那也是很好的。

非常感谢您的所有建议。

【问题讨论】:

    标签: php geolocation gps


    【解决方案1】:

    您最初的问题归结为一个简单的数学问题:在给定两个点的情况下,找到一条直线的方程。这部分很简单:假设你有两个坐标为 (lat1, lon1) 和 (lat2, lon2) 的点,那么直线的方程将是

    (lon2 - lon1) * X + (lat1 - lat2) * Y + (lat1 * lon2 + lat2 * lon1) = 0
    

    现在,当你得到任何其他点 (lat, lon) 时,只需将这些坐标分别作为 (X, Y) 放入方程中。如果你得到 0,那么这个点就在线上。然后检查您的lat 是否介于lat1lat2 之间,以及您的lon 是否介于lon1lon2 之间。如果是,则新点位于两个现有点之间的直线上。

    更复杂的部分来自两件事:

    1. GPS 错误。为了解决这个问题,您可以做一些近似,例如,不要与 0 比较,而是给它一些余地,例如从-err+err 进行比较,其中err 是您定义的某个值。

    2. 事实上大多数街道并不直。下图显示了问题。如果您查看顶部街道两端之间的线,垂直街道的顶部将在这条线上 - 但这不是您想要的。

    也许更好的方法是使用距离变化。如果 GPS 报告的距离变化小于某个预定义值,则不要重新查询位置。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-11-24
      • 1970-01-01
      • 2017-01-13
      • 1970-01-01
      • 2015-02-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多