8

Tôi đang sử dụng Vị trí hợp nhất Api, tôi đang nhận được vị trí với độ chính xác khoảng 10 mét. Một số lần nó cho độ chính xác từ 4 đến 8 mét. Tôi muốn chính xác hơn bằng cách sử dụng vị trí hợp nhất này Api hoặc với bất kỳ cách nào khác. Có cách nào để có được vị trí có độ chính xác dưới 4 mét không.Tôi muốn nhận vị trí chính xác với api vị trí hợp nhất của google?

Tôi đang nhận vị trí theo cách này.

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()); 
    } 
} 

Và tôi đang sử dụng lớp này trong mã hoạt động của tôi.

private GetCurrentLocation mListen; 
mListen = new GetCurrentLocation(this); 
      mListen.startGettingLocation(new GetCurrentLocation.getLocation() { 
       @Override 
       public void onLocationChanged(Location location) { 
        // Here is my working with location object 
       } 

      }); 

Làm cách nào để tối ưu hóa mã này để có được vị trí chính xác. Cảm ơn.

+0

tôi nghĩ rằng mã này là hoàn hảo. tôi không nghĩ rằng nó có thể được tối ưu hóa hơn. – Umar

Trả lời

4

Độ chính xác của vị trí dựa trên nhà cung cấp GPS/Mạng, bạn chỉ có thể chờ và nhận vị trí từ họ.

Bạn có thể xác định chính xác một lần nữa

@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() sẽ luôn trả về 0.0 nếu location.hasAccuracy() là sai. Bạn phải kiểm tra hasAccuracy() trước khi đánh giá độ chính xác của vị trí. Tham khảo http://developer.android.com/reference/android/location/Location.html#getAccuracy() –

+0

@MuchOverflow cảm ơn, tôi đã cập nhật câu trả lời. – james

Các vấn đề liên quan