我正在努力构建我的应用程序的一部分距离,但我的位置有问题。在位置监听器中,我在吐司中输出Lat和Long坐标,我可以看到坐标不断变化,现在我知道它们每次都不会完全相同,但是当我将第一个注册位置存储在监听器中然后检查它与距离不断更新的位置之间的距离可以高达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设置的。任何人都可以建议更好的实用方法来获得更好的位置吗?
答案 0 :(得分:3)
使用目前的GPS技术,纬度/经度在20-50米范围内跳跃是绝对正常的。
答案 1 :(得分:3)
有关GPS工作原理的详细信息,请参阅here:
准确性差的原因并不总是很明显,但通常是这样 可归因于以下错误来源之一:
- Multipath / signal corruption - Low number of satellites / poor satellite geometry - Erratic Ionospheric activity
答案 2 :(得分:3)
您的常量MINIMUM_DISTANCECHANGE_FOR_UPDATE的值是多少?
我已经分配了50米,my app没问题。我还为MINIMUM_TIME_BETWEEN_UPDATE分配了2分钟。
Source code of my app |请参阅方法 subscribeToLocationUpdates