2013-03-21 70 views
1

我正在努力构建我的应用程序的一段距离旅行部分,但我遇到了我的位置问题。在位置侦听器中,我输出纬度和长度坐标,我可以看到坐标不断变化,现在我知道他们永远不会完全相同,但是当我将第一个注册位置存储在侦听器中时,然后检查距离和不断更新的位置之间的距离,可以高达25米。这里是我的监听器代码:为什么我的位置不断变化,我的代码不正确?

public class MyLocationListener implements LocationListener { 
    public void onLocationChanged(Location location) { 

     if(flag ==0){ 

      locationC = location; 
      flag = 1; 
     } 

     //Constantly updated location 
     locationD = location; 

     //walking distance is distance from first initialized location to current location 
     walking = locationC.distanceTo(locationD); 

     String s =String.valueOf(location.getLatitude()); 
     String ss =String.valueOf(location.getLongitude()); 

     Toast.makeText(getApplicationContext()," "+s+" "+ss+" " ,Toast.LENGTH_SHORT).show(); 
     Toast.makeText(getApplicationContext(),"Walking distance is "+walking ,Toast.LENGTH_SHORT).show(); 

    } 

    public void onStatusChanged(String s, int i, Bundle b) { 
    } 

    public void onProviderDisabled(String s) { 
    } 

    public void onProviderEnabled(String s) { 
    } 
} 

这里是在onCreate方法运行我的位置代码的其余部分:

// Creating the location manger and towers etc 
    lm = (LocationManager) getSystemService(Context.LOCATION_SERVICE); 
    Criteria crit = new Criteria(); 
    towers = lm.getBestProvider(crit, false); 
    location = lm.getLastKnownLocation(towers); 


    lm.requestLocationUpdates(LocationManager.GPS_PROVIDER,MINIMUM_TIME_BETWEEN_UPDATE, MINIMUM_DISTANCECHANGE_FOR_UPDATE, new MyLocationListener()); 

    if (location != null) { 
     glat = location.getLatitude(); 
     glon = location.getLongitude(); 
    } 

我研究,我使用的是看是否有该V2地图一个更准确的方式来获取位置,我发现googleMap.getLocation();被打破,实际上它导致我的应用程序失败。我不确定我是否已经正确设置了听众或其他位置代码,我觉得该位置不应该像这样跳跃。

我会说,我正在使用GPS来获取位于适度多云的天空下的位置,该设备告诉我位置由GPS设置。任何人都可以建议更好的务实方式来获得更好的位置?

回答

3

哪个是你不变MINIMUM_DISTANCECHANGE_FOR_UPDATE的价值?

我已经分配了50米,my app。我还分配了2分钟MINIMUM_TIME_BETWEEN_UPDATE。

Source code of my app |请参阅方法subscribeToLocationUpdates

+0

矿被设置为1,我将它改为50,看看有什么不同,谢谢! – deucalion0 2013-03-21 12:28:03

+1

不客气!看看这个[Javadoc](http://goo.gl/jCsNF) – 2013-03-21 12:45:25

+0

你的代码帮助我调整位置多一点,所以谢谢,但我不得不承认,我的想法将不会成功计算某人走过的距离,它不会工作。 :( – deucalion0 2013-03-21 18:52:45

3

随着目前的GPS技术,经纬度在20-50米范围内跳转是绝对正常的。

3

25m偏差在平民下完全正常GPS精度。

有关GPS如何工作的更多详情,请参见here,特别是:

The cause for poor accuracy is not always obvious but is usually attributable to one of the following source of error:

- Multipath/signal corruption 
- Low number of satellites/poor satellite geometry 
- Erratic Ionospheric activity 
+0

感谢您的信息。那么你认为在计算以米为单位的距离方面这不起作用吗?我想以某种方式存储用户走过的距离,这是我能看到如何做到这一点的唯一方法。谢谢! – deucalion0 2013-03-21 12:30:44

+2

如果您知道最高速度(行走人通常不会超过5公里/小时),您可以平均您的结果以获得更精确的位置。我会平均超过5-6个连续的样本(或者可能是10个或更多),因为步行的人在短短几秒内就不会走得很远。 – lenik 2013-03-21 12:34:07

+0

谢谢你我会试着想出这样的事情,欢呼! – deucalion0 2013-03-21 13:01:43

相关问题