我正在尝试制作跟踪应用程序。
问题是我从gps locationlistner获得的位置是真实的,但googlemap中显示的位置错误至少20米。 如下图所示,红线在10秒后从第一个已知位置绘制到更新位置。所以要明确我在10秒后得到了几乎一个完美的位置,但仍然蓝色图标不会改变它。 (注意,它被缩放到最大值)
代码:
public class LocationHandler{
//Location handlers
private LocationManager locationManager = null;
//Keep track of current location
private LatLng currentLatLng = null;
private Location currentLocation = null;
//Bools
private Boolean gpsLock = false;
private Boolean gpsEnable = false;
public LocationHandler(Activity activity) {
int status = GooglePlayServicesUtil.isGooglePlayServicesAvailable(activity);
// Showing status
if(status!=ConnectionResult.SUCCESS){ // Google Play Services are not available
int requestCode = 10;
Dialog dialog = GooglePlayServicesUtil.getErrorDialog(status, activity, requestCode);
dialog.show();
}else {
// Getting LocationManager object from System Service LOCATION_SERVICE
locationManager = (LocationManager)activity.getSystemService(Context.LOCATION_SERVICE);
// Check type of location service
if(locationManager != null){
try{gpsEnable = locationManager.isProviderEnabled(LocationManager.GPS_PROVIDER);}catch(Exception ex){}
if(gpsEnable){
locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 0, 0, gpsLocationListener);
}
}
}
}
public void stopLocationUpdates() {
if(gpsLocationListener != null){
locationManager.removeUpdates(gpsLocationListener);
}
}
/**
* @return the currentLocation
*/
public Location getCurrentLocation() {
return currentLocation;
}
/**
* @return the latLng
*/
public LatLng getCurrentLatLng() {
return currentLatLng;
}
/**
* @return the gpsLock
*/
public Boolean getGpsLock() {
return gpsLock;
}
public void setLatLng(Location location){
if(location.getAccuracy() < 50){
double latitude = location.getLatitude();
// Getting longitude of the current location
double longitude = location.getLongitude();
// Creating a LatLng object for the current location
currentLatLng = new LatLng(latitude, longitude);
currentLocation = location;
}
}
private LocationListener gpsLocationListener = new LocationListener() {
@Override
public void onStatusChanged(String provider, int status, Bundle extras){}
public void onProviderEnabled(String provider){}
public void onProviderDisabled(String provider){}
@Override
public void onLocationChanged(Location location) {
gpsLock = true;
setLatLng(location);
}
};
}
答案 0 :(得分:0)
GPS的准确性取决于多种因素,如:
正如你提到至少20米,我认为它并不是那么遥远。在我的应用程序中,我看到gps传感器在多云的阴雨天被关闭超过3公里。通常,精度在50米以内。您可以使用谷歌地图应用程序检查您和谷歌的应用程序之间的相对准确性。
答案 1 :(得分:0)
蓝点不一定完全匹配位置监听器获得的坐标。 过滤蓝点,以避免不切实际的跳跃。 当你不动时,就会发生这种跳跃。
您可能坐在建筑物内或高层建筑物周围 如果您移动(沿着街道行走),点将更新以匹配坐标 更进一步没有人告诉谷歌地图上的街道总是在正确的位置 向谷歌(TomTom和Navteq)提供地图的地图公司表示,城市内的准确度在5米以内,而在农村地区则为20米。
然而在你的情况下,我认为 - 如上所述 - 它是对蓝点的过滤。 (在ios上,如果你开车的话,蓝点甚至可以推断出未来。)
当你在外面时,城市的精确度偏差可达到约30米,如果你在靠近窗户的建筑物内,偏移可能超过60米。