Dove salvare i punti GPS di Android (latitudine, longitudine)?

Su evento onLocationChanged desidero salvare il mio path GPS (latitudine, lunghezza). In seguito desidero caricare questi dati e disegnare il path.

Chi è il modo migliore per farlo, utilizzando un certo tipo di arrays (e salvare o caricare utilizzando database) o file XML o qualcos'altro?

  • Trascinare e rilasciare le visualizzazioni figlio di linearlayout
  • NativeScript: Disabilita tutti i controlli mentre è visualizzato ActivityIndicator
  • Aggiornamento dell'interface utente con Runnable & postDelayed che non funziona con l'applicazione timer
  • Come faccio a gestire il clic del button fatto di ImeOptions?
  • Lettura di un NXP ICODE SLI-L tag con Android
  • Chiamata Android notifyDataSetChanged da AsyncTask
  • Grazie.

  • Eccezione in unbindDrawables
  • Come disegnare un cerchio con un mezzo trasparente
  • Devo aggiungere un nuovo hash chiave all'applicazione app di Facebook each volta che cambio computer?
  • È ansible per il TextView Marquee in un widget che estende AppWidgetProvider?
  • (Utilizzando Android Studio) AVD si blocca durante il lancio del mio applicativo
  • Come progettare un stream in cui uno degli schermi è uno schermo di accesso?
  • 5 Solutions collect form web for “Dove salvare i punti GPS di Android (latitudine, longitudine)?”

    Il modo migliore per memorizzare valori doppie in SharedPreferences senza perdere la precisione è:

    • Trasformare la rappresentazione di bit per memorizzarla nel tempo:

      prefsEditor.putLong("Latitude", Double.doubleToLongBits(location.getLatitude())); 
    • Per recuperare, trasferire dalla rappresentazione bit a raddoublere:

       double latitude = Double.longBitsToDouble(prefs.getLong("Latitude", 0); 

    Tuttavia, penso che se si desidera memorizzare una grande quantità di punti è meglio utilizzare un database SQLite che salvare each coordinata in una coppia Key-Value in SharedPreferences o serializzare l'arrays in XML e scrivere in un file o in SharedPreferences. Il database offre il vantaggio di caricare in memory solo i punti all'interno dell'area che si sta visualizzando nella mappa, in modo da poter salvare la memory.

    Correggi se sono sbagliato, ma potrebbe essere meglio convertire i valori doppie in stringhe e poi each volta che li chiami convertirli nuovamente. Suona come un dolore, ma il sito web dell'oracle ( http://download.oracle.com/javase/tutorial/java/nutsandbolts/datatypes.html ) dice:

    "utilizzare un float (invece di doppio) se è necessario salvare la memory in grandi arrays di numbers a virgola mobile. Questo tipo di dati non dovrebbe mai essere utilizzato per valori precisi, come la valuta"

     prefEditor.putString("Latitude", Double.valueOf(loc.getLatitude()).toString()); 

    Quindi, call il valore

     String latitudeString = pref.getString("Latitude", "0"); double latitude = Double.parseDouble(latitudeString); 

    Sembra sicuramente più di un fastidio, ma sembra anche più probabile che restituisca il valore esatto che hai salvato, anche, invece di qualcosa leggermente fuori. E suppongo che dipenda da come sia completamente preciso che hai bisogno dei valori.

    Anche se, per quanto riguarda l'utilizzo di un arrays, sono incomprensibile perché non ho mai avuto bisogno di usarli e non ho esperienza con loro.

    Utilizza SharedPreferences e Editor.

    Controlla questo codice open source, probabilmente ti aiuterà molto: OsmandSettings.java

    Spiegherò le parti importnti del codice:

     import android.content.SharedPreferences; import android.content.SharedPreferences.Editor; // These settings are stored in SharedPreferences, replace com.osmand.settings // with your own package name, or whatever String you want. public static final String SHARED_PREFERENCES_NAME = "com.osmand.settings"; public static final String LATITUDE = "latitude"; public static final String LONGITUDE = "longitude"; 

    Per scrivere a SharedPreferences:

     public void onLocationChanged(Location location){ SharedPreferences prefs = Context.getSharedPreferences(SHARED_PREFERENCES_NAME, Context.MODE_WORLD_READABLE); Editor editor = prefs.edit(); //Save it as a float since SharedPreferences can't deal with doubles edit.putFloat(LATITUDE, (float) Location.getLatitude()); edit.putFloat(LONGITUDE, (float) Location.getLongitude()); edit.commit(); } 

    Per leggere da SharedPreferences:

     public void onLocationChanged(Location location){ SharedPreferences prefs = Context.getSharedPreferences(SHARED_PREFERENCES_NAME, Context.MODE_WORLD_READABLE); double lat = (double)prefs.getFloat(LATITUDE, 0); double lon = (double)prefs.getFloat(LONGITUDE, 0); } 

    Ho avuto anche lo stesso problema mentre stavo facendo app su Map. In realtà una buona domanda che direi.

    puoi fare questo.

    1> Evento clic su Mappa dovrà mostrare latitudine e longitudine di quel punto. qui im ​​attaccando il codice come u può trovare lat e lungo.

     public boolean onTouchEvent(MotionEvent event, MapView mapView) { //---when user lifts his finger--- if (event.getAction() == 1) { GeoPoint p = mapView.getProjection().fromPixels( (int) event.getX(), (int) event.getY()); Toast.makeText(getBaseContext(), p.getLatitudeE6() / 1E6 + "," + p.getLongitudeE6() /1E6 , Toast.LENGTH_SHORT).show(); } return false; } 

    2> Ora è ansible memorizzare questo lat e lungo in KEY, coppia di valori. qui u deve prendere valore1 come lat e valore 2 per quanto tempo. e passare l'object di
    valore (valore1, valore2) alla chiave, coppia di valori.

    3> Ora u ha l'elenco di tutti i lat e di lungo tempo attraverso cui sei passato. quindi disegnare il path dal primo indice all'ultimo indice.

    Questo è quello che penso il modo migliore per implementare questa applicazione.

    Pensate alla precisione (non esattezza) che devi rappresentare i dati. Avrebbe un paio di centimetri abbastanza vicino? La maggior parte dei ricevitori GPS porttili sono fortunati ad essere bravi a un paio di metri. Un secondo grado di longitudine all'equatore ti muove di circa 100 piedi. Se si utilizza un numero integer a 32 bit per rappresentare le latitudini e le longitudine, LatE6 & LonE6, è ansible memorizzare la longitudine più grande che è +/- 180.000.000 e la cifra less significativa è:

    (1 / 1E6) * (3600 sec / deg) * (100 piedi / sec) = 0,36 piedi o 4 pollici.

    Devo immaginare che il mio Garmin usa qualcosa di simile, non un galleggiante con solo 24 bit di precisione e certamente non un doppio 64 bit. La conversione tra l'integer e il doppio non dovrebbe costare molto. Si potrebbe anche confezionare un paio di lat / lon in un lungo periodo.

    L'Android è un fan Android di Google, tutto su telefoni Android, Android Wear, Android Dev e applicazioni Android Games e così via.