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
时,您可以使用setInterval
和setFastestInterval
指定接收更新的频率或使用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米时,将位置更新到服务器的主要内容,如果未能解决你的问题,请参考以下文章
给定 GPS 的地理位置,如何在给定的 x 米半径内找到纬度和经度
Android怎么实现点击按钮获取当前位置的信息,没有地图的情况下。