Android地图当当前位置和最后一个位置相差x米时,将位置更新到服务器

Posted

技术标签:

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

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

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

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

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

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

【问题讨论】:

【参考方案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] 中存储以米为单位的距离,您可以随心所欲地使用它。

【讨论】:

以上是关于Android地图当当前位置和最后一个位置相差x米时,将位置更新到服务器的主要内容,如果未能解决你的问题,请参考以下文章

根据距当前位置的距离(米)和方位在地图上放置注释

QT 快速获取最后一个已知位置

给定 GPS 的地理位置,如何在给定的 x 米半径内找到纬度和经度

Android怎么实现点击按钮获取当前位置的信息,没有地图的情况下。

android - eclipse:使用使用 gps 获得的坐标显示谷歌地图

如何在Android地图中获得连续的位置更新?