当当前位置与之前位置之间存在x米差异时,我想用latlong当前位置更新服务器。
我有一个应用程序,我想跟踪车辆的移动,因此当驾驶室的当前位置与先前存储的位置之间存在x米的差异时,在车辆内使用该应用程序的驾驶员将自动更新其当前位置。所以其他用户将能够确切地找到这个驱动程序。(所以在这种情况下,我应该运行一个线程来自动请求更新当前位置或其他东西)。
如何确定两个latlong点之间的距离是否可以找出当前位置与之前存储的位置之间的差异是否为X米。
如果我使用requestLocationUpdates(String provider, long minTime, float minDistance, LocationListener listener)
功能,我将能够提供mindistance作为X米,它可以完成工作,但它没有给服务器提供准确的更新。
我已经完成了这个问题here但是因为我是初学者并没有明确的想法。 如果有人帮助我实现这一目标,我将不胜感激。
答案 0 :(得分:1)
您可以将先前的位置存储在首选项变量中,然后每当位置发生变化时,您都可以计算当前位置和之前位置之间的距离,为此您可以使用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);
...
}
现在你在结果[0]中存储了距离,你可以随心所欲地使用它。
答案 1 :(得分:1)
您可以使用Google Play Services Location API。阅读有关如何重新定位位置更新的文档here。
创建LocationRequest
时,您可以使用setInterval
和setFastestInterval
指定更新频率,或使用setSmallestDisplayments
指定更新之间的最短距离。
当您收到更新时,您可以将经度和纬度存储在共享偏好设置中,并在下次收到更新时使用这些值。
如果您想检查两个位置之间的距离是否大于您指定的最小距离,可以使用Location.distanceBetween
来执行此操作。
有关如何在共享偏好设置中保存位置数据的信息,请参阅this answer。