【发布时间】:2019-11-22 20:17:16
【问题描述】:
我正在开发车辆跟踪应用程序,我们正在使用驾驶员 GPS 来获取位置。
我正在使用 Google 定期位置更新代码,间隔为 5 秒。
当司机在一个点停留大约 2 分钟并且更多的 GPS 位置从这里和那里移动,所以我绘制的折线不平滑它在那个点上造成混乱。
所以任何人都可以指导我如何避免从设备获取虚假位置。
【问题讨论】:
标签: android
我正在开发车辆跟踪应用程序,我们正在使用驾驶员 GPS 来获取位置。
我正在使用 Google 定期位置更新代码,间隔为 5 秒。
当司机在一个点停留大约 2 分钟并且更多的 GPS 位置从这里和那里移动,所以我绘制的折线不平滑它在那个点上造成混乱。
所以任何人都可以指导我如何避免从设备获取虚假位置。
【问题讨论】:
标签: android
此功能将在您的设备理想时发送位置。
LocationCallback mHistoryIdealLocationCallback;
private void requestHistoryUpdates() {
try {
LocationRequest request = new LocationRequest();
request.setInterval(10 * 60 * 1000);
request.setFastestInterval(10 * 60 * 1000);
request.setPriority(LocationRequest.PRIORITY_HIGH_ACCURACY);
clientHistoryIdeal = LocationServices.getFusedLocationProviderClient(this);
int permission = ContextCompat.checkSelfPermission(this,
Manifest.permission.ACCESS_FINE_LOCATION);
if (permission == PackageManager.PERMISSION_GRANTED) {
mHistoryIdealLocationCallback = new LocationCallback() {
@Override
public void onLocationResult(LocationResult locationResult) {
Location location = locationResult.getLastLocation();
}
};
clientHistoryIdeal.requestLocationUpdates(request, mHistoryIdealLocationCallback, null);
}
} catch (Exception e) {
e.printStackTrace();
}
}
还可以使用 10 米的最小位移管理您的实时位置:
LocationRequest request = new LocationRequest();
request.setInterval(10 * 1000);
request.setFastestInterval(10 * 1000);
request.setSmallestDisplacement(10);
【讨论】:
您可以在用户不移动时使用location.getSpeed(),然后您的功能未运行或折线未在屏幕上绘制
你可以这样使用。
if(location.getSpeed()>=20){
//Write you condition
}
另一个解决方案是,在这个公式中,您可以检查位移并执行您的任务
public static double displacement(LatLng start, LatLng end) {
try {
Location location1 = new Location("locationA");
location1.setLatitude(start.latitude);
location1.setLongitude(start.longitude);
Location location2 = new Location("locationA");
location2.setLatitude(end.latitude);
location2.setLongitude(end.longitude);
double distance = location1.distanceTo(location2);
DecimalFormat decimalFormat = new DecimalFormat("#.#");
DecimalFormatSymbols custom = new DecimalFormatSymbols();
custom.setDecimalSeparator('.');
decimalFormat.setDecimalFormatSymbols(custom);
return Double.parseDouble(decimalFormat.format(distance));
} catch (Exception e) {
Utils.LogExceptionToFabric(e);
e.printStackTrace();
}
return 0;
}
【讨论】: