我正在开发一个应用程序,我需要计算行进的距离。我在计算距离时遇到问题。 这是我的代码:
locationmanager.requestLocationUpdates(bestProvider,0,0,new Listener());
public class Listener implements LocationListener{
@Override
public void onLocationChanged(Location location) {
if(location!=null) {
if(loc1==null) {
loc1=new Location(location);
}
speed=location.getSpeed()*3.6;
loc2=new Location(location);
dist+=loc1.distanceTo(loc2);
loc1=loc2;
breaktv.setText(""+dist/1000);
我的目的是计算乘车或其他东西的总行驶距离。但distanceTo()
方法对我来说效果不佳。
答案 0 :(得分:2)
从技术上讲它应该有效。
我有一些建议:
dist
必须为float
(如果尚未加入)dist += loc2.distanceTo(location)
,无需创建loc1
这是我用过的代码
if(lastLoc != null)
{
ttf = (location.getTime() - lastLoc.getTime()) / 1000;
int R = 6371;
double lat1 = Math.PI / 180.0 *lastLoc.getLatitude();
double lon1 = Math.PI / 180.0 *lastLoc.getLongitude();
double lat2 = Math.PI / 180.0 *location.getLatitude();
double lon2 = Math.PI / 180.0 *location.getLongitude();
// double dLon = Math.PI / 180.0 * (location.getLongitude() - lastLoc.getLongitude());
double dLat = (lat2-lat1);
double dLon = (lon2-lon1);
double a = Math.sin(dLat/2) * Math.sin(dLat/2) +
Math.cos(lat1) * Math.cos(lat2) *
Math.sin(dLon/2) * Math.sin(dLon/2);
double c = 2 * Math.atan2(Math.sqrt(a), Math.sqrt(1-a));
double d = R * c;
totalDistance += d;
}
lastLoc = location;
答案 1 :(得分:1)
这是另一个 Question on SO ,其中我发布了2个Answers,一个用于User Defined函数以获取距离,而另一个用于用户android.Location类方法来计算它。 希望这会对你有所帮助。
当您开始使用 CurrentLocation 并存储时,可能正在使用 SharedPreferences , 然后我认为你需要不断更新行进的距离, 您只需使用 OnLocationChanged 相同的方式并调用上面提到的两个方法来了解当前行进的距离。
编辑: 这是一个可以帮助您的好例子, Link To OpenSource Project