我开发了一款类似超级的应用程序,但由于从接送位置到行程完成位置的距离不正确,我在计算正确的票价方面遇到了问题。 我做了什么和做了什么:
第一种方法
我在驾驶员的当前位置(行程开始时保存位置)和结束位置(行程已完成)之间保持距离 像这样。
distanceInMeters = locationChanged.getmCurrentlocation().distanceTo(loc_pick_up);
但是这段代码存在问题。如果乘客上车位置(行程开始)和下车位置(行程已完成)相同距离为零。
第二种方法
现在我每分钟都在调用一种方法。这是第一次执行时。计算拾取位置(从行程开始)到当前位置(1分钟后的位置)之间的距离,并保存变量的差异。并且当前位置变为拾取位置并且再次执行方法时。它计算拾取位置和当前位置之间的距离(在1分钟之前和之后的位置之间),并将结果添加到已保存的距离中。
private void locationDistanceHandler() {
handlerLocation = new Handler();
runnableCode = new Runnable() {
@Override
public void run() {
Location loc_pick_up = new Location("");
if (!pick_up_value_used) {
loc_pick_up.setLatitude(pickUpLatLng.latitude);
loc_pick_up.setLongitude(pickUpLatLng.longitude);
locationChanged.setmPickUpLocation(locationChanged.getmCurrentlocation());
pick_up_value_used = true;
} else {
loc_pick_up.setLatitude(locationChanged.getmPickUpLocation().getLatitude());
loc_pick_up.setLongitude(locationChanged.getmPickUpLocation().getLongitude());
}
Log.d(Constants.LOG, "handle location called:" + distanceInMeters);
distanceInMeters = distanceInMeters + locationChanged.getmCurrentlocation().distanceTo(loc_pick_up);
handlerLocation.postDelayed(this, 60000);
}
};
handlerLocation.postDelayed(runnableCode, 60000);
}
但这不准确。今天我在18分钟内从办公室走了20公里到家。但这种方法计算的距离为6.8km。
请建议我更好的方法来执行此操作或任何有效的源代码示例。所以我可以解决这个问题。
答案 0 :(得分:0)
float[] results=new float[5];
loc_pick_up.distanceBetween(startLatitude,startLongitude, endLatitude, endLongitude,results);
String calculatedDistance=results[0];
System.out.println("Distance between point A and point B are: " + calulcatedDistance);