开车时计算android中两个位置之间的距离
Posted
技术标签:
【中文标题】开车时计算android中两个位置之间的距离【英文标题】:Calculating distance between two locations in android while driving 【发布时间】: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。
请向我建议一种更好的方法或任何有效的源代码示例。所以我可以解决这个问题。
【问题讨论】:
【参考方案1】: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);
【讨论】:
你确定吗?我正在使用距离。这两者有什么区别? 据我所知,distanceTo 用于计算从您当前位置到目的地的距离。 DistanceBetween 用于位置 A 和位置 B 之间的距离。但是您也可以将当前位置作为起点,由于某种原因,我通常很难准确地使用 distanceTo。以上是关于开车时计算android中两个位置之间的距离的主要内容,如果未能解决你的问题,请参考以下文章
codeforces 761B Dasha and friends