2014-01-21 3 views
0

На моем устройстве все работает нормально, а другие показывают чудовищные расстояния. Как это должно быть в 300 метрах от точки, и это показывает 6000 кмПоиск моего местоположения и расчет расстояния

вот как я получаю мое местоположение:

private SharedPreferences sPref; 
     private LocationManager locationManager; 
    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.start_layout); 

     sPref=getSharedPreferences(ShareTag, MODE_PRIVATE); 
     locationManager = (LocationManager) getSystemService(LOCATION_SERVICE); 
} 

    @Override 
     protected void onResume() { 
     super.onResume(); 
     locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 
      1000 * 10, 10, locationListener); 
     locationManager.requestLocationUpdates(
      LocationManager.NETWORK_PROVIDER, 1000 * 10, 10, 
      locationListener); 

     } 
     private LocationListener locationListener = new LocationListener() { 



      @Override 
      public void onLocationChanged(Location location) { 
       Log.d("MyLog", "my lat="+location.getLatitude()+" splash mylong="+location.getLongitude()); 
      saveCoordinates(location); 
      } 

      @Override 
      public void onProviderDisabled(String provider) { 

      } 

      @Override 
      public void onProviderEnabled(String provider) { 
     //do nothing 
      } 

      @Override 
      public void onStatusChanged(String provider, int status, Bundle extras) { 
       if (provider.equals(LocationManager.GPS_PROVIDER)) { 
       //do nothing 
       } else if (provider.equals(LocationManager.NETWORK_PROVIDER)) { 
        //do nothing 
       } 
      } 
      }; 

      private void saveCoordinates(Location location){ 
       Log.d("MyLog","get in the save coord"); 
       Editor ed=sPref.edit(); 
       ed.putString("myLatitude", ""+location.getLatitude()); 
       ed.putString("myLongtitude", ""+location.getLongitude()); 

       ed.commit(); 

      } 
} 

вот как я получаю мои координаты и хранить их

тогда, когда мне нужно получить расстояние

sPref=context.getSharedPreferences(ShareTag, context.MODE_PRIVATE); 
      myLatitude=Double.parseDouble(sPref.getString("myLatitude", "0")); 
      myLongtitude=Double.parseDouble(sPref.getString("myLongtitude", "0")); 
float[] result = new float[1]; 
latitude=address.getLatitude(); 
longtitude=address.getLongitude(); 
Location.distanceBetween(latitude, longtitude, myLatitude, myLongtitude, result); 

Таким образом, результат [0] показывает нереальные цифры. longtitude=address.getLongitude(); и latitude=address.getLatitude(); верны, поэтому проблема связана с myLatitude и myLongtitude. Я не могу посмотреть журналы этих устройств, чтобы увидеть, не ошибаются ли координаты пользователя. У меня GPS работает неправильно (китайское устройство), поэтому я получаю координаты от сетевого провайдера - возможно, именно поэтому они правы.

Что я могу сделать? Любой совет?

ответ

0
for get current location ::- 

    Criteria criteria = new Criteria(); 
         LocationManager locationManager = (LocationManager) getSystemService(Context.LOCATION_SERVICE); 
         String provider = locationManager.NETWORK_PROVIDER; 
         Location location = locationManager.getLastKnownLocation(provider); 
         if(location==null) 
         { 

         }else 
         { 
          longitude = location.getLongitude(); 
          latitude = location.getLatitude(); 
          Log.i("Latitude : ", String.valueOf(latitude)); 
          Log.i("longitude : ", String.valueOf(longitude)); 
         } 



get distance in KM ::-- 

double distance = distFrom(latitude, longitude, latitude1, longitude1); 

double km = distance/0.62137; 

method ::-- 

public static double distFrom(double lat1, double lng1, double lat2, 
      double lng2) { 
     double earthRadius = 3958.75; 
     double dLat = Math.toRadians(lat2 - lat1); 
     double dLng = Math.toRadians(lng2 - lng1); 
     double sindLat = Math.sin(dLat/2); 
     double sindLng = Math.sin(dLng/2); 
     double a = Math.pow(sindLat, 2) + Math.pow(sindLng, 2) 
       * Math.cos(Math.toRadians(lat1)) 
       * Math.cos(Math.toRadians(lat2)); 
     double c = 2 * Math.atan2(Math.sqrt(a), Math.sqrt(1 - a)); 
     double dist = earthRadius * c; 

     return dist; 
    } 
Смежные вопросы