【问题标题】:How to determine if user is on same road as GPS coordinates如何确定用户是否与 GPS 坐标在同一条道路上
【发布时间】:2014-10-24 11:50:47
【问题描述】:

我有一个使用 Google 地图的基于 GPS 的 iPhone 应用程序。该应用程序仅在地图上显示用户当前位置,并在用户到达旅程中标记点的一定半径范围内时提醒用户。

出于法律原因,我无法在应用程序中使用逐步导航,因此应用程序永远不会知道用户从 A 到 B 的路线。应用程序所做的只是不断检查当前位置。 GPS点坐标数据库。如果用户当前位置在例如50 米的点,用户将收到关于该点的消息。

我的问题是: 每个点的半径大约为 50 米,如下图的蓝色大圆圈所示。

用户由小蓝点指示,行进方向由红色箭头标记。在图像中,用户输入了点的半径,但实际上与点不在同一条道路上。用户应仅在与 Point 位于同一条道路上且在 Point 半径范围内时收到消息。

在输入 Points 半径时,我是否可以确定用户是否与 thePoint 在同一条道路上?

旁注:应用程序正在其当前状态下运行,我可以在输入点的半径时收到消息。

【问题讨论】:

    标签: ios xcode google-maps gps


    【解决方案1】:

    我实施基于 GPS 的跟踪应用程序已有一段时间了。我看到的最简单的方法是,当您收到该点进入 50 m 半径的事件时,您会进行地理查找,这意味着您向系统询问经度/纬度的地址。您将此(街道)与您的参考点的地理查找进行比较。

    这需要地理查询服务和用户在线。

    【讨论】:

    • 性能如何?我将不得不检查线程的每个循环的当前街道地址,以始终拥有我所在的当前街道名称。当我达到点半径时,我将不得不对块中的点地址进行反向地理查找 ^ 以获取点地址,然后检查我当前的街道地址?或者有比我描述的更好的方法吗?我描述的方式会不会太费时间或者一下子就把手机的电池耗光了?
    • 通常使用CLLocationManagerdistanceFilterdesiredAccuracy 来配置每分钟更新的位置数。我通常不使用块,而是使用函数` (void)locationManager:(CLLocationManager *)manager didUpdateToLocation:(CLLocation *)newLocation fromLocation:(CLLocation *)oldLocation 函数从CLLocationManager 获取位置更新通知.
    • 功耗确实是一个问题,当然,如果您从 GPS 请求最高分辨率(在您的情况下,由于您谈论的是 50m 半径,可能需要)。使用数据网络也会消耗电力。我建议,明智地使用distanceFilter,尝试每 25 米发起一次地理查询呼叫是没有用的(但这实际上取决于您移动的速度),因为数据网络(如果它在移动设备上)不会无论如何都足够快。
    • 关于性能,请确保您等待启动另一个地理查找,直到前一个完成。您不希望在您发起许多地理查询调用并且系统无法跟踪的情况下结束......
    • 感谢 HixField。里面有很多非常方便的技巧。我会尽快解决这个问题,并在我完成这项工作后立即将这个问题标记为正确。
    【解决方案2】:

    您应该使用在创建每个点时定义的矩形,而不是使用圆形。或者同时使用两者:如果您的矩形过于近似,则在圆圈内测试街道的矩形。您可以通过在开始时对圆的不同点进行地理查找来找出矩形的大致边缘。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-12-16
      • 2012-10-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多