【问题标题】:Android map Update location to server when there is difference of x meters between current location and last locationAndroid地图当当前位置和最后一个位置相差x米时,将位置更新到服务器
【发布时间】:2014-09-16 01:46:35
【问题描述】:

当当前位置与先前位置之间存在 x 米的差异时,我想用当前位置的 latlong 更新服务器。

我有一个应用程序,我想在其中跟踪车辆运动,因此当驾驶室的当前位置与先前存储的位置之间存在 x 米的差异时,在车内使用该应用程序的驾驶员将自动更新其当前位置。所以其他用户将能够找到这个驱动程序的确切位置。(所以在这种情况下,我应该运行一个线程来自动请求更新当前位置或其他东西)。

如何找出两个经纬度点之间的距离,以便我可以找出当前位置与先前存储的位置之间的差异是否为 X 米。

如果我使用requestLocationUpdates(String provider, long minTime, float minDistance, LocationListener listener) 函数,我将能够提供 minDistance 作为 X 米,它会完成这项工作,但它不会为服务器提供准确的更新。

我已经解决了这个问题here,但由于我是初学者并没有明确的想法。 因此,如果有人帮助我如何实现这一目标,我将不胜感激。

【问题讨论】:

    标签: android android-maps-v2 android-maps


    【解决方案1】:

    您可以使用Google Play Services Location API。阅读有关如何接收位置更新的文档here

    创建LocationRequest 时,您可以使用setIntervalsetFastestInterval 指定接收更新的频率或使用setSmallestDisplayments 指定更新之间的最小距离。

    当您收到更新时,您可以将纬度和经度存储在共享首选项中,并在下次收到更新时使用这些值。

    如果您想检查两个位置之间的距离是否大于您指定的最小距离,您可以使用Location.distanceBetween

    有关如何在共享首选项中保存位置数据的信息,请参阅this answer

    【讨论】:

      【解决方案2】:

      您可以将先前的位置存储在首选项变量中,然后每当位置发生变化时,您都会计算当前位置和先前位置之间的距离,为此您可以使用 LocationListener 中的 distanceBetween 函数:

      @Override
          public void onLocationChanged(Location loc) {
      ....
      final float[] results = new float[1];
      Location.distanceBetween(previous.lat, previous.lng, loc.lat, loc.lng, results);
      ...
      }
      

      现在您可以在 results[0] 中存储以米为单位的距离,您可以随心所欲地使用它。

      【讨论】:

        猜你喜欢
        • 2020-01-21
        • 2017-03-06
        • 2022-11-28
        • 1970-01-01
        • 2011-07-15
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-11-11
        相关资源
        最近更新 更多