Gegenstück von Location.convert() gesucht.

  • Hallo,
    beim Testen für eine GPS-APP habe ich das Umwandeln der Latitude oder Longitude in das Format "Grad Minuten Sekunden" mit

    Code
    Location.convert(doublewert,Location.FORMAT_SECONDS);


    gemacht und suche nun die Methode, um aus diesem String dann wieder die Latitude oder Longitude als Dezimalwert zu erstellen.
    Kennt jemand diese Methode und kann sie mir nennen?
    Beim Spielen (Testen von Location.convert) sind mir dann noch einige Besonderheiten aufgefallen.
    Beispiel:
    bei Eingabe 6.1 Resultat 6:5:60
    bei Eingabe 6.2 Resultat 6:12:0
    bei Eingabe 6.3 Resultat 6:17:60
    bie Eingabe 6.123 Resultat 6:7:22,8
    Man kann die Daten nicht wirklich so gebrauchen, denn es können durchaus Werte von 60 Sekunden auftreten, was naürlich nicht richtig ist....
    Man muss also die Daten noch nachträglich bearbeiten.
    Zweitens können durchaus auch Werte mit Komma auftreten.
    Da passt mal wieder was nicht richtig zusammen, denn wollte man mit

    Code
    double wert=Double.valueOf(hilf);
    int sekunden=Math.round((float)wert);


    den Wert des Sekundenstrings ändern muss man vorher

    Code
    if (hilf.indexOf(',') > -1)   
    {
    	hilf=hilf.replace(",",".");
    }


    das mögliche Komma ändern.......


    Hoffend auf eine Beantwortung meiner Frage warte ich mit schönen Grüßen, schymura ^^

  • Zur ersten Frage:
    Wozu? 8|
    Du hältst doch dein Location Objekt die ganze Zeit vor.


    Wenn du also die formatierten Daten benötigst, dann gibst du diese via Convert() aus.
    Wenn nicht, dann nutzt du eben weiter deine Location.


    Also ich finde das schon ziemlich schlüssig.


    Anderes Beispiel: ich habe einen Wert 'Meter'. Dem gebe ich noch eine Methode 'Convert()' mit, welche mir die Yards errechnet.
    Auch hier: ich benötige kein Meter.Convert().Reconvert() um auf Meter zugreifen zu können, da ich simpel mit Meter auf Meter zugreifen kann.


    Wie dem auch sei: Location.convert(String) sollte doch genau das tun...


    Zum "Formatierungsproblem":
    Zum einen ist das Format eben nicht als 1/60 der Minute definiert, sondern als 1/3600 des Grads. Da kann durchaus einmal ne 60 oder ne 59,873 bei rum kommen.
    Wenn du andere Plattformen befragst, kann da durchaus eine Dezimalsekunde mit Nachkommastellen bei rum kommen. Millisekunden, Nanosekunden etc.pp.
    (Bei der Navigation war laut Wiki die Tertie 1/60 der Winkelsekunde.)


    Vergleichst du http://www.deine-berge.de/umrechner_koordinaten.php
    Da sieht es genau so aus.
    Eventuell ist die 60 ja eigentlich nur eine 59.9999999999999999999999999983123, die vom System freundlicherweise auf 60 aufgerundet und entsprechend dargestellt wird. Floats und Doubles sind da ja sehr ungenau.


    Du müsstest also selbst zusehen, dass du die Daten entsprechend deiner Vorstellungen formatiert bekommst.

    Je mehr Käse, desto mehr Löcher.
    Je mehr Löcher, desto weniger Käse.
    Daraus folgt: je mehr Käse, desto weniger Käse.


    »Dies ist ein Forum. Schreibt Eure Fragen in das Forum, nicht per PN!«

  • Hallo Lucas de Vil,
    danke für deine Antwort.
    Ich hätte vielleicht genauer schreiben sollen, dass die Location entweder über den Dezimalwert( Longitude, Latitude) eingegeben werden kann, als auch über Himmelsrichting Grad Minuten Sekunden.
    Für die letztere Eingabe suchte ich also das Gegenstück von Location.convert().


    Deine Idee

    Zitat

    Wie dem auch sei: Location.convert(String) sollte doch genau das tun...

    habe ich natürlich sofort getestet.


    Code
    double testwert=6.1;
    String hilf=Location.convert(testwert, Location.FORMAT_SECONDS);
    testwert=Location.convert(hilf);


    Es führt jedoch zum Appsturz, dabei tritt der Fehler bei "testwert=Location.convert(hilf)" auf.


    Dass ich die Sekundenwerte nicht als Dezinalwert haben möchte liegt daran, dass man mit so einem Wert auf einer (Wander-)Karte nichts anfangen kann, da ist schon das Finden von Grad Minute und Sekunde die genaueste Art der Orientierung......


    Danke für den Link.
    Schöne Grüße, schymura ^^

  • Hallo Lucas de Vil,

    Zitat

    Wenn du mir jetzt noch sagst welcher Fehler genau das ist...

    das hatte ich "befürchtet".
    Habe jetzt also den Stand mit den Fehler zurückkopiert und ausgeführt.
    Ergebnis:

    Ich kann damit nicht viel anfangen.
    Hier dann noch der andere Auszug aus der LogCat:

    Schöne Grüße, schymura ^^

  • Tja, offenbar ist dein String kein String.

    Java
    @Override
    public void onStart()
    {
            super.onStart();
            String text = Location.convert(latitude, Location.FORMAT_SECONDS);
            Log.e(TAG, "Latitude "+latitude+"="+text);
            double calculated = Location.convert(text);
            Log.e(TAG, "Coordinate "+calculated);
    }


    Zitat

    04-14 13:20:59.466: ERROR/DataGatherer(613): Latitude 53.123=53:7:22.8
    04-14 13:20:59.476: ERROR/DataGatherer(613): Coordinate 53.123


    Oder vielmehr kein passender String.
    Wenn ich logCat richtig verstehe, übergibst du als String:
    "coordinate=6:5:60"


    Location.convert(String) erwartet aber ein "6:5:60".
    Da dürfte das Problem liegen.
    (Geht aber aus deinem Codebeispiel nicht hervor. Testest du die Beispiele,die du hier postest?)

    Je mehr Käse, desto mehr Löcher.
    Je mehr Löcher, desto weniger Käse.
    Daraus folgt: je mehr Käse, desto weniger Käse.


    »Dies ist ein Forum. Schreibt Eure Fragen in das Forum, nicht per PN!«

  • Hallo Lucas de Vil
    danke für deine Mühe.

    Zitat

    Wenn ich logCat richtig verstehe, übergibst du als String:
    "coordinate=6:5:60"


    Location.convert(String) erwartet aber ein "6:5:60".

    Leider jedoch ist meine Übergabe ein Sring mit dem Wert "6:5:60".
    Ich weiss das so genau, weil ich diesen String in der weiteren Bearbeitunge, also wenn die Zeile die den Fehler macht ausgeklammert ist,

    Zitat

    //testwert=Location.convert(hilf);

    mit Stingroutinen (indexOf(), lastIndexOf() und substring()) auseinander nehme um dann die einzelnen Teile mit Integer.valueOf() umwandle usw....


    Es ist also wirklich ein String, den ich da übergab.


    Schöne Grüße, schymura ^^

  • Also entweder zeigst du mir jetzt den kompletten nicht funktionierenden Quelltext oder erklärst mir, wie deine IDE auf den Parameter 'coordinate=6:5:60' kommt.

    Je mehr Käse, desto mehr Löcher.
    Je mehr Löcher, desto weniger Käse.
    Daraus folgt: je mehr Käse, desto weniger Käse.


    »Dies ist ein Forum. Schreibt Eure Fragen in das Forum, nicht per PN!«

  • Hallo Lucas de Vil,

    Zitat

    oder erklärst mir, wie deine IDE auf den Parameter 'coordinate=6:5:60' kommt.

    ich kanns dir nicht erklären.
    Aber deinem Wunsch gemäß setze ich mal die ganze Funktion als Quelltext rein.


    Dazu vorab die Information, dass in Zeile 4 der String in eine Variable gerettet wird, die dann in der 4. letzten Zeile
    Location gegeben wird.

    Zitat

    double einser=Location.convert(halten);

    Verstehet du den Fehler???



    Fragende Grüße, schymura ^^

  • Tja, was soll ich sagen?
    Ich gebe 5.123 rein und bekomme 5.123 raus. Keine Probleme.
    [code=java]//...
    String hilf=Location.convert(ueber, Location.FORMAT_SECONDS);
    // Mal ohne Umbauten.
    Log.e(TAG, "Hilf Result: "+hilf);
    double back = Location.convert(hilf);
    Log.e(TAG, "Back Result: "+back);
    //...
    hilf=Double.toString(einser);
    }


    Log.e(TAG, "Result: "+hilf);
    //...[/quote]


    Zitat

    04-14 15:57:33.153: ERROR/DataGatherer(1871): Hilf Result: 5:7:22.8
    04-14 15:57:33.163: ERROR/DataGatherer(1871): Back Result: 5.123
    04-14 15:57:33.163: ERROR/DataGatherer(1871): Result: 5.123


    An der Methode liegt es einfach nicht, es ist also nicht die fehlerhafte Methode.


    Vielleicht solltest du dir mal die Debugging Tipps von Android an.

    Je mehr Käse, desto mehr Löcher.
    Je mehr Löcher, desto weniger Käse.
    Daraus folgt: je mehr Käse, desto weniger Käse.


    »Dies ist ein Forum. Schreibt Eure Fragen in das Forum, nicht per PN!«

  • Hallo Lucas de Vil,

    Zitat

    An der Methode liegt es einfach nicht, es ist also nicht die fehlerhafte Methode.

    wenns denn so ist....
    Habe die Methode mal zusammengekürzt und erhalte dann auf meinem Smartphone mit android 2.36
    den gleichen Fehler, wie zu Anfang beschrieben.....


    Code
    private void ErmittelWerteUndSchreibeInEdits(double ueber,boolean istlat)
    {
    		String hilf=Location.convert(ueber, Location.FORMAT_SECONDS);
    		String halten=hilf;
    		double einser=Location.convert(halten);
    	hilf=Double.toString(einser);
    }


    Schöne Grüße, schymura ^^

  • Und auch hier: keine Probleme.
    Wie rufst du die Methode denn auf?
    Geht es auf dem Simulator?

    Je mehr Käse, desto mehr Löcher.
    Je mehr Löcher, desto weniger Käse.
    Daraus folgt: je mehr Käse, desto weniger Käse.


    »Dies ist ein Forum. Schreibt Eure Fragen in das Forum, nicht per PN!«

Jetzt mitmachen!

Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!