【发布时间】:2016-11-15 01:35:09
【问题描述】:
我开发了一个类似 uber 的应用程序,但由于从接送地点到旅行完成地点的距离不正确,我在计算正确票价时遇到了问题。 我做了什么和在做什么:
第一种方法
我正在获取驾驶员当前位置(旅行开始时保存位置)和结束位置(旅行完成时)之间的距离 像这样。
distanceInMeters = locationChanged.getmCurrentlocation().distanceTo(loc_pick_up);
但是这段代码的问题是。如果乘客上车地点(旅行开始的地方)和下车地点(旅行结束的地方)相同,距离为零。
第二种方法
现在我每分钟都在调用一个方法。第一次执行时。计算接送地点(从旅行开始的地方)和当前位置(1分钟后的位置)之间的距离,并将差异保存在变量中。并且比当前位置成为拾取位置以及再次执行方法时。它计算pickuplocation和当前位置之间的距离(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。
请向我建议一种更好的方法或任何有效的源代码示例。所以我可以解决这个问题。
【问题讨论】:
标签: android distance google-directions-api