我正在寻找GPS坐标。我的标准是:
不等于最后一个位置
准确度< 500
一般而言,系统应接受<200m aprox的GPS坐标。
我在我的应用中尝试了4次尝试:
首先尝试:
19.3820126,-99.1647096:Acc:50.528 Last location ( That's why we keep searching - error 3 km)
01-29 10:37:42.698 onLocationChanged﹕ 19.364292,-99.1776019:Acc:660.0 (error: Aprox 60 m - should accept it)
01-29 10:37:47.733 onLocationChanged﹕ 19.3639126,-99.1771124:Acc:660.0 (error: Aprox 80 m - should accept it)
01-29 10:37:52.788 onLocationChanged﹕ 19.3639126,-99.1771124:Acc:660.0 (error: Aprox 80 m - should accept it)
01-29 10:37:57.853 onLocationChanged﹕ 19.3820112,-99.1646983:Acc:50.531 (Last location - error 3km)... System get the wrong coord.
第二次尝试:
01-29 10:42:05.885 onLocationChanged﹕ 19.3652615,-99.1782989:Acc:784.0 (error: Aprox 100 m - should accept it)
01-29 10:42:10.980 onLocationChanged﹕ 19.3652615,-99.1782989:Acc:784.0 (error: Aprox 100 m - should accept it)
01-29 10:42:15.985 onLocationChanged﹕ 19.3652615,-99.1782989:Acc:784.0 (error: Aprox 100 m - should accept it)
01-29 10:42:21.020 onLocationChanged﹕ 19.3652615,-99.1782989:Acc:784.0 (error: Aprox 100 m - should accept it)
01-29 10:42:26.085 onLocationChanged﹕ 19.3652615,-99.1782989:Acc:784.0 (error: Aprox 100 m - How can onLocationChanged can be called if location is not changing)
第三次尝试:
01-29 10:47:20.002 onLocationChanged﹕ 19.3652615,-99.1782989:Acc:784.0 (Last location - error: Aprox 100 m)
01-29 10:47:25.037 onLocationChanged﹕ 19.3820153,-99.1646946:Acc:50.532 (Last location - error 3km)... System get the wrong coord.
第四次尝试:
01-29 11:00:25.518 onLocationChanged﹕ 19.3651962,-99.1780395:Acc:639.0 (error: Aprox 100 m - should accept it)
01-29 11:00:34.016 onLocationChanged﹕ 19.3651962,-99.1780395:Acc:639.0 (error: Aprox 100 m - should accept it)
01-29 11:00:38.451 onLocationChanged﹕ 19.3651962,-99.1780395:Acc:639.0 (error: Aprox 100 m - should accept it)
01-29 11:00:43.455 onLocationChanged﹕ 19.3651962,-99.1780395:Acc:639.0 (error: Aprox 100 m - should accept it)
01-29 11:00:48.530 onLocationChanged﹕ 19.3651962,-99.1780395:Acc:639.0 (error: Aprox 100 m - should accept it)
01-29 11:00:53.585 onLocationChanged﹕ 19.3651962,-99.1780395:Acc:639.0 Time's up, app doesn't accept the coord ( criteria is Acc < 500), but I could accept it.
这四次尝试让我问了很多:
准确性是值得信赖的因素。我知道精度越小,效果越好。不过,我在这里发现相信准确性会给我带来错误的结果。
在第一次和第三次尝试中,为什么加入的坐标是另一个坐标(我的家,我在工作)
在第二次尝试中,为什么在坐标是相同的情况下调用onLocationChanged
我的代码很标准:
public class LocationUtils implements
GoogleApiClient.ConnectionCallbacks,
GoogleApiClient.OnConnectionFailedListener, LocationListener {
private static final long ONE_MIN = 1000 * 60;
private Context ctx;
// Debugging tag for the application
public static final String APPTAG = "LocationSample";
public static final int MILLISECONDS_PER_SECOND = 1000;
// The update interval
public static final int UPDATE_INTERVAL_IN_SECONDS = 5;
// A fast interval ceiling
public static final int FAST_CEILING_IN_SECONDS = 1;
// Update interval in milliseconds
public static final long UPDATE_INTERVAL_IN_MILLISECONDS =
MILLISECONDS_PER_SECOND * UPDATE_INTERVAL_IN_SECONDS;
// A fast ceiling of update intervals, used when the app is visible
public static final long FAST_INTERVAL_CEILING_IN_MILLISECONDS =
MILLISECONDS_PER_SECOND * FAST_CEILING_IN_SECONDS;
public static final long FASTEST_INTERVAL_CEILING_IN_MILLISECONDS = 100; // 16ms = 60fps
// Create an empty string for initializing strings
public static final String EMPTY_STRING = new String();
public static GoogleApiClient mGoogleApiClient;
public static LocationRequest mLocationRequest;
private int mAction;
public LocationUtils(Context context) {
ctx = context;
}
public static void disconnectGPS(LocationListener list) {
if (mGoogleApiClient != null && mGoogleApiClient.isConnected()) {
stopPeriodicUpdates(mGoogleApiClient, list);
mGoogleApiClient.disconnect();
}
}
public static void startPeriodicUpdates(GoogleApiClient mGoogleApiClient, LocationRequest mLocationRequest, LocationListener listener) {
LocationServices.FusedLocationApi.requestLocationUpdates(mGoogleApiClient, mLocationRequest, listener);
}
public static void stopPeriodicUpdates(GoogleApiClient mGoogleApiClient, LocationListener listener) {
LocationServices.FusedLocationApi.removeLocationUpdates(mGoogleApiClient, listener);
}
public void init_location(Context ctx) {
mGoogleApiClient = new GoogleApiClient.Builder(ctx)
.addApi(LocationServices.API)
.addConnectionCallbacks(this)
.addOnConnectionFailedListener(this)
.build();
mLocationRequest = LocationRequest.create();
/*
* Set the update interval
*/
mLocationRequest
.setInterval(UPDATE_INTERVAL_IN_MILLISECONDS);
// Use high accuracy
mLocationRequest.setPriority(LocationRequest.PRIORITY_HIGH_ACCURACY);
// Set the interval ceiling to one minute
mLocationRequest
.setFastestInterval(FAST_INTERVAL_CEILING_IN_MILLISECONDS);
mLocationRequest
.setFastestInterval(FASTEST_INTERVAL_CEILING_IN_MILLISECONDS);
}
public static boolean servicesAvailable(Context ctx) {
int resultCode = GooglePlayServicesUtil.isGooglePlayServicesAvailable(ctx);
if (ConnectionResult.SUCCESS == resultCode) {
return true;
} else {
GooglePlayServicesUtil.getErrorDialog(resultCode, (Activity) ctx, 0).show();
return false;
}
}
@Override
public void onConnected(Bundle bundle) {
startPeriodicUpdates(mGoogleApiClient,mLocationRequest, this);
}
@Override
public void onConnectionSuspended(int i) {
}
@Override
public void onLocationChanged(Location location) {
Log.e("onLocationChanged",location.getLatitude()+","+location.getLongitude()+":Acc:"+location.getAccuracy() );
}
@Override
public void onConnectionFailed(ConnectionResult connectionResult) {
}
public void connect(int action) {
mAction = action;
if (!mGoogleApiClient.isConnected()) {
mGoogleApiClient.connect();
}
}
}
我正在使用多种设备进行测试,三星s4,s3 mini,核心2。 我总是打开GPS,没有wifi,但3G已激活。
编辑: 我在室内进行测试,因此GPS结果不应该很好,但我希望Fused Location能够适应我的情况,因为我无法再选择提供商。
答案 0 :(得分:1)
您的位置在半径范围内的准确率仅为68%,因此仍有很大可能不正确。
没有WiFi你的意思是你没有连接到任何网络或WiFi被禁用?
例如,如果您在一个地方安装了WiFi路由器,然后移动到一个新的地方并随身携带WiFi路由器,Google仍会在相当长一段时间内返回旧位置。
关于你的上一个问题,你要求每5秒更新一次位置,这样即使位置相同,你也会得到指定时间段的回调。
答案 1 :(得分:-1)
重复的问题? How accurate is Android GPS?
但是,如果您希望确定某些位置,取决于您要完成的任何操作,请查看地理围栏。