8

Używam Fused location Api, otrzymuję lokalizację z dokładnością około 10 metrów. Czasem daje dokładność od 4 do 8 metrów. Chcę większej dokładności, używając tej scalonej lokalizacji Api lub w jakikolwiek inny sposób. Czy istnieje sposób na uzyskanie lokalizacji z dokładnością mniejszą niż 4 metry.Chcę uzyskać dokładną lokalizację z google fused api do lokalizacji?

Otrzymuję lokalizację w ten sposób.

public class GetCurrentLocation implements 
      ConnectionCallbacks, OnConnectionFailedListener, LocationListener { 

     private static final String TAG = "location-updates-sample"; 
     public static final long UPDATE_INTERVAL_IN_MILLISECONDS = 0; 
     public static final long FASTEST_UPDATE_INTERVAL_IN_MILLISECONDS = 
       UPDATE_INTERVAL_IN_MILLISECONDS/2; 
     private final String REQUESTING_LOCATION_UPDATES_KEY = "requesting-location-updates-key"; 
     private final String LOCATION_KEY = "location-key"; 
     private final String LAST_UPDATED_TIME_STRING_KEY = "last-updated-time-string-key"; 
     private GoogleApiClient mGoogleApiClient; 
     private LocationRequest mLocationRequest; 

     private Context mContext; 
     private getLocation mGetCurrentLocation; 

     public GetCurrentLocation(Context context) { 
      mContext = context; 

      buildGoogleApiClient(); 
     } 

     private synchronized void buildGoogleApiClient() { 
      Log.i(TAG, "Building GoogleApiClient"); 
      mGoogleApiClient = new GoogleApiClient.Builder(mContext) 
        .addConnectionCallbacks(this) 
        .addOnConnectionFailedListener(this) 
        .addApi(LocationServices.API) 
        .build(); 
      createLocationRequest(); 
     } 

     public interface getLocation{ 
      public void onLocationChanged(Location location); 
     } 

     public void startGettingLocation(getLocation location) { 
      mGetCurrentLocation = location; 
      connect(); 
     } 

     public void stopGettingLocation() { 
      stopLocationUpdates(); 
      disconnect(); 
     } 

     private void createLocationRequest() { 
      mLocationRequest = new LocationRequest(); 
      mLocationRequest.setInterval(UPDATE_INTERVAL_IN_MILLISECONDS); 
      mLocationRequest.setFastestInterval(FASTEST_UPDATE_INTERVAL_IN_MILLISECONDS); 
      mLocationRequest.setPriority(LocationRequest.PRIORITY_HIGH_ACCURACY); 
     } 

     private void startLocationUpdates() { 
      if (mGoogleApiClient.isConnected()) { 
       LocationServices.FusedLocationApi.requestLocationUpdates(
         mGoogleApiClient, mLocationRequest, this); 
      } 
     } 
    private void stopLocationUpdates() { 
     LocationServices.FusedLocationApi.removeLocationUpdates(mGoogleApiClient, this); 
    } 



    private void connect() { 
     mGoogleApiClient.connect(); 
    } 

    private void disconnect() { 
     if (mGoogleApiClient.isConnected()) { 
      mGoogleApiClient.disconnect(); 
     } 
    } 

    @Override 
    public void onConnected(Bundle connectionHint) { 
     Log.i(TAG, "Connected to GoogleApiClient"); 
     startLocationUpdates(); 

    } 

    @Override 
    public void onLocationChanged(Location location) { 
     mGetCurrentLocation.onLocationChanged(location); 
    } 

    @Override 
    public void onConnectionSuspended(int cause) { 
     Log.i(TAG, "Connection suspended"); 
     mGoogleApiClient.connect(); 
    } 

    @Override 
    public void onConnectionFailed(ConnectionResult result) { 
     Log.i(TAG, "Connection failed: ConnectionResult.getErrorCode() = " + result.getErrorCode()); 
    } 
} 

Używam tej klasy w moim kodzie aktywności.

Jak zoptymalizować ten kod, aby uzyskać dokładną lokalizację. Dzięki.

+0

myślę, że ten kod jest prefektem. nie sądzę, że może być bardziej zoptymalizowany. – Umar

Odpowiedz

4

Dokładność lokalizacji jest oparta na dostawcy GPS/sieci, można tylko czekać i uzyskać od nich lokalizację.

Można określić Dokładność ponownie

@Override 
public void onLocationChanged(Location location) { 
    int suitableMeter = 20; // adjust your need 
    if (location.hasAccuracy() && location.getAccuracy() <= suitableMeter) { 
     // This is your most accurate location. 
    } 

} 
+1

location.getAccuracy() zawsze zwróci 0.0, jeśli location.hasAccuracy() jest fałszywe. Musisz sprawdzić hasAccuracy() przed oceną dokładności lokalizacji. Zobacz http://developer.android.com/reference/android/location/Location.html#getAccuracy() –

+0

@MuchOverflow dzięki, zaktualizowałem odpowiedź. – james

Powiązane problemy