8

मैं फ़्यूज्ड स्थान एपीआई का उपयोग कर रहा हूं, मुझे लगभग 10 मीटर सटीकता के साथ स्थान मिल रहा है। कुछ बार यह 4 से 8 मीटर सटीकता देता है। मैं इस फ़्यूज्ड स्थान एपी या किसी अन्य तरीके से उपयोग करके अधिक सटीकता चाहता हूं। 4 मीटर से कम सटीकता के साथ स्थान प्राप्त करने का कोई तरीका है।मैं Google fused location api के साथ सटीक स्थान प्राप्त करना चाहता हूं?

मुझे इस तरह से स्थान मिल रहा है।

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

और मैं इस गतिविधि का उपयोग अपने गतिविधि कोड में कर रहा हूं।

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 
       } 

      }); 

मैं सटीक स्थान प्राप्त करने के लिए इस कोड को कैसे अनुकूलित कर सकता हूं। धन्यवाद।

+0

मुझे लगता है कि इस कोड को प्रधान है। मुझे नहीं लगता कि यह अधिक अनुकूलित हो सकता है। – Umar

उत्तर

4

स्थान सटीकता जीपीएस/नेटवर्क प्रदाता पर आधारित है, आप केवल प्रतीक्षा कर सकते हैं और उनसे स्थान प्राप्त कर सकते हैं।

आप सटीकता निर्धारित कर सकते हैं फिर से

@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() location.hasAccuracy() गलत है तो हमेशा 0.0 वापस आ जाएगा। स्थान की सटीकता का मूल्यांकन करने से पहले आपको सटीकता() की जांच करनी होगी। Http://developer.android.com/reference/android/location/Location.html#getAccuracy() –

+0

@MuchOverflow धन्यवाद, मैंने जवाब अपडेट किया। – james

संबंधित मुद्दे