Autore Topic: [Lat e Long] Differenza di precisione tra google "Marker" e "Location"  (Letto 701 volte)

Offline Giacomo79

  • Utente junior
  • **
  • Post: 123
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    Google Nexus One
  • Play Store ID:
    Big and Fish
  • Sistema operativo:
    Android 2.3
0
Salve a tutti,
ho un problema con la precisione della latitudine (e longitudine) negli oggetti google "Marker" (in realtà si tratta dell'oggetto LatLng dato dalla funzione getPosition() ) e "Location".

Mi spiego meglio: per cercare l'attuale posizione del device, uso questa riga di codice:
Codice: [Seleziona]
Location currentLocation = mLocationClient.getLastLocation();
La latitudine e la longitudine dell'oggetto "Location" hanno una precisione di 7 numeri decimali.

A questo punto aggiungo nella google map un marker nella posizione corrente e poi lo salvo in un database.

Il problema nasce quando clicco sul marker e intercetto l'evento "setOnMarkerClickListener": infatti i campi latitudine e longitudine nell'oggetto "Marker" (oggetto LatLng come spiegato in precedenza) hanno una precisione di 14 numeri decimali, invece di 7, il che mi crea problemi quando voglio andare a riprendere il marker dal database.

Sapete perchè e come posso risolvere il problema (riprendere il marker dal database partendo dalla latitudine e longitudine)?

Spero di essermi spiegato bene.

Grazie.

Offline Nicola_D

  • Utente storico
  • *****
  • Post: 2479
  • SBAGLIATO!
  • Respect: +323
    • Github
    • Google+
    • nicoladorigatti
    • Mostra profilo
  • Dispositivo Android:
    Nexus 6p, Nexus 4, Nexus S, Nexus 7(2012)
  • Sistema operativo:
    Windows 7
Re:[Lat e Long] Differenza di precisione tra google "Marker" e "Location"
« Risposta #1 il: 04 Settembre 2014, 23:22:19 CEST »
0
non mi è mica chiaro il collegamento tra i numeri decimali e il problema a reperire il valore... 7 o 14 decimali che siano è sempre lat/lng quindi un valore double!
quando scrivi un marker nel db, devi usare un id per poi capire cosa stai prendendo dopo, non fare affidamento sulle coordinate!

PS: getLastLocation() non è un metodo affidabile per avere la posizione ATTUALE del device!
IMPORTANTE:NON RISPONDO A PROBLEMI VIA MESSAGGIO PRIVATO
LOGCAT: Non sai cos'è? -> Android Debug Bridge | Android Developers
               Dov'è in Eclipse? -> Window -> Open Prospective -> DDMS e guarda in basso!
[Obbligatorio] Logcat, questo sconosciuto! (Gruppo AndDev.it LOGTFO) - Android Developers Italia

Offline Giacomo79

  • Utente junior
  • **
  • Post: 123
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    Google Nexus One
  • Play Store ID:
    Big and Fish
  • Sistema operativo:
    Android 2.3
Re:[Lat e Long] Differenza di precisione tra google "Marker" e "Location"
« Risposta #2 il: 04 Settembre 2014, 23:48:27 CEST »
0
non mi è mica chiaro il collegamento tra i numeri decimali e il problema a reperire il valore... 7 o 14 decimali che siano è sempre lat/lng quindi un valore double!
quando scrivi un marker nel db, devi usare un id per poi capire cosa stai prendendo dopo, non fare affidamento sulle coordinate!

PS: getLastLocation() non è un metodo affidabile per avere la posizione ATTUALE del device!
E' questo il punto: sono entrambi double eppure hanno una precisione diversa. L'oggetto LatLng (il suo membro latitude) mantiene una precisione di 14 decimali, mentre l'oggetto Location (il suo membro latitude) di 7, ma sono entrambi double.

Facevo affidamento sulle coordinate perchè un marker è associato a delle coordinate in modo biounivoco, però ho risolto con il nome invece che con l'id.

Per quanto riguarda il getLastLocation, in realtà è il codice più aggiornato per reperire l'attuale posizione, a detta di google.

Retrieving the Current Location | Android Developers

Offline bradipao

  • Moderatore globale
  • Utente storico
  • *****
  • Post: 4043
  • keep it simple
  • Respect: +567
    • Github
    • Google+
    • bradipao
    • Mostra profilo
  • Dispositivo Android:
    Nexus 5
  • Play Store ID:
    Bradipao
  • Sistema operativo:
    W7
Re:[Lat e Long] Differenza di precisione tra google "Marker" e "Location"
« Risposta #3 il: 05 Settembre 2014, 07:45:51 CEST »
0
E' questo il punto: sono entrambi double eppure hanno una precisione diversa. L'oggetto LatLng (il suo membro latitude) mantiene una precisione di 14 decimali, mentre l'oggetto Location (il suo membro latitude) di 7, ma sono entrambi double.

Ma se tagli a 7 decimali il numero con precisione a 14, non va bene?
NON rispondo a domande nei messaggi privati
Bradipao @ Play Store

Offline Giacomo79

  • Utente junior
  • **
  • Post: 123
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    Google Nexus One
  • Play Store ID:
    Big and Fish
  • Sistema operativo:
    Android 2.3
Re:[Lat e Long] Differenza di precisione tra google "Marker" e "Location"
« Risposta #4 il: 05 Settembre 2014, 10:33:30 CEST »
0
Ma se tagli a 7 decimali il numero con precisione a 14, non va bene?
Ho provato, ma i 2 valori sarebbero diversi.

Le prima 7 cifre della latitudine (o longitudine) della versione a 14 decimali è diversa della versione a 7 decimali. E stiamo parlando dello stesso marker.

Offline Nicola_D

  • Utente storico
  • *****
  • Post: 2479
  • SBAGLIATO!
  • Respect: +323
    • Github
    • Google+
    • nicoladorigatti
    • Mostra profilo
  • Dispositivo Android:
    Nexus 6p, Nexus 4, Nexus S, Nexus 7(2012)
  • Sistema operativo:
    Windows 7
Benvenuto nel mondo GIS, nei sistemi di proiezione e nell'approssimazione dei dati geografici! :)
Devi sapere che la mappa di google maps che vedi USA il sistema di riferimento EPSG:3857 (omonimo di EPSG:900913 che è gOOglE in numeri :D ) normalmente 'misura' in metri i valori.
Questa proiezione è utilizzata per visualizzare la mappa quadrata (Chamata Web Mercator), e per farlo "stira" il mondo. Se infatti guardi bene, le proporzioni non tornano, i poli sono enormi..

Il GPS invece ti da le coordinate in lat/lng utilizzando il sistema di riferimento EPSG:4326 (chiamato anche WGS84).

Quindi google maps cosa fa? prende le coordinate dal GPS, le converte in 3857 (in realtà si dice che riproietta il dato) e se lo salva. Poi deve rifare anche la conversione opposta per mostrarti il valore, e qui si crea il problema, dato che per le conversioni si passa per seni, coseni, tangenti, logaritmi e PI grechi (beh, dai,pigreco), capisci che è facile che le cifre decimali meno importanti cambino parecchio...
« Ultima modifica: 05 Settembre 2014, 11:42:50 CEST da Nicola_D, Reason: Ringraziamo Tapatalk che si è perso la mia spiegazione articolata... »
IMPORTANTE:NON RISPONDO A PROBLEMI VIA MESSAGGIO PRIVATO
LOGCAT: Non sai cos'è? -> Android Debug Bridge | Android Developers
               Dov'è in Eclipse? -> Window -> Open Prospective -> DDMS e guarda in basso!
[Obbligatorio] Logcat, questo sconosciuto! (Gruppo AndDev.it LOGTFO) - Android Developers Italia

Offline Giacomo79

  • Utente junior
  • **
  • Post: 123
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    Google Nexus One
  • Play Store ID:
    Big and Fish
  • Sistema operativo:
    Android 2.3
Benvenuto nel mondo GIS, nei sistemi di proiezione e nell'approssimazione dei dati geografici! :)
Devi sapere che la mappa di google maps che vedi USA il sistema di riferimento EPSG:3857 (omonimo di EPSG:900913 che è google in numeri
:)

Infatti ho seguito il tuo consiglio e mi salvo il nome del marker, e lo riprendo dal database dal nome.